大气噪声和生成随机数java
Posted
技术标签:
【中文标题】大气噪声和生成随机数java【英文标题】:atmospheric noise and generating random numbers java 【发布时间】:2012-01-08 03:03:57 【问题描述】:我有兴趣了解如何使用大气噪声来生成真正的随机数。我知道RANDOM.ORG
做到了,但他们(当然)没有解释流程是什么以及如何实施。我想知道这个过程是如何工作的,以及它是如何在java中实现的。我已经研究了这个article,但它是针对.net 的,所以我不明白。我还研究了RANDOM.ORG article on true randomness. 如果有人能给我这个作品的大致概念以及如何实现它,将不胜感激。
【问题讨论】:
它涉及将一些传感器连接到您的计算机,该传感器能够测量随机事物(示例包括熔岩灯和放射性衰变)。除非你有这样的换能器,否则你做不到! 1.将无线电接收器连接到 pc。 2. 数字化静态 3. ??? 4. 利润。 在更简单的说明中,尝试读取系统信息,从 CPU 和/或风扇获取温度 - 并使用它来获取您的号码 “从 CPU 获取温度”是什么意思,我该怎么做?一旦我得到温度,我怎么能用它来生成随机数? 【参考方案1】:如果您在过去一年的某个时间购买了一台计算机,那么很有可能它的 CPU 中直接嵌入了一个真正的随机数生成器。当英特尔于 2012 年 4 月开始交付基于 Ivy Bridge 的 Core 和 Xeon 处理器时,该功能就可用了。
有一个出色的article in IEEE Spectrum 描述了英特尔的数字随机数生成器的工作原理。它们基本上将两个非门连接到一个循环中,从而创建了一个固有的不可预测的电路,由于热噪声的随机效应,该电路会进入 0 或 1 状态。热噪声只是随机的原子振动,这与 RANDOM.ORG 在采样“大气噪声”时使用的基本物理现象几乎相同。
有关英特尔 RNG 及其输出质量的真正深入分析,请参阅this PDF document from Cryptography Research,尤其是第 7 页。
英特尔添加了一个名为RDRAND 的新 x86 指令,允许程序直接检索这些硬件生成的随机数。从 Java 7 开始,JVM 还没有为这条指令添加原生支持(如果有的话)。
但是,可以使用 JNI 从 Java 调用 RDRAND。这是我对drnglib project 采取的方法。例如:
DigitalRandom random = new DigitalRandom();
System.out.println(random.nextInt());
nextInt()
方法实现为调用 RDRAND 的 JNI 本机调用。这是相关的调用堆栈:
RDRAND 的性能非常好。使用具有 8 个线程的 drnglib 会产生约 760 MB/秒的随机数据。
【讨论】:
这是一个构造精良的答案!但是,如果没有最近购买的计算机,有什么选择?是唯一的选择大气噪音还是有其他选择? 还有其他选择,但从理论或实践的角度来看,它们更难。链接到关于硬件随机数生成器的***文章的其他答案之一。整篇文章很有启发性,但请查看section on using observed events,尤其是/dev/random
的讨论,其中有own article。 /dev/random
为加密目的提供足够的随机性所付出的努力是惊人的。
基本上,从环境中收集随机性是很困难的。这就是 RANDOM.ORG 这样的网站存在的原因,也是英特尔花费数年时间设计和构建 RDRAND 的原因。这是yet another wikipedia article 的主题。【参考方案2】:
您必须将无线电接收器连接到您的机器(例如: 飞利浦 FM1236/F 电视调谐器/FM 收音机/视频 PCI 采集卡)。
将它插入一个免费的 PCI 插槽,您应该能够使用一些音频收听设备(如 VLC 播放器)测试它的工作原理。
然后您将其调至非发送频率,并让您的程序连接到其代表的设备以进行音频捕获(这样做的正确方法取决于您使用的卡,但这会有所帮助:http://docs.oracle.com/javase/tutorial/sound/capturing.html )
然后您以最简单的方式处理音频捕获:将其作为波形存储到您的磁盘上并逐字节读取。
【讨论】:
你的第一个链接失效了,你会再做一个吗? @gekkostate 你去:ebay.com/itm/…我把名字写到我的答案中,所以没有链接可以过时了。【参考方案3】:来自random.org 网站:
2009 年底,RANDOM.ORG 进行了一次重大重组,以应对客户数量的增加以及他们对良好可靠性和性能的需求。现在有一个分布式配置,其中不同地理位置的多个节点生成随机性,对其进行统计测试,然后将提取的随机位流式传输到运行 RANDOM.ORG 服务的云托管服务。这种新架构提高了服务的可靠性和性能,并有助于使 RANDOM.ORG 适用于现在提供的严肃应用程序(例如,彩票绘图)。经过验证,随机数仍然是由大气噪声产生的,但今天使用的硬件和软件与 Radio Shack 于 1997 年推出的 10 美元接收器相去甚远。
他们没有测量大气噪声节点的图片,但他们有无线电噪声节点的图片。
【讨论】:
【参考方案4】:***有一个有趣的页面,标题为Hardware random number generators。 看看这个。 写得很好,并提供了到各个制造商的有用链接。 不过,他们的一些产品并不便宜。
【讨论】:
以上是关于大气噪声和生成随机数java的主要内容,如果未能解决你的问题,请参考以下文章