大气噪声和生成随机数java

时间:2011-11-28 17:06:26

标签: java random noise

我有兴趣了解如何使用大气噪声生成真正的随机数。我知道RANDOM.ORG做到了,但他们(当然)没有解释过程是什么以及如何实施。我想知道这个过程是如何工作的,以及它如何在java中实现。我调查了这个article,但它是.net,所以我不明白。我也调查了RANDOM.ORG article on true randomness.如果有人能够对我的工作以及如何实施这些工作有一个大概的了解,我们将不胜感激。

4 个答案:

答案 0 :(得分:6)

如果你在过去一年的某个时间买了一台电脑,那么很有可能它会直接嵌入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 /秒的随机数据。

答案 1 :(得分:4)

你必须将无线电接收器连接到你的机器上(如下所示: 飞利浦FM1236 / F电视调谐器/调频收音机/视频PCI采集卡)。

将其插入免费的PCI插槽,您应该可以使用某些音频监听设备(如VLC播放器)测试其工作情况。

然后你将它调到非发送频率并让程序连接到它所代表的设备以进行音频捕获(正确的方法取决于你使用的卡,但这会有所帮助:{{3 }})

然后以最简单的方式处理音频捕获:将其作为wave存储到磁盘上并按字节读取它。

答案 2 :(得分:2)

来自random.org网站:

  

2009年底,RANDOM.ORG进行了重大重组,以响应越来越多的客户及其对良好可靠性和性能的需求。现在存在分布式配置,其中不同地理位置中的多个节点生成随机性,对其进行统计测试,然后将提取的随机位流传输到运行RANDOM.ORG服务的云托管服务。这种新架构提高了服务的可靠性和性能,并使RANDOM.ORG适用于现在提供的严肃应用(例如,彩票图纸)。尽管如此,随机数仍然是由大气噪声产生的,但今天使用的硬件和软件距离Radio Shack的10美元接收器还有很长的路要走,它始于1997年。

他们没有测量大气噪声的节点图片,但他们确实有无线电噪声节点的图片。

答案 3 :(得分:1)

维基百科有一个名为Hardware random number generators的有趣页面。 看看这个。 写得很好,并与各个制造商的有用链接。 但是他们的一些产品并不便宜。