如果有人看到一个随机数发生器怎么会知道?

时间:2012-08-17 15:00:12

标签: random proof perception

我一直在阅读有关随机数及其生成器的各种文章。我从中得出了3个重要的结论:

  • 随机数不是真正随机的
  • 很多时候他们有偏见(模偏见)
  • 当他们试图“随机行动”时,人类无法成为随机数字生成器

因此,考虑到后者 - 大多数这些观察结果,我们将如何能够

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

4 个答案:

答案 0 :(得分:0)

非常简单的测试:

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

答案 1 :(得分:0)

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

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

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

您可能会进行统计分析,并将随机数生成器的结果与“真实”随机源进行比较,但无论如何,可以通过尝试将真正的随机源转换为可能空间来产生偏差。

答案 2 :(得分:0)

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

答案 3 :(得分:0)

我很想说,只要您生成足够大的1,000,000+样本集,您就应该看到或多或少出现(伪)随机数的均匀分散。但是,我确信一些数学天才有一种方法可以诋毁这种情况,因为根据概率法,你可以获得一个数字的运行,就像任何其他序列一样。

根据我的阅读,如果你真的需要随机数,最好尝试重用加密库使用的。密码学领域显然很复杂,并且依赖于密钥生成的随机数。从OWASP's guide titled "Reversible Authentication Tokens"中的部分可以看出......

  

生成安全身份验证令牌的唯一方法是确保   没有办法预测他们的序列。换句话说:真随机   号。

     

可以说计算机无法生成真正的随机数   数字,但使用新技术,如阅读鼠标移动和   关键笔画改善熵有显着增加   随机数发生器的随机性。你不这样做至关重要   试着自己实现这个;使用现有的,经过验证的   实施是非常可取的。

     

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

我的看法是,除非您自己编写加密库,否则请相信那些(例如使用Java加密扩展),这样您就不必亲自证明它。