密鑰包裝 - 使用 AES-GCM 進行多次加密
當用一個密鑰加密許多短明文時,假設總共有 2^64 個明文,每個明文不到 64 個字節:(編輯說明 - 在原始問題中為 2^70)
- 有沒有辦法在這種情況下安全地使用 NIST 特別出版物 800-38D 規定的 AES-GCM?
- 在沒有 IV 碰撞時使用是否安全,例如當 IV 是計數器時?
- 是否可以在遵守 NIST 規範的同時使用更大的 IV,即使使用隨機 IV 也可能大到足以發生碰撞?
如果明文是高熵的,例如包裝密鑰時,這會改變嗎?
由 Shay Gueron 和 Yehuda Lindell在此介紹的基於 Nonce 的密鑰派生解決了這個問題,包括超出生日界限。
據我所知,AES-GCM-SIV (S. Gueron, A. Langley, Y. Lindell) 是這種方法的一個例子,但是 AWS KMS 使用 NIST 批准的標準實現了相同的目標 - 性能要低得多通過使用源密鑰和 128 位隨機 IV 為每個加密派生一個有效密鑰來建構塊,該 128 位隨機 IV 被饋送到具有 HMAC-SHA256 的計數器模式 KBKDF (SP 800-108)。此有效密鑰與 AES-256-GCM 一起使用,另外一個隨機 96 位作為 nonce。來源 - Matthew Campagna 和 Shay Gueron 的這次演講(幻燈片)。
不,你已經遠遠超過了 128 位分組密碼的生日界限。在單個密鑰下使用 AES 超過約 $ 2^{64} $ 數據塊自找麻煩。
您可以與標準 AES-GCM 一起使用的最大隨機數是 96 位,*這是順序安全的,但您可能不會按順序執行此操作,除非您計劃等待一千年讓您的順序電腦計數 $ 2^{70} $ . 您可以劃分輸入空間並將不相交的子集並行分配給一組電腦,但現在您有更大的操作安全性和擴展問題,您幾乎肯定需要首先解決這些問題,而且您解決這些問題的方法很可能是無論如何使用多個鍵。
你最好的選擇是提供更多關於你實際想要完成的細節,而不是詢問如何使用遠遠超出其廣告限制的 AES-GCM。
從技術上講,您可以在 AES-GCM 中使用 >96 位隨機數,但這很愚蠢,因為它實際上與使用隨機 96 位隨機數相同,因此比使用順序 96 位隨機數更差。*