Random-Number-Generator

如何計算更頑固的測試所需的數據集大小?

  • June 8, 2021

我正在嘗試使用更頑固的隨機數測試套件。

但是,對於大多數測試,該套件需要大量數據(本文聲稱每次測試都需要 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_sumntup=32 時需要 13.2 GB。忽略其他實例rgb_lagged_sum,輸入最大的第二個和第三個測試marsaglia_tsang_gcd需要 8GB,然後rgb_bitdist需要 960MB。

對此有一個有趣的看法,倒帶不會影響超過 13.2GB 的結果(但一些測試將重用相同的序列)。

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