概述
檢測標準
- 我國隨機檢測規範GM/T 0005-2012《隨機性檢測規範》,現已經升級爲國家標準GB/T 32915-2016 信息安全技術 二元序列隨機性檢測方法。
- NIST隨機性檢測文檔NIST SP800-22r1a, A Statistical Test Suite for Random and Pseudorandom Number Generators for Cryptographic Applications。
1 檢測項對比
NIST和國密隨機性檢測項目的對比如下:
- NIST有15個檢測項,國密有15個檢測項。
- 兩者有11個相同的檢測項:單比特頻數檢測、塊內頻數檢測、遊程總數檢測、塊內最大1遊程檢測、矩陣秩檢測、離散傅里葉變換檢測、Maurer通用統計檢測、線性複雜度檢測、重疊子序列檢測、近似熵檢測、累加和檢測。
- NIST有4個專有檢測項:隨機遊動檢測、隨機遊動變式檢測、非覆蓋模板匹配檢測、覆蓋模板匹配檢測。
- 國密有4個專有檢測項:撲克檢測、遊程分佈檢測、二元推導檢測、自相關檢測。
NIST測試項 |
國密測試項GM |
單比特頻數檢測 Frequency(Monobit) Test |
單比特頻數檢測 Monobit Frequency Test |
塊內頻數檢測 Frequency Test within a block |
塊內頻數檢測 Frequency Test within a block |
遊程檢測 Runs Test |
遊程總數檢測 Runs Test |
塊內“1”的最大遊程檢測 Test for the longest Run of Ones in a block |
塊內最大1遊程檢測 Test for the longest Run of Ones in a block |
二元矩陣秩檢測 Binary Matrix Rank Test |
矩陣秩檢測 Binary Matrix Rank Test |
離散傅里葉變換檢測 Discrete Fourier Transform (Spectral) Test |
離散傅里葉變換檢測 Discrete Fourier Transform Test |
Maurer通用統計檢測 Maurer's "Universal Statistical" Test |
Maurer通用統計檢測 Maurer's "Universal Statistical" Test |
線性複雜度檢測 Linear Complexity Test |
線性複雜度檢測 Linear Complexity Test |
序列檢測 Serial Test |
重疊子序列檢測 Serial Test |
近似熵檢測 Approximate Entropy Test |
近似熵檢測 Approximate Entropy Test |
累積和檢測 Cumulative Sums (Cusum) Test |
累加和檢測 Cumulative Test |
隨機遊動檢測 Random Excursion Test |
—— |
隨機遊動變式檢測 Random Excursion Variant Test |
—— |
非覆蓋模板匹配檢測 Non-overlapping Template Matching Test |
—— |
覆蓋模板匹配檢測 Overlapping Template Matching Test |
—— |
—— |
撲克檢測 poker test |
—— |
遊程分佈檢測 runs distribution test |
—— |
二元推導檢測 binary derivative test |
—— |
自相關檢測 Autocorrelation Test |
2 檢測參數對比
參數說明:
- n:樣本序列的比特長度。國密規定取1000000;NIST未定義,但傾向於取1000000。
- a:顯著性水平。國密規定爲0.01;NIST未定義,建議爲0.001~0.01。
檢測項 |
NIST參數建議 |
STS參數取值 |
國密參數取值 |
單比特頻數檢測 |
n>100 |
自定義n |
n=1000000 |
塊內頻數檢測 |
n>100, 塊大小M>20,M>0.1n 塊數N=floor(n/M)<100 |
塊大小M=128 可自行設定 |
塊大小M=100 |
遊程檢測 |
n>100 |
自定義n |
n=1000000 |
塊內最大1遊程檢測 |
塊大小M,由n定: 當128<=n<6272時,取M=8; 當6272<=n<750000時,取M=128 當750000<=n時,取M=10000 |
根據n值設定M,具體設定同左 |
塊大小M =10000 |
二元矩陣秩檢測 |
n>32MQ,其中M和Q矩陣的行數和列數 |
M=Q=32 |
M=Q=32 |
離散傅里葉變換檢測 |
n>1000 |
自定義n |
n=1000000 |
Maurer通用統計檢測 |
n>=(Q+K)L 6<=L<=16 Q=10*2L K=floor(n/L)-Q 表後的圖有詳細設定 |
按表後的圖,根據n值設定L和Q |
n=1000000 L=7 Q=1280 |
線性複雜度檢測 |
n>=1000000 塊長M:500<M<5000 塊數N:N>200 |
塊長M=500 可自行設定 |
塊長M=500 |
序列檢測 |
m=16 可自行設定 |
m=2,5 |
|
近似熵檢測 |
m=10 可自行設定 |
m=2,5 |
|
累積和檢測 |
n>100 |
自定義n |
n=1000000 |
隨機遊動檢測 |
n>=1000000 |
自定義n |
N/A |
隨機遊動變式檢測 |
n>=1000000 |
自定義n |
N/A |
非覆蓋模板匹配檢測 |
模板長度可爲2-10,但通常取9,10(更有意義) 塊數N<=100, 塊大小M>0.01n |
模板長度=9 可自行設定 |
N/A |
覆蓋模板匹配檢測 |
n>1000000 建議m=9,10 n>=MN. N •(min πi) > 5. λ= (M-m+1)/2m ≈2 m ≈log2 M |
m=9 可自行設定 |
N/A |
撲克檢測 |
N/A |
N/A |
子序列長度m=4,8 |
遊程分佈檢測 |
N/A |
N/A |
n=1000000,k=15 |
二元推導檢測 |
N/A |
N/A |
k=3,7 |
自相關檢測 |
N/A |
N/A |
d=1,2,8,16 |
3 檢測通過準則對比
- NIST:兩個準則。
- (1)每個檢測項計算出來的P值不小於顯著性水平a爲通過;通過的樣本總量有上下界;
- (2)P的統計一致性需滿足要求。
- 國密:一個準則。(1)每個檢測項計算出來的P值不小於顯著性水平a爲通過;通過的樣本總量只有下界,沒有上界。
(1)每個檢測項計算出來的P值不小於顯著性水平a
記s爲樣本個數
|
NIST |
國密 |
顯著性水平 |
建議爲0.001~0.01 |
固定爲0.01 |
通過率閾值 |
上下界 當顯著性水平爲0.01,樣本個數s爲1000時,上式計算出的上下界爲(0.9805607,0.9994392)。 |
只有下界 當顯著性水平爲0.01,樣本個數s爲1000時,上式計算出的下界爲0.9805607。 |
(2)P的統計一致性需滿足要求(僅NIST)
檢測步驟:
步驟1:把[0,1]區間等份成10段,統計各個被檢驗序列的P值落入各區間的數目,再把統計結果用直方圖表述出來。
步驟2:P值分佈的一致均勻性可以通過檢驗來驗證,並得到對應這個檢驗的所有被檢驗序列的P值的P值.這個P值表明P值的經驗分佈與一致均勻分佈的符合程度(Goodness-of-Fit Distributional Test)。計算統計量:
,
其中是落入區間的P值數目,s是樣本序列數目。
步驟3:計算,
步驟4:如果這個,就說明被檢驗序列的P值一致均勻分佈。