过去,我使用卡方检验来检查生成器的统计随机性。这是一个很好的测试吗?还有其他测试吗?

评论

没有可以证明您的PRNG随机运行的测试-只有可以证明相反的测试。

@asd令人讨厌的是,一个测试套件可以显示出数字流来自不良PRNG / DRBG的压倒性可能性,没有大量的测试可以证明它不是随机的,它可以非常强烈地表明这一点。例如,创建Dieharder时要考虑到要知道PRNG可能不是随机的,可能需要进行大量测试。同样,仅测试10MB数据可能会给您一种错误的印象,即真正的随机性不仅仅如此。

约翰斯顿(Johnston)的随机数生成器(Random Number Generators)主要侧重于加密安全的PRNG,并具有大量的测试材料。

#1 楼

《应用密码学手册》第5.4节“统计测试”列出了几种此类测试。但是,请注意,如果您要使用的是可证明安全的PRNG,那么这种测试远非完美。

对于可证明的PRNG,您需要正式证明其输出与真正的-随机序列。有关更多信息,请参见密码学基础第3章。

#2 楼

检查统计随机性是一个半好的测试。我的意思是,如果给定的PRNG在统计上看起来不佳,那么就完全可以证明它是纯垃圾。另一方面,关于加密安全性,良好的统计随机性并不能告诉您太多信息。加密安全性是关于有意识的攻击者是否可以预测PRNG的输出,该攻击者知道算法的来龙去脉(但不了解其内部状态)。统计随机性是关于PRNG输出是否可以由受过训练的猴子预测的结果。

“ Diehard测试”过去常用于测试非加密PRNG。在十二年前的AES竞赛中,NIST对所有AES候选人进行了测试,却一无所获,密码学家普遍认为这主要是在浪费时间。移位寄存器在Diehard上取得了可观的结果-将其用于加密是立即失败的事情。

评论


$ \ begingroup $
您是说设计验证应该足够,统计测试不足以验证操作吗?
$ \ endgroup $
–this.josh
2011年8月13日在4:44

$ \ begingroup $
运行统计测试无害;如果他们检测到偏差,则您可以忘记设计,然后从头开始。但是几乎所有的弱设计都可以毫无偏差地通过测试。为了验证密码算法是否安全,唯一已知的有效测试是让至少几十名密码学家尝试破解它几年。
$ \ endgroup $
–托马斯·波宁(Thomas Pornin)
2011年8月13日在4:49

$ \ begingroup $
NIST有自己的测试套件,称为“统计测试套件”(STS)。可从csrc.nist.gov/groups/ST/toolkit/rng/documentation_software.html下载。
$ \ endgroup $
– M.S.杜斯蒂
2012年4月23日19:36

$ \ begingroup $
dieharder包含diehard测试,可以在Ubuntu上轻松运行而无需编译或进行任何操作。
$ \ endgroup $
– Endolith
2012年5月1日15:42

$ \ begingroup $
@ this.josh尽管这是一个古老的问题,但如果将“应该是”替换为“是唯一的方法”,答案将是肯定的。统计测试完全没有证明安全性。这是一个比喻:假设您想确定汽车是否可以超过220 km / h。等效的统计测试只能确定该汽车是否装有车轮。它没有解决这个问题,它只能过滤出永远不可能安全的问题。
$ \ endgroup $
– tylo
16年11月4日在17:05

#3 楼


我可以做哪些测试以确保PRNG正常工作?


这取决于您“正确工作”的确切含义。

您可以进行统计测试以检查随机数生成器可能遇到的各种统计缺陷,但是您已经意识到统计测试不能替代密码分析的事实……意味着:何时涉及到密码安全性,您必须深入进行密码分析,就像我在一个有关问题的另一个答案中所描述的那样。


还有其他测试吗?


当然……除了您已经知道并在问题中提到的卡方检验之外,还有一整套统计检验可用!您所需要做的就是挑选自己喜欢的毒药:




Dieharderhttp://www.phy.duke.edu/~rgb/General/dieharder.php

Dieharder –我个人最喜欢的–结合了George Marsaglia的所有Diehard测试以及NIST STS(由美国国家标准技术研究院开发的统计测试套件)的所有测试,以及一些其他开发的测试作者:rgb。


TestU01http://simul.iro.umontreal.ca/testu01/tu01.html

另一组测试,与Dieharder相当。它提供了针对随机数生成器的经典统计测试的一般实现,以及文献中提出的其他一些测试,甚至包括一些原始的统计测试。有人声称– TestU01迟早会导致每个RNG至少通过一项测试失败,无论您使用哪种RNG。但是未通过测试并不能立即表明单个rng的缺陷,因为某些测试在遵循这些测试的特定要求时会产生更准确的结果(例如:为它们提供足够的RNG输出)。


美国国家标准研究院的统计测试套件http://csrc.nist.gov/groups/ST/toolkit/rng/index.html

这是NIST提供的官方统计测试组合。可通过NIST网站下载STS(统计测试套件),有关其详细信息,请参见其网站以及相关论文“ NIST SP 800-22,用于随机和伪随机数发生器的统计测试套件”。适用于加密应用程序”(PDF)。


Diehardhttp://www.stat.fsu.edu/pub/diehard/

这就是我所说的“旧经典”。迪哈德(Diehard)代表一系列统计测试,由乔治·马萨利亚(George Marsaglia)开发,于1995年首次发布在随机数CD-ROM上。虽然Diehard本身可能已经成熟,但测试肯定还没有。 Dieharder和TestU01都包含Marsaglia的测试。


那里可能还有其他解决方案,也许看似有趣,但是–将范围限制在可用水平–我决定只提及一些(比较突出的)统计测试套件。

#4 楼

仅将数据作为输入的随机性测试可以提供非随机性的证明,但是,除非它们的结果与对如何生成测试的随机数据的分析相结合,否则无法提供任何可靠的随机性指示。在没有这种知识的情况下,这样的测试会给出错误的让人放心的PASS或失败。 。在不知道密钥的情况下通过了任何随机性测试,但是使用该知识可以从过去的输出中轻松预测。

在密码学中,只有当我们拥有模型时,带有PASS结果的随机性测试才有用测试的源。这是用于真随机数生成器的AIS 31通用标准评估方法的核心;请参见此处(在AIS 31下;德语,但具有许多英文文档的链接以及统计测试的参考实现)。

此AIS 31方法通常用于智能卡等事物,并且像这样的认证报告中引用的内容。它被制成与设备匹配的某种模型,并证明根据该模型,任何不引起警报的可能缺陷都不会导致使用明显可预测的比特流。通常有:


基于某种模拟现象的TRNG,例如对噪声源进行采样,提供可用于测试目的采样的比特流;
在启动和/或运行时,对该源进行硬件或软件测试,以检查该源是否传递熵;至少包括一些测试,如果有任何原因使该源完全损坏(可能是攻击者用针,激光,一些液化气蒸发),则会发出警报。
将源的输出以硬件或软件的方式调节到另一个比特流中,即使源只能通过,也不会有明显的偏差;可以使用条件比特流作为DPA对策的随机性来源或密钥生成器。
可能需要进行额外的条件调整测试。


评论


$ \ begingroup $
感谢您将对白问题的答案移植到您的身上。只是想对您执行ping操作,询问您是否愿意这样做。避免我通过聊天烦扰您...;)
$ \ endgroup $
– e-sushi
16年11月4日在16:49