Giới thiệu về XAES-256-GCM
- XAES-256-GCM là một thuật toán mã hóa có xác thực (AEAD) sử dụng khóa 256 bit và nonce 192 bit
- Mục tiêu chính:
- hỗ trợ an toàn cho nonce được tạo ngẫu nhiên
- tuân thủ FIPS 140
- có thể dễ dàng triển khai trong các thư viện mã hóa phổ biến
Mục tiêu thiết kế của XAES-256-GCM
- Sử dụng nonce lớn để có thể tạo ngẫu nhiên một cách an toàn cho số lượng thông điệp không giới hạn
- Có thể sử dụng trong nhiều môi trường khác nhau nhờ tuân thủ FIPS 140
- Giảm gánh nặng cho người dùng nhờ triển khai đơn giản
Nguyên lý hoạt động của XAES-256-GCM
- Sử dụng cấu trúc nonce mở rộng dựa trên AES-256-GCM
- Tính toán khóa dẫn xuất bằng khóa đầu vào và nonce
- Xử lý thông điệp bằng ba lần gọi AES-256
Triển khai và tối ưu hóa
- Bản triển khai tham chiếu bằng Go gồm chưa đến 100 dòng mã
- Chỉ sử dụng
crypto/cipher và crypto/aes của thư viện chuẩn
- Có thể mô tả bằng NIST SP 800-108r1 KDF và NIST AES-256-GCM AEAD
Triển khai của bên thứ ba và khả năng tương thích
- Có các triển khai của bên thứ ba trên .NET 8+, pyca/cryptography và Web Cryptography API
- Không thể thay đổi số vòng lặp để tuân thủ FIPS 140
Các lựa chọn thay thế và test vector
- Có nhiều lựa chọn thay thế như AES-GCM-SIV
- Bao gồm test vector cho các đường dẫn mã chính
Tóm tắt
- XAES-256-GCM được thiết kế như một AEAD an toàn, tuân thủ và có khả năng tương tác
- Đóng vai trò bổ sung cho XChaCha20Poly1305 và AES-GCM-SIV
- Hy vọng sẽ được bổ sung vào thư viện chuẩn của Go
Ý kiến của GN⁺
- Điểm đáng chú ý của XAES-256-GCM là tăng độ an toàn nhờ sử dụng nonce lớn
- Có thể dùng trong nhiều môi trường khác nhau nhờ tuân thủ FIPS 140
- Hữu ích cho nhà phát triển vì có thể dễ dàng triển khai trong các ngôn ngữ như Go
- Các lựa chọn thay thế như AES-GCM-SIV cũng đáng để cân nhắc
- Khi đưa công nghệ mới vào sử dụng, cần xem xét cẩn thận hiệu năng và khả năng tương thích
1 bình luận
Ý kiến trên Hacker News
Thiết kế rất khéo léo: dựa trên CMAC, có thể dùng AES-CBC để dẫn xuất khóa khi không có primitive cấp thấp
CryptoKeyphù hợp vốn được thiết kế cho AES-CBC và có thể lưu trong IndexedDBCông việc của Filippo rất xuất sắc: giải quyết vấn đề phải xoay vòng khóa sau mỗi khoảng 2^32 thông điệp khi dùng nonce ngẫu nhiên
Ước gì tính năng này đã tồn tại vài năm trước khi tôi viết một file system mã hóa
Mong rằng tính năng này sẽ được dùng cho một biến thể age[1] tuân thủ FIPS dành cho mã hóa file archive
Câu hỏi từ người không chuyên về mật mã: tại sao lại dùng nonce 192 bit mà không phải 256 bit?
(rủi ro va chạm 2⁻³² ở 2⁸⁰ thông điệp)