7

我有兴趣了解如何使用大气噪声来生成真正的随机数。我知道RANDOM.ORG这样做,但他们(当然)没有解释流程是什么以及如何实施。我想知道这个过程是如何工作的,以及它是如何在java中实现的。我已经查看了这篇文章,但它是针对 .net 的,所以我不明白。我还查看了关于真正随机性的 RANDOM.ORG 文章。如果有人能给我这个作品的大致概念以及如何实现它,将不胜感激。

4

4 回答 4

6

如果您在过去一年的某个时间购买了一台计算机,那么很有可能它的 CPU 中直接嵌入了一个真正的随机数生成器。当英特尔于 2012 年 4 月开始交付基于Ivy Bridge的 Core 和 Xeon 处理器时,该功能就可用了。

IEEE Spectrum中有一篇优秀的文章描述了英特尔的数字随机数生成器的工作原理。它们基本上将两个非门连接到一个回路中,从而创建了一个固有的不可预测的电路,由于热噪声的随机效应,该电路会进入 0 或 1 状态。热噪声只是随机的原子振动,这与 RANDOM.ORG 在采样“大气噪声”时使用的基本物理现象几乎相同。

有关英特尔 RNG 及其输出质量的真正深入分析,请参阅Cryptography Research 的 PDF 文档,尤其是第 7 页。

英特尔添加了一条名为RDRAND的新 x86 指令,允许程序直接检索这些硬件生成的随机数。从 Java 7 开始,JVM 尚未添加对该指令的本机支持(如果有的话)。

但是,可以使用 JNI 从 Java 调用 RDRAND。这是我对drnglib 项目采取的方法。例如:

DigitalRandom random = new DigitalRandom();
System.out.println(random.nextInt());

nextInt()方法实现为调用 RDRAND 的 JNI 本机调用。这是相关的调用堆栈:

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

于 2013-05-15T04:51:12.183 回答
4

您必须将无线电接收器连接到您的机器(例如:Philips FM1236/F TV Tuner/FM Radio/Video PCI Capture Card)。

将它插入一个免费的 PCI 插槽,您应该能够使用一些音频收听设备(如 VLC 播放器)测试它的工作原理。

然后你把它调到一个非发送频率,让你的程序连接到它所代表的设备以进行音频捕获(这样做的正确方法取决于你使用的卡,但这会有所帮助:http://docs. oracle.com/javase/tutorial/sound/capturing.html )

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

于 2011-11-28T17:15:58.773 回答
2

random.org网站:

2009 年底,RANDOM.ORG 进行了重大重组,以应对客户数量的增加以及他们对良好可靠性和性能的需求。现在有一个分布式配置,其中不同地理位置的多个节点生成随机性,对其进行统计测试,然后将提取的随机位流式传输到运行 RANDOM.ORG 服务的云托管服务。这种新架构提高了服务的可靠性和性能,并有助于使 RANDOM.ORG 适用于现在提供的严肃应用程序(例如,抽奖)。经过验证,随机数仍然是由大气噪声产生的,但今天使用的硬件和软件与 Radio Shack 于 1997 年推出的 10 美元接收器相去甚远。

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

于 2011-11-28T17:16:33.090 回答
1

Wikipedia 有一个有趣的页面,标题为Hardware random number generators。看看这个。写得很好,并提供了到各个制造商的有用链接。不过,他们的一些产品并不便宜。

于 2012-01-16T22:04:32.387 回答