2012-08-17 107 views
0

我一直在阅读关于随机数字及其生成器的各种文章。有迹象表明,我从他们身上汲取通常3个重要结论:如何知道一个人是否看到一个随机数发生器?

  • 随机数是不是真正的随机
  • 大部分都会有一种倾向(模偏置)时
  • 人类是无法由随机数生成器,当他们试图“随机行动”

因此,与后者最考虑到这些意见,如何将我们能够

  1. 告诉我们看到的一系列数字是否真的是随机的,更重要的是
  2. 有没有什么方法可以证明所说的序列真的是随机的?

回答

0

我很想说,只要你产生足够大的样本集1,000,000+,你应该会看到或多或少的均匀弥散(伪)随机数发生。然而,我相信一些数学天才有一种可以证明这一点的方法,因为按照概率法则,你可以像任何其他序列一样得到一个数字。

从我读过的内容来看,如果你真的需要随机数,那么最好的办法就是重用密码库使用的密码。密码学领域显然很复杂,并且依赖随机数字来生成密钥。从OWASP's guide titled "Reversible Authentication Tokens"它说,这部分...

产生安全认证令牌的唯一方法是确保 没有办法预测它们的序列。换句话说:真随机 数字。

它可以说,计算机不能产生真正的随机数 ,但使用新的技术,如阅读鼠标移动和 击键,以提高熵有显著增加 随机性的随机数发生器。请注意,您不要尝试自行执行此操作;非常需要使用现有的,经过验证的实施方式。

大多数操作系统都包含用于生成可从几乎任何编程语言调用的随机数字 的函数。

我的意思是,除非你自己编码密码库,否则把信任放在那些(例如使用Java Cryptography Extension),所以你不必亲自推测它。

0

非常简单的测试:

如果你真的想进入试验的随机数,你可以模拟一个程序,它从1-100 100倍,输出随机数作为一个例子。 然后看看这些数字,看看是否有任何模式。然后通过多次重启程序并重复该过程来进行该测试。 检查所有数据以确定随机数是否总是随机的,在个别测试期间是随机的,还是从不。 :P

0

测试随机数发生器可能主要取决于您想要查找的内容。即使纯粹的非重复性也不能保证随机性。

有些公司会为了认证目的测试随机数字发生器(例如在线赌场)。我很快找到的一个叫做iTech Labs,尽管their testing methodology page在技术细节方面有很多不足之处。

其他测试人员和认证机构publish the required data for a certification;这里有更具体的细节,但没有你想要的那么多。

你可以做一个统计分析,并将你的随机数发生器的结果与一个“真正的”随机数据源进行比较,但是可以将偏差从试图将真随机数据源转换为可能性空间。

0

随机性测试验证序列的数学属性。例如,进入频率(所有符号预期具有相同的频率),局部变化,序列分析(符号的概率必须不依赖于先前的频率)。 确切的证据不存在,但有一个品质因素 - 序列真正是随机的概率。另一个标准可以基于可压缩性:真随机性具有最大熵,因此不能被压缩。 当然,这个测试对于随机性来说并不可靠,但是允许使用诸如zlib等现成工具进行快速和肮脏的测试。

相关问题