如何計算更頑固的測試所需的數據集大小?
我正在嘗試使用更頑固的隨機數測試套件。
但是,對於大多數測試,該套件需要大量數據(本文聲稱每次測試都需要 228GB 不倒帶)。我想了解倒帶是如何實現的,以及每次測試需要多少數據。它似乎與tsamples值有關,但我找不到確切的相關性。
例如,如果我使用 生成 400MiB 的數據,則會
dd if=/dev/urandom of=random.dat bs=1M count=400
產生以下(裁剪)輸出:$ dieharder -a -g 201 -f random.dat #=============================================================================# # dieharder version 3.31.1 Copyright 2003 Robert G. Brown # #=============================================================================# rng_name | filename |rands/second| file_input_raw| random.dat| 6.38e+07 | #=============================================================================# test_name |ntup| tsamples |psamples| p-value |Assessment #=============================================================================# diehard_birthdays| 0| 100| 100|0.70238534| PASSED # The file file_input_raw was rewound 1 times diehard_operm5| 0| 1000000| 100|0.74169241| PASSED # The file file_input_raw was rewound 2 times diehard_rank_32x32| 0| 40000| 100|0.03164866| PASSED # The file file_input_raw was rewound 2 times diehard_rank_6x8| 0| 100000| 100|0.18168084| PASSED # The file file_input_raw was rewound 3 times diehard_bitstream| 0| 2097152| 100|0.59056568| PASSED # The file file_input_raw was rewound 5 times diehard_opso| 0| 2097152| 100|0.19175240| PASSED # The file file_input_raw was rewound 6 times diehard_oqso| 0| 2097152| 100|0.67542036| PASSED # The file file_input_raw was rewound 7 times diehard_dna| 0| 2097152| 100|0.04906220| PASSED # The file file_input_raw was rewound 7 times diehard_count_1s_str| 0| 256000| 100|0.80349572| PASSED # The file file_input_raw was rewound 8 times diehard_count_1s_byt| 0| 256000| 100|0.43003125| PASSED # The file file_input_raw was rewound 8 times diehard_parking_lot| 0| 12000| 100|0.07270933| PASSED # The file file_input_raw was rewound 8 times diehard_2dsphere| 2| 8000| 100|0.92548415| PASSED
我假設頑固分子只是循環遍歷文件,在跳轉到下一個測試時保持其指針位置,這
The file file_input_raw was rewound N times
只是指針到達文件末尾的總計數。
我會大膽地說,沒有人確切知道你真正需要多少數據。首頁上沒有指導,聯機幫助頁和杜克的這個執行緒同樣不具體。軼事證據表明,“少數”GB 將返回合理的 PASS/FAIL 答案,但仍會有倒帶。對於 4 GB
/dev/urandom
測試:-...snip # The file file_input_raw was rewound 43 times rgb_lagged_sum| 27| 1000000| 100|0.75608263| PASSED # The file file_input_raw was rewound 46 times rgb_lagged_sum| 28| 1000000| 100|0.88574962| PASSED # The file file_input_raw was rewound 49 times rgb_lagged_sum| 29| 1000000| 100|0.69532845| PASSED # The file file_input_raw was rewound 52 times rgb_lagged_sum| 30| 1000000| 100|0.93874399| PASSED # The file file_input_raw was rewound 55 times rgb_lagged_sum| 31| 1000000| 100|0.59282678| PASSED # The file file_input_raw was rewound 58 times rgb_lagged_sum| 32| 1000000| 100|0.88988310| PASSED
58次!
在您的情況下(輸入文件),倒帶就是這樣;從頭開始。八回倒是不錯。我看過1849倒帶。老實說,我無法理解其背後的原因,因為它所做的只是重新測試已測試的內容。
這可能是好是壞,如下面的隨機來源所示。如果您測試並倒帶框 A 的內容,您可能會期望通過。相反,如果您測試和倒帶框 B,由於 x 軸上的 3:1 偏差較大,單位和執行測試可能會失敗。重複倒帶顯然無助於 p 值,因此也許我們需要更大的樣本量,例如框 C。
我們可以肯定的是,Dieharder 使用了很多。您的論文和我的研究表明,免費執行的 Dieharder(沒有倒帶)大約需要 225 - 250 GB!請注意 $ 58 \times 4 \text{GB}= 232 \text{GB} $ .
不過還有其他測試。TRNG 科學文獻中更常見的測試是 NIST 的統計測試套件(SP 800-22)。它的樣本要求更容易預測。
現在是一個警告。您必須抵制操縱任何隨機性測試才能獲得通過。調整測試參數或有選擇地選擇單個測試來產生預期結果是危險的,因為無論您如何測試,隨機樣本都是隨機的。從手冊頁: -
…文件太小將“倒帶”並在發生倒帶的地方呈現測試結果。
為了得到一個精確的、有希望確定的答案,我們可以計算每個測試的倒帶次數。我生成了一個 1KiB 文件用作輸入。
經過一些原始碼調查後,頑固分子將輸入文件視為無限期消耗的流,因此每個新測試都會在先前測試停止的相同位置恢復流。有趣的是,頑固分子有一個
-s
戰略標誌:如果 strategy 是(預設)0,當隨機數生成器被選中時,頑固分子會在開始時重新播種(或倒帶)一次,然後再也不重新播種。如果 strategy 不為零,則生成器在每次測試開始時重新播種或重繞。如果
$$ … $$使用一個文件,這意味著每個測試都應用於相同的序列(這對於頑固分子的驗證和測試很有用,但不是測試 rngs 的好方法)。
因此執行
dieharder -a -g 201 -s 1 -f kibibyte.dat
(完整輸出)會產生以下數據:需要最大數據量的測試是
rgb_lagged_sum
ntup=32 時需要 13.2 GB。忽略其他實例rgb_lagged_sum
,輸入最大的第二個和第三個測試marsaglia_tsang_gcd
需要 8GB,然後rgb_bitdist
需要 960MB。對此有一個有趣的看法,倒帶不會影響超過 13.2GB 的結果(但一些測試將重用相同的序列)。