Aes

使用 AES/GCM 兩次使用相同的 IV 有多糟糕?

  • May 9, 2019

我了解在使用 AES/GCM 時不應使用兩次初始化向量 (IV)。我使用計數器作為初始化向量。每次我發送一個新數據包(我正在開發一個需要數據包加密的基於 UDP 的協議)時,我都會增加計數器並將其用作 IV。

但是,由於我通常需要該協議來傳輸文件並在非常長的時間內發送保活,原則上對於非常大的文件可以發送超過 $ 2^{32} $ 數據包,或者多年來它可以發送出去 $ 2^{32} $ 保活。為了保持 IV 始終唯一,我可能需要使用 64 位整數,但每個數據包的成本要多 4 個字節,如果不是絕對必要的話,我想避免的數量可能非常大。

所以我想知道:用 AES/GCM 重用 IV 有多糟糕?我能知道這有多危險嗎?我的意思是:如果一旦我重複 IV**時,**我立即很容易受到攻擊,以至於我可以公開給出我的密鑰,那麼我必須採取對策。但是,如果只有當我多次使用相同的 IV 時才變得危險,那完全是另一回事。

即使是單個AES-GCM 隨機數重用也可能是災難性的。

  • 單個nonce 重用會洩漏明文的異或,因此如果一個明文已知,對手可以完全解密另一個明文。這與兩次墊相同。

  • 在消息中 $ \ell $ 塊很長,在一個隨機數重用後,對手可以將身份驗證密鑰縮小到 $ \ell $ 多項式求根的可能性,從而以高成功機率偽造消息 $ 1/\ell $ .

    • 如何?一個 $ \ell $ -block message 是一個多項式 $ \ell $ 常數項為零;秘鑰下的認證者 $ r, s $ 是 $ m \mapsto m(r) + s $ , 在哪裡 $ r $ 在消息之間重用 $ s $ 是作為隨機數的秘密函式導出的。查找身份驗證器 $ a = m(r) + s $ 和 $ a’ = m’(r) + s $ 對於相同隨機數下的不同消息,並且只有 $ {\leq}\ell $ 學位的可能根源- $ \ell $ 多項式 $ m(r) - m’(r) + a’ - a $ 在 $ r $ 是身份驗證密鑰的可能值。

使用 96 位隨機數;如果你不這樣做——如果你使用更小更大的隨機數——就好像你隨機選擇了隨機數,你可以安全處理的消息數量會急劇下降。 但是您當然可以將 64 位隨機數填充為 96 位:重要的是隨機數是唯一的

如果 >32 位 nonce 的成本過高,您可以定期更新密鑰。例如,如果您首先建立一個長期密鑰 $ k $ , 您可以使用 $ \operatorname{HMAC-SHA256}_k(i) $ 作為關鍵期間 $ i^{\mathit{th}} $ epoch,每個 epoch 覆蓋 40 億條消息,以及 $ i $ 以某種規範的方式編碼為位串。

一旦重複使用 IV ,您就會發現有人發現這兩個明文的 XOR,嚴重損害了他們的機密性。此外,使用 GCM,單個 IV 重用會洩露有關用於身份驗證的密鑰的重要資訊;如果即使有幾對重複使用的 IV(甚至一個 IV 都沒有多次使用;幾個 IV 每個都使用兩次就足夠了)可能會危及身份驗證密鑰。GCM 是一種流密碼,如果身份驗證機制失敗,它是完全可延展的(MAC 是唯一防止篡改的東西)。

此外,如果您將非 96 位 IV 與 NIST-spec GCM 一起使用,則存在輕微的擔憂。NIST 的 GCM 是為 96 位 IV 設計的,如果您指定一個不同長度的,則用於計算“真實”IV 的函式存在缺陷。

來源。

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