检查随机数的质量

时间:2013-01-11 17:15:39

标签: .net algorithm random

我编写了一个基于私有加密项目(用于教育目的)生成随机数的代码。现在我想检查我的随机数生成器的质量如何。

测试我已经做过:

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

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

3 个答案:

答案 0 :(得分:3)

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

参见:P. L'Ecuyer和R. Simard,TestU01:用于随机数发生器的经验测试的C库.ACM数学软件交易,Vol。 33,第22条,2007年。

答案 1 :(得分:2)

  

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

最终的方法是给出一个正式的证据,证明它是 hard 来区分这个伪随机序列和真正的随机序列,例如,通过将这个区别问题减少到另一个被证明的问题(或者至少强烈地相信)很难(例如采用离散对数)。

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

从这个领域开始,第一个质量检查是:如果你能告诉世界其他地方算法及其所有概念和想法的所有细节,那会不会好的?如果没有,那就有问题,因为没有加密方案应该基于隐藏它的工作原理。 only 秘密必须是单独的密钥(相应的随机种子),而不是算法本身。例如,凯撒切片机一旦知道其工作原理就很容易破碎。与此相反,AES是一种开放标准,但它仍被认为是安全的。

答案 2 :(得分:2)

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

如果你需要证明它的加密强大......那么,这是一个更难的问题。