我一直在阅读有关随机数及其生成器的各种文章。我从中得出了3个重要的结论:
因此,考虑到后者 - 大多数这些观察结果,我们将如何能够
答案 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加密扩展),这样您就不必亲自证明它。