了解 RNG 的內部狀態
基於 BSI 確定性隨機數發生器質量的評估標準:
K4 – 出於所有實際目的,攻擊者應該不可能從生成器的內部狀態計算或猜測序列中任何先前的數字或任何先前的內部生成器狀態。
用簡單的話來說,內心的狀態究竟是什麼?它是第一顆種子嗎?如果您解釋上述規則的含義,我將不勝感激?
非常感謝。
我將以 ChaCha20 為例。它是一種流密碼,但在 Linux 上用作系統隨機數生成器的核心。
我還將向您推薦這篇關於 ChaCha20 如何作為流密碼工作的優秀文章。
ChaCha20 可用作快速密鑰擦除 CSPRNG。當來電者請求時 $ N $ 隨機數據位(序列中的單個數字),用於生成 $ N+256 $ 位,最後 256 位用作未來請求的新密鑰。(像 Linux 這樣的一些系統在生成這個新密鑰時還會對來自各種系統雜訊源的一些位進行異或。)
ChaCha20 的工作原理是重複加擾一個 512 位塊,每輪使用 20 輪(分為 80 個四分之一輪) $ N-256 $ 位的輸出。
內部狀態是被加擾的 512 位塊。它由一個常數值、一個計數器、一個隨機數(在這種情況下是第二個計數器)和一個鍵(初始種子所在的位置)組成。
ChaCha20 是一個強密碼。僅給定輸出就發現有關密鑰的任何資訊在計算上是不可行的(閱讀:實際上是不可能的)。
因此,如果攻擊者獲得了用於生成所請求數字的內部狀態的副本,他們就會知道用於該特定請求的密鑰,即前一個請求輸出的最後 256 位。但是不可能從任何數量的輸出中生成用於上一個請求的密鑰,更不用說僅最後 256 位了,因此他們無法僅從這一點發現上一個請求返回的數字。因此,他們無法發現返回的前一個數字,並且無法從那裡確定序列中的任何其他先前數字。
除 ChaCha20 之外的 CSPRNG 可能具有不同大小的內部狀態,但通常有一些固定大小的塊會以某種方式重複加擾。一部分是種子,一部分是計算輸出所需的其他數據。