Collision-Resistance

關於 nonce 碰撞計算的說明

  • April 21, 2022

我一直在研究 AES256-GCM 實現(在 Java 中)。我有點卡在我需要決定多久需要輪換一次密鑰的部分。

我從這篇文章中獲得了很多資訊: 使用 AES-GCM 隨機隨機數的安全性?

網站if參考:https ://www.imperialviolet.org/2015/05/16/aeads.html

它陳述了以下引用:

這是因為如果你拋出 2 $ ^{32} $ 球在 2 $ ^{96} $ 桶然後你大約有 2 $ ^{-33} $ 在同一個桶中獲得兩個的機會。

這個計算是如何進行的?我能想到的唯一解決方案是:

2 $ ^{(95-128)} $ =2 $ ^{-33} $

我想知道以下內容:

  1. 這是正確的計算嗎?
  2. 是 2 $ ^{95} $ 選擇,因為只需要 50% 和 2 $ ^{96} $ / 2 = 2 $ ^{95} $
  3. 減去128是指IV的總長度還是其他?

恐怕這是一個基於生日問題數學的複雜得多的計算。根據連結,如果我們拋出 $ n $ 球進 $ d $ 桶然後機率 $ p(n;d) $ 碰撞的大約是 $$ p(n;d)\approx 1-\exp\left(-\frac{n(n-1)}{2d}\right)= \frac{n(n-1)}{2d}+O\left(\frac{n^4}{d^2}\right) $$(泰勒級數 的第二個近似值 $ \exp(x) $ ).

插入 $ n=2^{32} $ 和 $ d=2^{96} $ 給 $ p\approx 2^{-33} $ . 更一般地,如果 $ n=2^a $ 和 $ d=2^b $ 我們將有 $ p\approx 2^{2a-b-1} $ 前提是 $ 2a $ 明顯小於 $ b $ .

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