大气噪声与Java生成随机数

7

我想了解如何利用大气噪声产生真正的随机数。我知道 RANDOM.ORG 可以做到,但他们没有解释该过程的实现方法。我想了解该过程是如何工作及如何在Java中实现。我查看了这篇文章,但它是针对 .net 的,我无法理解。我还阅读了RANDOM.ORG关于真随机性的文章。如果有人能给我一个大致的想法,说明如何实现,我将万分感激。


它涉及将某些传感器连接到您的计算机上,该传感器能够测量某些随机值(例如熔岩灯和放射性衰变)。除非您拥有这样的传感器,否则您将无法完成此操作! - Oliver Charlesworth
7
  1. 将无线电接收器连接到电脑上。
  2. 数字化静态信号。
  3. ???
  4. 获利。
- Marc B
1
更简单的方法是,尝试读取系统信息,从CPU和/或风扇获取温度 - 并使用它来得到你的数字。 - Aleks G
“从你的CPU获取温度”是什么意思?我该怎么做呢?一旦我获得了温度,我该如何用它来生成随机数? - Jeel Shah
4个回答

6
如果您在过去的一年里购买了一台电脑,很可能它已经直接嵌入了CPU的真正随机数生成器。这是在2012年4月,Intel开始运送他们基于Ivy Bridge的Core和Xeon处理器时提供的。
IEEE Spectrum有一篇优秀的文章描述了Intel的数字随机数发生器的工作原理。他们基本上将两个非门连接成一个环路,创建了一个本质上不可预测的电路,由于热噪声的随机效应而定为0或1状态。热噪声只是随机的原子振动,这几乎是与RANDOM.ORG采样“大气噪音”相同的基础物理现象。
对于Intel的RNG及其输出质量的真正深入分析,请参见Cryptography Research的此PDF文档,特别是第7页。
Intel添加了一个名为RDRAND的新x86指令,允许程序直接检索这些硬件生成的随机数。截至Java 7,JVM尚未为此指令添加原生支持(如果它有的话)。
但是,可以使用JNI从Java调用RDRAND。这是我在drnglib项目中采取的方法。例如:
DigitalRandom random = new DigitalRandom();
System.out.println(random.nextInt());

nextInt()方法是通过JNI本地调用实现调用RDRAND的。以下是相关的调用堆栈:

RDRAND的性能非常好。使用8个线程的drnglib可产生约760 MB /秒的随机数据。


这是一个构思精巧的答案!但是,如果没有最近购买的计算机,有哪些选项可用?是大气噪声是唯一的选择还是还有其他选项? - Jeel Shah
1
还有其他选项,但从理论或实践角度来看,它们更加困难。其中一个答案链接到了维基百科上关于硬件随机数生成器的文章。整篇文章都很有启发性,但请查看这个使用观察事件的部分,特别是关于/dev/random的讨论,它有自己的文章。为了提供足够的密码学随机性而投入到/dev/random中的努力是惊人的。 - cambecc
1
基本上,从环境中收集随机性是很困难的。这就是为什么像RANDOM.ORG这样的网站存在,以及为什么英特尔花费多年时间设计和构建RDRAND。这里有另一篇关于该主题的维基百科文章。 - cambecc

4
您需要将一台无线电接收器连接到您的计算机上(例如:Philips FM1236/F 电视调谐器/ FM 收音机/视频 PCI 捕捉卡)。
将其插入一个空闲的 PCI 插槽,您应该能够使用一些音频设备(如 VLC 播放器)测试其工作情况。
然后,您将其调整到未发送频率,并让您的程序连接到它所代表的设备以进行音频捕获(正确的操作方式取决于您使用的卡,但这将有所帮助:http://docs.oracle.com/javase/tutorial/sound/capturing.html)。
然后,您可以以最简单的方式处理音频捕获:将其存储为波形文件到磁盘上并逐字节读取。

你提供的第一个链接已经失效了,你有其他的链接吗? - Jeel Shah
@gekkostate,这是链接:http://www.ebay.com/itm/Philips-FM1236-F-TV-Tuner-FM-Radio-Video-PCI-Capture-Card-/281097763240?pt=US_Video_Capture_TV_Tuner_Cards&hash=item4172bb79a8 我已经将名称写入我的答案中,因此不会再有链接失效的问题。 - Angelo Fuchs

2
random.org网站上可以了解到:

在2009年底,为了应对越来越多的客户和他们对良好可靠性和性能的需求,RANDOM.ORG进行了重大的重组。现在有一个分布式配置,不同地理位置的许多节点生成随机性,将其经过统计测试,然后将蒸馏出的随机比特流传输到云托管服务中,从中运行RANDOM.ORG服务。这种新的架构提高了服务的可靠性和性能,并帮助使RANDOM.ORG适用于现在提供的严肃应用(例如,彩票抽奖)。虽然仍然使用大气噪声生成随机数字,但今天使用的硬件和软件与1997年首次启动时的Radio Shack售价10美元的接收器相去甚远。

他们没有测量大气噪声的节点的图片,但是他们有广播噪声节点的图片。


1

维基百科有一个有趣的页面,标题为硬件随机数生成器。 去看看吧。 非常好写,还有对各种制造商有用的链接。 但是他们的一些产品并不便宜。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接