工具:NIST SP 800-22
介紹:https://csrc.nist.gov/projects/random-bit-generation/documentation-and-software
安裝環境:
# 下載工具
$ wget https://csrc.nist.gov/CSRC/media/Projects/Random-Bit-Generation/documents/sts-2_1_2.zip
# 解壓縮
$ unzip sts-2_1_2.zip
# 進入資料夾並編譯
$ cd sts-2.1.2/
$ make
#最後會在資料夾中看到assess這支工具
亂數產生:
# 利用linux內建的亂數產生器
$ dd count=32 ibs=1048576 if=/dev/urandom > test.bin
# 用hexdump檢示產出的亂數
$ hexdump -n 128 test.bin
工具使用:
$ ./assess 512000
#這邊的512000是指一個序列有多少bit
512000 bits = 64000 Bytes = 62.5 KB
其中有一行「How many bitstream?」,計算方法如下:
計算有多少塊的資料要檢測,以下計算完後的524.288,請不要四捨五入,請直接括去,因為進位後會造成最後一個資料塊資料不足而有錯誤
先在linux下查看檔案大小,如:test.bin,(33554432 / 512000) * 8 = 524.288(取整數524就好)
計算有多少塊的資料要檢測,以下計算完後的524.288,請不要四捨五入,請直接括去,因為進位後會造成最後一個資料塊資料不足而有錯誤
先在linux下查看檔案大小,如:test.bin,(33554432 / 512000) * 8 = 524.288(取整數524就好)
從圖中的結果來看,各測項的P-VALUE皆超過0.05,因此可認定該測項的假設成立(序列是隨
機的)。如果該測項沒有通過,則會在該測項前面會有個*,表示該項未通過。
原理:
依照NIST的檢測方法,其實就是針各個測項進行統計學的P-value,文言的來說就是「是否顯著」,白話的說「是否接受假設」
H0:假設該序列是隨機的,反之,Hα:序列不是隨機的
α則為顯著水準,通常取值為0.1、0.05、0.01為標準
若P >= α,則接受假設(H0:假設該序列是隨機的)
參考:
1. http://biostat.tmu.edu.tw/oldFile/enews/ep_download/21stat.pdf
2. http://www.math.nsysu.edu.tw/~lomn/homepage/R/R_testing.htm
其中挑幾個比較重要的測試(必過)項目來說:
1. Frequency (Monobit) Test:整個序列中的0和1的比例是否趨近於各半,0和1的數量大致相同
2. Frequency Test within a Block:整個序列切成多個塊,對各塊檢測是否0和1的比例是否趨近於各半
3. Runs Test:用於檢測連續的1和連續0的長度,主要針對0和1的振盪是否太快或太慢
4. Test for the Longest Run of Ones in a Block :整個序列切成多個塊,對各塊檢測最長的連續的1(或0)是否符合預期
5. Binary Matrix Rank Test:二元矩陣測試
6. Discrete Fourier Transform (Spectral) Test:離散傅立葉轉換測式
7. Cumulative Sums (Cusum) Test 累積和測試