Aes-Gcm
NIST 的密鑰包裝(使用 AES GCM)與普通的 AES GCM 認證加密有何不同?
據我所知,NIST 的密鑰包裝(發布)似乎提供了與 AES-GCM Authenticated 加密類似的安全性。如果這是真的,為什麼我們首先需要單獨的密鑰包裝規範?
您可以在 B.2 節中找到一些資訊。NIST SP 800-38F中的“功能與其他身份驗證方法的比較” ,其中說:
- 許多經過身份驗證的加密算法……提供了一種有效的方法來驗證非機密的相關數據……
- 無需解密密文即可驗證密文上的數字簽名或密文上的 MAC。…
很明顯,NIST KW 不允許在沒有解密或相關標頭數據的情況下進行身份驗證。
但除了 NIST,您可能還對論文Deterministic Authenticated-Encryption感興趣,其中介紹了“密鑰包裝”模式的含義。總而言之,我們可以看看引言部分的以下引用:
我們稱目標確定性身份驗證加密(DAE) … 在 DAE 方案中,加密確定性地將密鑰、標頭和消息轉換為密文。
傳統的 AEAD 在RFC5116: An Interface and Algorithms for Authenticated Encryption中被半規約地對待,需要提供 nonce/IV 以提供所謂的“語義安全”。
至於
問:為什麼我們首先需要單獨的密鑰包裝規範?
確定性降低了濫用方案的可能性,就像在損壞的 RNG 或受損狀態之上執行的非確定性方案一樣。
一個優點是建議使用單個鍵的最大呼叫次數。
- 使用 KWP-AE 或 KW-AE 的呼叫次數沒有限制。加密是無狀態的。(NIST SP 800-38F,“5.4 呼叫次數限制”)
- $ 2^{32} $ 使用隨機 nonce 使用 AES-GCM 進行最大呼叫以避免 nonce 與 a $ 2^{-32} $ 安全邊際。加密幾乎是無狀態的 - 必須確保在傳遞之前輪換密鑰 $ 2^{32} $ 加密。(NIST SP 800-38D,“8.3 呼叫次數的限制”)
- $ 2^{48} $ 最大塊( $ 2^{47} $ 最大 256 位密鑰)使用唯一隨機數使用 AES-GCM 加密,以避免加密塊與 $ 2^{-32} $ 安全邊際。加密不是無狀態的 - 加密時需要在密鑰的整個生命週期內同步持久狀態。
與 AES-GCM 和其他模式和算法相比,巨大的缺點是:
- 沒有安全證明
- 極慢
- 只有 64 位的身份驗證
- 沒有現代便利設施,例如 AAD
獲得幾乎無限的界限 - 至少 $ 2^{64} $ 使用帶有隨機隨機數的單個密鑰進行呼叫 - 您可以使用 XChaCha20-Poly1305 或 AES-GCM-SIV。
要使用符合 NIST 的算法和模式,您可能需要使用更長的隨機數並添加顯式密鑰派生步驟,然後使用 AES-GCM - 例如,請參閱Amazon KMS 的方法。