2020年6月16日 星期二

[Crypto] 亂度檢測 NIST SP 800-22

目的:檢測指定來源所產出的亂數值是否夠亂
工具: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就好)



結果分析:
$ vim experiments/AlgorithmTesting/finalAnalysisReport.txt


從圖中的結果來看,各測項的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 累積和測試








2020年6月15日 星期一

[更新]TQC+ 物件導向程式語言 Java 6 解題解題秘笈(含勘誤)

這篇勘誤主要是針對TQC+釋出的修正並重新編排此篇「TQC+ 物件導向程式語言 Java 6 解題秘笈(最近終於有點閒了?!)



詳細的勘誤內容請參考 LINK

本次更新時間為2020/06/15,皆重新檢示程式碼並確保可完成編譯,若有錯誤的地方,歡迎留言告知,謝謝!!

此外也將程式碼上傳至github供大家參考
Github 備份:LINK

本篇教學的程式碼皆由筆者編輯,歡迎轉貼本教學,但請全文轉貼,謝啦~

2020年6月8日 星期一

[更新]TQC+ 程式語言 C 解題解題秘笈(含勘誤)

這篇勘誤主要是針對TQC+釋出的修正並重新編排此篇「TQC+ 程式語言 C 解題解題秘笈(最近終於有點閒了?!)



詳細的勘誤內容請參考 LINK

本次更新時間為2020/06/08,皆重新檢示程式碼並確保可完成編譯,若有錯誤的地方,歡迎來信告知,謝謝!!

此外也將程式碼上傳至github供大家參考
Github 備份:LINK

本篇教學的程式碼皆由筆者編輯,歡迎轉貼本教學,但請全文轉貼,謝啦~