隨機性檢測標準對比——國密GM/T 0005 vs NIST SP800-22r1a

概述

檢測標準

  • 我國隨機檢測規範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和國密隨機性檢測項目的對比如下:

  1. NIST15個檢測項,國密有15個檢測項。
  2. 兩者有11個相同的檢測項:單比特頻數檢測、塊內頻數檢測、遊程總數檢測、塊內最大1遊程檢測、矩陣秩檢測、離散傅里葉變換檢測、Maurer通用統計檢測、線性複雜度檢測、重疊子序列檢測、近似熵檢測、累加和檢測。
  3. NIST4個專有檢測項:隨機遊動檢測、隨機遊動變式檢測、非覆蓋模板匹配檢測、覆蓋模板匹配檢測。
  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<\left \lfloor log_2n \right \rfloor-2

m=16

可自行設定

m=2,5

近似熵檢測

m<\left \lfloor log_2n \right \rfloor-2

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

通過率閾值

上下界

(1-{\alpha }-3\sqrt{\frac{\alpha (1-\alpha )}{s}},1-{\alpha }+3\sqrt{\frac{\alpha (1-\alpha )}{s}})

當顯著性水平爲0.01,樣本個數s爲1000時,上式計算出的上下界爲(0.9805607,0.9994392)。

只有下界

1-{\alpha }-3\sqrt{\frac{\alpha (1-\alpha )}{s}}

當顯著性水平爲0.01,樣本個數s爲1000時,上式計算出的下界爲0.9805607。

 

2P的統計一致性需滿足要求(僅NIST

檢測步驟:

步驟1:把[01]區間等份成10段,統計各個被檢驗序列的P值落入各區間的數目,再把統計結果用直方圖表述出來。

步驟2P值分佈的一致均勻性可以通過\chi ^2檢驗來驗證,並得到對應這個檢驗的所有被檢驗序列的P值的P值.這個P值表明P值的經驗分佈與一致均勻分佈的符合程度(Goodness-of-Fit Distributional Test)。計算\chi ^2統計量:

\chi ^2={\sum_{i=1}^{10}}{\frac{(F_i-s/10)^2}{s/10}}

其中F_i是落入區間的P值數目,s是樣本序列數目。

步驟3:計算P=igamc(9/2,\chi ^2/2)

步驟4:如果這個P>0.0001,就說明被檢驗序列的P值一致均勻分佈。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章