Pseudo-Random-Generator

如何測量 128 位 PRNG 週期的長度?

  • September 28, 2021

我已經鍵入了 128 位 PRNG。它通過了 PractRand 和 Dieharder 測試,但我不知道它的預期週期長度是多少(對於不同的鍵和不同的種子)。

有沒有辦法通過這個生成器的分析輸出來估計它?我正在嘗試分析 128 位輸出的 16 位部分的周期。16 位數字平均在每個 128 位輸出的截斷 16 位部分中重複 $ 6331708 $ 腳步。例如號碼 $ 14649 $ 發生在低 16 位不規則之後:

$ 1385856, 6793856, 4734720, 4043776, 17823744, 3705088, 5609216, 1174784, 3718656, 181504, 14063616, 13729024, 10346880, 15782016, 1561088, 1996672, 988544 $

步驟(當我們使用其他鍵檢查每隔一個 16 位數字時,它看起來很相似)。但是基於對連續 16 位生成器部分的分析,是否可以得出關於整個生成器的周期的任何結論?

順便說一句,我們不應該期望一個隨機的 16 位數字在每個 $ 2^{16} $ 腳步?起初隨機選擇的 16 位數字對我來說很少見,還是我誤解了什麼?

有沒有辦法通過這個生成器的分析輸出來估計它?

正如評論所說,不是真的(除非發電機真的很糟糕)。

我正在嘗試分析 128 位輸出的 16 位部分的周期。順便說一句,我們不應該期望一個隨機的 16 位數字在每個 $ 2^{16} $ 腳步?

一個好的 PRNG 應該做的是將狀態的所有位混合在一起,因此查看截斷的 16 位塊不應該告訴你任何事情。

另一方面,您似乎列出了特定 216 位值 (14649) 出現的間隙,而這些間隙看起來確實很奇怪。如果 PRNG 很好,我們預計出現之間的差距遵循指數分佈(如您所說,平均值為 65536);雖然您有時會看到比平均值大得多的差距,但您幾乎永遠不會看到比平均值大 100 倍的差距(而且您會顯示更大的差距)——這是一種“多次中獎”類型事件。您似乎表明a)我沒有正確解釋數據,b)您沒有正確測量差距,或者c)PRNG嚴重不均勻。

檢查不均勻性是直截了當的——只需執行 PRNG,併計算你看到每個值的次數——如果你看到的值是平均值的標準偏差的大倍數(在任一方向),你有一個嚴重的問題。

當然,如果這應該是一個密碼安全的隨機數生成器,那麼對它的要求要嚴格得多……

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