使用標籤大小為 96 位和 128 位的 GCM 有哪些限制?
假設我們想使用 AES(或任何其他安全的 128 位分組密碼)和 GCM,標籤大小為 96 或 128 位。我假設 AES 密鑰大小為 128 位,IV 大小為 96 位(預設值)。
NIST SP 800-SP 38D,附錄 C:“使用短標籤的要求和指南”指定 AAD 和明文的數量以及 32 位和 64 位短標籤的呼叫次數,但不適用於較大的標籤大小。NIST 使用一個表格來指定這些屬性,其中以下列相互抵消:
- 單個數據包中密文和 AAD 的最大組合長度(字節)
- 認證解密函式的最大呼叫次數
以下是 64 位標籤大小的限制:
此外,論文“The Galois/Counter Mode of Operation (GCM)”最後包含以下等式(第 7 章:“安全性”):
該分析的結果表明,只要分組密碼與隨機密碼無法區分,並且條件 $ q^2l^22^{−142} + q^2l^32^{−147} \ll 1 $ 滿足,在哪裡 $ q $ 是認證加密操作的呼叫次數和 $ l $ 是欄位中的最大位數 $ P $ , $ A $ , 和 $ IV $ .
GCM 上的維基百科頁面也有很多資訊和參考資料(但顯然不是這些資訊)。
我不確定是否有任何後續分析影響了 NIST 或論文的數量。
我不明白公式在哪裡 $ q^2 \ell^2 2^{-142} + q^2 \ell^3 2^{-147} $ 來自。的力量 $ \ell $ 似乎太高了;分數 $ 2^{-142} $ 和 $ 2^{-147} $ 看起來非常小;引用是對不再可用的原始證券分析的未發表草稿;最終草案似乎並不支持它。
首先,假設您使用連續的 96 位隨機數。 (如果你不得不擔心 nonce 衝突,那麼這個故事會復雜得多,而且原作者弄錯了。)安全分析的常用方法是組合兩個標准定理:
- Carter-Wegman 通用散列驗證器的偽造機率:之後 $ f $ 偽造消息高達 $ \ell $ 帶有長度驗證器標籤的長塊 $ \tau $ , 偽造機率為$$ \frac{f \ell}{2^\tau}. $$
偽造機率界限隨著偽造嘗試的次數*和長度線性增長,並且在標籤*長度中呈指數下降。
這就是為什麼截斷 GHASH 和 Poly1305 等通用雜湊 MAC 的標籤比截斷 CBC-MAC 標籤或 HMAC 標籤更危險的主要原因 $ f/2^\tau $ , 不是 $ f\ell/2^\tau $ . 2. 區別於替換均勻隨機的優勢 $ b $ 統一隨機的位排列 $ b $ -bit函式,用於為每個 nonce 派生一次性驗證器密鑰(PRF/PRP 切換引理):如果是隨機算法 $ A $ (比如說偽造者)製作 $ q $ 查詢有機率 $ \Pr[A(f)] $ 一個均勻隨機函式的預言機成功率 $ f $ ,然後它在預言機上的成功機率為均勻隨機排列 $ \pi $ 由$$ \Pr[A(\pi)] \leq \Pr[A(f)] + \frac{q(q - 1)}{2\cdot 2^b} < \Pr[A(f)] + \frac{q^2}{2^b}, $$或更緊 $ \Pr[A(\pi)] \leq \delta\cdot\Pr[A(f)] $ 在哪裡 $ \delta = (1 - (q - 1)/2^b)^{-q/2} $ .
偽造機率界限隨著提供給預言機的塊數(在偽造嘗試或加密查詢中)呈*二次方增長,並且在塊*長度上呈指數下降。**
添加針對 AES 的區分優勢,並註意 $ q = 1 + (n + f) \cdot (1 + \ell) $ 因為有一個 AES 呼叫來派生 GHASH 密鑰,每條消息有一個 AES 呼叫來派生 GHASH 遮罩,每個塊有一個 AES 呼叫。結果是一個界限$$ \operatorname{Adv}^{\operatorname{PRP}}{\operatorname{AES}} + \frac{(1 + (n + f)\cdot(1 + \ell))^2}{2^b} + \frac{f \ell}{2^\tau} $$關於偽造機率,或者更嚴格地說,$$ \operatorname{Adv}^{\operatorname{PRP}}{\operatorname{AES}} + \biggl(1 - \frac{(n + f) \cdot (1 + \ell)}{2^b}\biggr)^{\frac{-(1 + (n + f)\cdot(1 + \ell))}{2}} \cdot \frac{f \ell}{2^\tau}. $$
這對於您的應用程序可能處理的特定數據量意味著什麼?首先,始終假設攻擊者嘗試偽造的次數多於合法使用者處理數據的次數——合法使用者只使用他們需要的頻寬,而偽造者會用盡剩餘的頻寬來嘗試偽造。
讓我們考慮應用程序可以處理的數據量的三種不同機制:單個塊消息、IP 數據包大小的消息和每條消息一兆字節的數據。我們將考慮更緊密的界限。
$$ \begin{equation} \begin{array}{llll} \text{max bytes} & \text{messages} & \text{forgeries} & \tau=128 & 96 & 64 & 32 \ \hline \text{one block: $16$} & 1 & 1 & 2^{-127} & 2^{-95} & 2^{-63} & 2^{-31} \ \hline \text{IP packet: $2^{11}$} & 2^{16} & 1 & 2^{-120} & 2^{-88} & 2^{-56} & 2^{-24} \ & 2^{16} & 2^{16} & 2^{-104} & 2^{-72} & 2^{-40} & 2^{-8} \ & 2^{16} & 2^{24} & 2^{-96} & 2^{-64} & 2^{-32} & 0.6 \ & 2^{16} & 2^{32} & 2^{-88} & 2^{-56} & 2^{-24} & (?) \ & 2^{16} & 2^{48} & 2^{-72} & 2^{-40} & 2^{-8} & (?) \ & 2^{16} & 2^{56} & 2^{-64} & 2^{-32} & 0.6 & (?) \ \hline \text{IP packet: $2^{11}$} & 2^{32} & 1 & 2^{-120} & 2^{-88} & 2^{-56} & 2^{-24} \ & 2^{32} & 2^{32} & 2^{-88} & 2^{-56} & 2^{-24} & (?) \ & 2^{32} & 2^{48} & 2^{-72} & 2^{-40} & 2^{-8} & (?) \ & 2^{32} & 2^{56} & 2^{-64} & 2^{-32} & 0.6 & (?) \ & 2^{32} & 2^{60} & 2^{-14} & (?) & (?) & (?) \ \hline \text{IP packet: $2^{11}$} & 2^{48} & 1 & 2^{-120} & 2^{-88} & 2^{-56} & 2^{-24} \ & 2^{48} & 2^{48} & 2^{-72} & 2^{-40} & 2^{-8} & (?) \ & 2^{48} & 2^{56} & 2^{-64} & 2^{-32} & 0.6 & (?) \ & 2^{48} & 2^{60} & 2^{-14} & (?) & (?) & (?) \ \hline \text{megabyte: $2^{20}$} & 2^{32} & 1 & 2^{-111} & 2^{-79} & 2^{-47} & 2^{-15} \ & 2^{32} & 2^{32} & 2^{-79} & 2^{-47} & 2^{-15} & (?) \ & 2^{32} & 2^{40} & 2^{-71} & 2^{-39} & 2^{-7} & (?) \ & 2^{32} & 2^{48} & 2^{-63} & 2^{-31} & (?) & (?) \ & 2^{32} & 2^{50} & 2^{-50} & 2^{-18} & (?) & (?) \ & 2^{32} & 2^{51} & 2^{-14} & (?) & (?) & (?) \ & 2^{32} & 2^{52} & (?) & (?) & (?) & (?) \ \end{array} \end{equation} $$
通過上述分析,標記為 (?) 的條目完全不受偽造的約束。請注意,旋轉密鑰沒有幫助:偽造者對第一個密鑰的偽造嘗試與偽造者對第二個密鑰的偽造嘗試無關。即使是數量適中的數万個中等大小的數據包,非常小的標籤也幾乎無法提供安全保障。
為了透視這些偽造機率,比特幣網路在 $ 2^{64} $ 側面死亡大約每秒一次。
讀者練習:計算 NIST 表中數據量的偽造機率界限,並評估它們的合理性。
WARNING 1:以上分析中可能存在fenceposts,表項計算中可能存在錯誤。為了提高信心,請信任肉類空間加密會議上的匿名評論者,而不是網際網路加密論壇上的匿名陌生人,和/或自己仔細檢查計算。
警告 2:您是否記得使用連續的 96 位隨機數?你忘了,不是嗎?返回並使用順序 96 位隨機數,或切換到 crypto_secretbox_xsalsa20poly1305,它在軟體中更快、更安全,並且允許隨機隨機數,並且即使使用隨機隨機數也比上述具有更好的界限。