แนะนำ XAES-256-GCM
- XAES-256-GCM เป็นอัลกอริทึมการเข้ารหัสแบบยืนยันความถูกต้อง (AEAD) ที่ใช้คีย์ 256 บิตและ nonce 192 บิต
- เป้าหมายหลัก:
- รองรับ nonce ที่สร้างแบบสุ่มได้อย่างปลอดภัย
- เป็นไปตามข้อกำหนด FIPS 140
- สามารถนำไปใช้ได้ง่ายในไลบรารีเข้ารหัสทั่วไป
เป้าหมายการออกแบบของ XAES-256-GCM
- ใช้ nonce ขนาดใหญ่เพื่อให้สามารถสร้างแบบสุ่มได้อย่างปลอดภัยสำหรับข้อความจำนวนไม่จำกัด
- รองรับการใช้งานในสภาพแวดล้อมที่หลากหลายผ่านการปฏิบัติตาม FIPS 140
- ลดภาระของผู้ใช้ด้วยการติดตั้งใช้งานที่เรียบง่าย
หลักการทำงานของ XAES-256-GCM
- ใช้โครงสร้าง nonce แบบขยายที่อิงจาก AES-256-GCM
- คำนวณคีย์อนุพันธ์จากคีย์อินพุตและ nonce
- ประมวลผลข้อความด้วยการเรียกใช้ AES-256 สามครั้ง
การติดตั้งใช้งานและการปรับแต่งประสิทธิภาพ
- implementation อ้างอิงของ Go มีโค้ดน้อยกว่า 100 บรรทัด
- ใช้เพียง
crypto/cipher และ crypto/aes จาก standard library
- สามารถอธิบายได้ด้วย NIST SP 800-108r1 KDF และ NIST AES-256-GCM AEAD
implementation จากภายนอกและความเข้ากันได้
- มี implementation จากภายนอกใน .NET 8+, pyca/cryptography และ Web Cryptography API
- ไม่สามารถเปลี่ยนจำนวนรอบได้เพื่อให้เป็นไปตาม FIPS 140
ทางเลือกอื่นและ test vector
- มีทางเลือกหลากหลาย เช่น AES-GCM-SIV
- มี test vector สำหรับ code path หลัก
สรุป
- XAES-256-GCM ถูกออกแบบให้เป็น AEAD ที่ปลอดภัย เป็นไปตามข้อกำหนด และทำงานร่วมกันได้
- มีบทบาทเสริม XChaCha20Poly1305 และ AES-GCM-SIV
- หวังว่าจะถูกเพิ่มเข้าไปใน Go standard library
ความเห็นของ GN⁺
- XAES-256-GCM น่าสนใจจากการใช้ nonce ขนาดใหญ่เพื่อเพิ่มความปลอดภัย
- ใช้งานได้ในสภาพแวดล้อมที่หลากหลายด้วยการปฏิบัติตาม FIPS 140
- สามารถติดตั้งใช้งานได้ง่ายในภาษาอย่าง Go จึงมีประโยชน์สำหรับนักพัฒนา
- ทางเลือกอย่าง AES-GCM-SIV ก็ควรค่าแก่การพิจารณาเช่นกัน
- เมื่อนำเทคโนโลยีใหม่มาใช้ ควรพิจารณาประสิทธิภาพและความเข้ากันได้อย่างรอบคอบ
1 ความคิดเห็น
ความคิดเห็นจาก Hacker News
การออกแบบฉลาดมาก: อิงกับ CMAC และสามารถใช้ AES-CBC เพื่ออนุมานคีย์ได้เมื่อไม่มี primitive ระดับล่าง
งานของ Filippo ยอดเยี่ยมมาก: แก้ปัญหาที่ต้องหมุนคีย์ทุก ๆ 2^32 ข้อความเมื่อใช้ nonce แบบสุ่ม
อยากให้ฟีเจอร์นี้มีอยู่เมื่อหลายปีก่อนตอนเขียนระบบไฟล์เข้ารหัส
หวังว่าฟีเจอร์นี้จะถูกนำไปใช้กับ age เวอร์ชันที่สอดคล้องกับ FIPS สำหรับการเข้ารหัสไฟล์ archive[1]
คำถามจากคนที่ไม่ใช่นักเข้ารหัส: สงสัยว่าทำไมถึงใช้ nonce 192 บิต ไม่ใช้ 256 บิต
(ความเสี่ยงการชนกัน 2⁻³² ที่ 2⁸⁰ ข้อความ)