Aes

AES-256-CCM 和 AES-256-GCM 是否可以使用超過 128 位的標籤?

  • August 19, 2019

我有一個現有的應用程序,它使用 AES-256-CBC 加密數據塊,並在明文上使用 HMAC-SHA-256 來消除重複的數據塊。

出於性能原因,我想轉移到 AES-256-CCM 並使用生成的身份驗證標籤而不是 SHA-256 。

但是,此算法旨在生成 128 位標籤。這比 HMAC-SHA-256 更容易發生雜湊衝突。128 位似乎不足以保證未來儲存大量塊的系統的碰撞安全。

有沒有辦法將 AES-256-CCM 或 AES-256-GCM 的標籤擴展為 256 位強度?

編輯:我試圖完成的是加密一組對象,這些對象最終以內容定址方式儲存在 Amazon S3 中,也就是說,對象的密鑰應該是明文的雜湊值。有權訪問我的 Amazon S3 儲存桶的人不應該能夠解密數據,該方案也不應該允許檢查儲存桶中是否存在特定的已知明文。這就是為什麼目前的方案是明文上的 HMAC-SHA256 為對象選擇密鑰,然後使用具有唯一且不可預測的 IV 的 AES-256-CBC 對對象進行加密。

AES-256-CBC 和 HMAC-SHA256 相當慢,因此我想到了使用某種形式的快速認證加密。

不,沒有黑盒類型的方式來增加CCMGCM標籤的安全強度。因為在這種情況下,您將應用一個確定性函式,該函式不會為您帶來任何安全性增加,因為輸入上的衝突仍會導致輸出上的衝突。

對於CCM也沒有非黑盒類型的方式,至少如果你想堅持AES。這是因為CCM在內部使用CMAC ,它與CBC-MAC相近,CBC - MAC適用於身份驗證。CMAC 的身份驗證標籤是 AES 加密的結果,並且 AES 僅針對 128 位塊(這是 AES 輸入和輸出的大小)指定。

GCM在這方面與CCM相似,因為多項式雜湊函式的輸出實際上是用 AES 塊的輸出進行異或加密的。但是*,如果您為 GCM 選擇更長的多項式(這將立即破壞您可能擁有的所有實現)並且如果您可能對多項式的評估頻率進行一些有根據的更改,您可能會*得到一個更強的標籤作為結果。然而,這很可能是一個 GCM 外觀,但需要它自己的(困難的)安全分析和新的實現。

最後一點, CCMGCMHMAC的標籤是MACs。MAC 不一定設計為良好的雜湊值(對於固定密鑰),因為它們的威脅模型不同。它們的設計使您無法為以前未見過標籤的消息找到標籤。他們絕對被允許為同一條消息輸出兩個不同的標籤,或者為兩條不同的消息輸出相同的標籤(因為對手可能已經預測到了碰撞,但沒有預測到哪個消息對)。

對於大量數據,最好定期重新鍵入。你可以做一些事情,比如每 1GiB 的數據使用 SHA256 對你的初始秘密進行散列,並使用新的秘密重新加密 AES。

如果我從頭開始設計它,我會在大消息/流的開頭放置一個大的(例如 512 位)隨機隨機數。然後我會使用這個隨機數的一部分來為 GCM 隨機數播種 CSPRNG,然後在重複散列 AES 密鑰以生成新的會話密鑰時使用其餘的作為鹽……或者類似的東西。

我個人不會相信 AES-GCM 使用相同的密鑰來處理超過幾場數據……如果您使用的身份驗證標籤或隨機數小於 96 位/128 位預設值,則更少。在某處有一張表,其中列出了針對不同標籤大小的建議最大消息大小,並且隨機數大小將影響您可以使用一個鍵安全處理的數據量。

引用自:https://crypto.stackexchange.com/questions/50735