Random-Number-Generator
你如何解釋來自 Dieharder 測試套件的 p 值來評估 RNG?
#=============================================================================# # dieharder version 3.31.1 Copyright 2003 Robert G. Brown # #=============================================================================# rng_name |rands/second| Seed | stdin_input_raw| 3.91e+06 |3556676169| #=============================================================================# test_name |ntup| tsamples |psamples| p-value |Assessment #=============================================================================# diehard_birthdays| 0| 100| 1000|0.04228375| PASSED diehard_operm5| 0| 1000000| 1000|0.19715383| PASSED diehard_rank_32x32| 0| 40000| 1000|0.46351097| PASSED diehard_rank_6x8| 0| 100000| 1000|0.95836167| PASSED diehard_bitstream| 0| 2097152| 1000|0.48181370| PASSED diehard_opso| 0| 2097152| 1000|0.30244550| PASSED diehard_oqso| 0| 2097152| 1000|0.94656094| PASSED diehard_dna| 0| 2097152| 1000|0.02404047| PASSED diehard_count_1s_str| 0| 256000| 1000|0.45401565| PASSED diehard_count_1s_byt| 0| 256000| 1000|0.48456168| PASSED
將隨機數流提供給 Dieharder 測試套件會呼叫測試列表。每個測試都返回一個 p 值。據我了解,p 值告訴您流真的只是隨機雜訊(或不是雜訊)的機會。但是我讀到一個好的 RNG 會有一系列遵循均勻分佈的 p 值。0 和 1 之間的值應該以大約相等的機率發生。為什麼會這樣?為什麼這裡需要均勻分佈,這是什麼意思,以及如何衡量分佈的“均勻性”?
我讀過一個好的 RNG 將具有一系列遵循均勻分佈的 p 值。0 和 1 之間的值應該以大約相等的機率發生。為什麼會這樣?
它直接來自 p 值的定義。p 值表示如果源是真正隨機的,您至少會得到扭曲結果的機率。
所以你期望一個p值 $ \le 0.05 $ 5%的時間。您期望 p 值 $ \le 0.10 $ 10% 的時間。因此,您期望區間中有一個 p 值 $ [0.05, 0.10] $ 5%的時間。對於零到一之間的任何其他間隔也是如此。
當然,均勻分佈不會在每個範圍內產生相同數量的結果,因此您總是會得到 p 值的隨機偏斜分佈。在實踐中,您可能只是依靠頑固分子來告訴您您已經通過了測試……請記住,這並不能證明您擁有一個好的(加密)隨機數生成器。