Cryptanalysis
這個簡單的 PRNG 安全嗎?
$ G $ 是用於流密碼的 PRNG,定義如下:
- G收到 $ s_0 $ 作為輸入,它是從均勻分佈中抽取的隨機字元串。
- 步驟的輸出 $ i $ 是 $ s_i = (s_{i-1}\cdot (N+1) + 1) \bmod{N} $ , 為了 $ i=1,2,3\dots $
這個 PRNG 安全嗎?如果不是,區別是什麼?
$ s_i = s_{i-1}\cdot(N + 1) + 1 = s_{i-1} \cdot N + s_{i-1} + 1 $
但 $ s_{i-1} \cdot N = 0 \pmod N $ , 所以
$ s_i = s_{i-1} + 1 \pmod N $
這意味著您只需查看目前數字即可發現要生成的下一個數字…
有關您的教授正在尋找的答案,請參閱 Vitor 的答案。
但是,對於任何形式的 PRNG $ s_{i+1} = F(s_{i}) $ , 攻擊者看到 $ s_i $ 價值觀,並且知道 $ F $ ,那麼他就可以分辨出來了。給定一系列值 $ r_1, r_2, … $ ,他可以通過檢查是否由該 PRNG 生成 $ r_2 = F(r_1) $ ; 這對於真正的 PRNG 總是如此,而對於隨機流來說很少如此。
因此,加密安全的 PRNG 必須:
- 有 $ F $ 包括一些秘密資訊(以便攻擊者無法計算它),或者
- 一些功能 $ G $ 偽裝國家;這樣雖然內部狀態更新的形式是 $ s_{i+1} = F(s_i) $ ,攻擊者看到的輸出實際上是 $ G(s_{i+1}) $