Random-Number-Generator

為 NIST 測試選擇起始參數的正確方法是什麼?

  • October 28, 2019

我有一個想法,用該程式碼創建一個偽隨機二進制序列:

import random as rd
p=[]
k=10**6
for i in range(k):
 p.append(rd.getrandbits(1))

s=''
for i in p:
 s+=str(i)
a=p.count(0)
b=p.count(1)
f = open('s.txt', 'w')
f.write(s)
f.close()

在使用 NIST 測試對其進行測試的階段,出現了選擇正確參數來啟動它們的問題。如果我將此文件的序列長度設置為 100000 並將比特流數量設置為 1,這是否意味著從該文件中我將只測試前 100000 位作為一個序列?文件中的數據是否應該以某種方式分開?

我還在crypto.stackexchange 上檢查了這個問題,但老實說,它對我沒有幫助。閱讀 NIST 包的官方文件也沒有帶來對比特流參數的理解。

如果您向我解釋如何正確設置比特流參數數量並解釋它在這種情況下的含義以及應將輸入數據提供給測試的方式,我將不勝感激。

是的,NIST 測試有點不透明。你會發現輸入文件的大小應該是 (no. bitstreams) * (no. bits for testing)。這意味著輸入文件將自動劃分為(編號比特流)片段,並且測試套件會執行該時間。你不必做任何事情。這將創建輸出直方圖和最終的 P 值評估。通常選擇10 個流

因此,輸入文件的大小至少應為1MB。一個好的經驗法則是 1 Byte *(用於測試的位數)。但是你不會得到任何有意義的 P 值RandomExcursionsRandomExcursionsVariant直到你去一個10MB 的輸入,如./assess 1000000. 但是,這兩個偏移測試在輸入大於 100MB 之前不會生成 P 值。


注1。上述輸入大小適用於二進製文件,因為我發現它們更易於操作。您可以針對 ASCII 表示進行相應修改。測試的工作方式相同。

筆記2。鑑於您是 Pythonic,生成器是Mersenne Twister。它會以優異的成績通過,儘管在學術上它在更高的維度上有一些弱點。如果沒有,那就是程式碼問題

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