随机性检测标准对比——国密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值一致均匀分布。

 

猜你喜欢

转载自blog.csdn.net/samsho2/article/details/106046997