我有一个长度为2^{20}
的二进制序列。我正在使用NIST的统计测试,评估。
./assess
和How many bitstreams?
应该采取什么措施?p-values
通过这个测试?发布于 2019-02-21 20:45:36
与这些测试相关的文档是用于密码应用的随机和伪随机数生成器的统计测试套件。
测试假设(assess)
x (bitstreams)
<示例文件中的总位数。NIST的随机性测试往往编码很差,它们的实际意思是:-
assess
=希望在一次测试运行中测试的位数。测试运行不是示例文件中的总位数。bitstreams
=要执行的测试运行数。您需要多次测试运行,才能在finalAnalysisReport.txt
报告中得到最终的p值。这些ps是从\chi^2
测试中获取的,而不是单个测试运行的ps。我试图瞄准至少10个比特流。20更好,NIST建议55位流才是真正有意义的(§4.22)。具体到你的案例,(assess)
x (bitstreams)
\ngtr 2^{20}
。对于10位流,您需要测试不超过100,000位的批处理。太低了。随机偏移(变体)和通用测试甚至不会报告返回,因为100,000位对他们来说太低了。这些测试不会开始产生有意义的p值,直到您在某个地方测试100万位x 10位流。你需要制造更多的碎片!
在NIST文档中,P-值被描述为:
对于这些测试,每个P值都是一个完全随机数发生器产生的序列比被测试的序列少的概率,考虑到测试所评估的非随机性。如果测试的P值被确定为等于1,则序列似乎具有完全的随机性。P值为零表示序列似乎完全非随机.测试可以选择一个重要级别(α)。如果P-值≥α,则可以接受零假设,即序列看起来是随机的.如果P-值<α,则空假设被拒绝;也就是说,序列似乎是非随机的。参数α表示I类错误的概率。通常,在范围内选择α。
在文档的示例中,他们选择了α= 0.01,这是硬编码到测试套件中以确定pass/fails的α。由于随机性的令人讨厌的性质,P-值应该均匀分布在0- 1之上,给出如下来自finalAnalysisReport.txt
的D20
部分的直方图:-
为了进行进一步的比较,下面是关于\sqrt{2}
扩展的“完美”测试分数的摘录。和\pi
一样,我们知道\sqrt{2}
是非理性,因此任何对基的扩展都自然地产生了一个无限的、完全随机的序列。上帝的随机数发生器如果你愿意的话。这些数字通常用作验证随机性测试本身的尺度,你必然会看到它通过了NIST测试:
因此,你可以看到有一定程度的黑魔法和经验,这是对考试进行排名所必需的。但是,通常情况下,当序列不是随机的时,往往会得到P= 0.00000或P =1.00000的负载,因此更清晰。
https://crypto.stackexchange.com/questions/67509
复制相似问题