3

我编写了一个代码,它根据一个私人密码学项目(出于教育目的)生成随机数。现在我想检查我的随机数生成器的质量如何。

我已经做过的测试:

  • 一起计算所有数字并检查到零的距离(数字可以是负数和正数)
  • 将随机数与System.Random类进行比较(重复的数字位于 .NET 随机生成器的一半)

我还能做些什么来检查算法的效果如何?

4

3 回答 3

3

卡方检验是随机性质量的标准统计检验。有关实现,请参见http://en.wikibooks.org/wiki/Algorithm_Implementation/Pseudorandom_Numbers/Chi-Square_Test

如果您需要证明它在密码学上也很强大......嗯,这是一个更难的问题。

于 2013-01-11T23:57:49.240 回答
3

TestU01是一个软件库,以 ANSI C 语言实现,并为统一随机数生成器的经验统计测试提供了一组实用程序。

请参阅:P. L'Ecuyer 和 R. Simard,TestU01:用于对随机数生成器进行实证测试的 AC 库 ACM Transactions on Mathematical Software,Vol。33,第 22 条,2007 年。

于 2013-01-11T17:26:19.487 回答
2

我还能做些什么来检查算法的效果如何?

最终的方法是给出一个正式的证明,证明很难将这个伪随机序列与真正的随机序列区分开来,例如,通过将这个区分问题简化为另一个被证明(或至少被强烈认为)很难的问题(例如取离散对数)。

密码学的这一部分称为可证明的安全性,它提供了一些很好的证明技术和概念(核心谓词、单向函数、区分攻击、混合分布……)。但是,只有当您的算法具有可以正式处理的数学基础时,才能应用它。

在这个领域,第一个质量检查是:如果你告诉世界其他地方你的算法的所有细节以及它的所有概念和想法,可以吗?如果不是,那么就有问题了,因为任何加密方案都不应该基于隐藏它的工作原理。唯一的秘密必须是个人密钥(分别是随机种子),而不是算法本身。例如,一旦知道了凯撒芯片的工作原理,它就很容易损坏。与此相反,AES 是一个开放标准,但仍被认为是安全的。

于 2013-01-11T23:48:41.913 回答