Arduino是制作HRNG(硬件随机数生成器)的理想选择吗?


21

我正在为硬件随机数生成器设计一个将利用多种熵源(组合)的设计:

  • 环境光
  • 环境声(和声级)
  • 环境温度
  • 环境湿度
  • 设备本身的位置(上下,向左倾斜,标题为右等)
  • 将来还会有其他来源,甚至可能还有GPS数据(标记为可能是因为两个用户可能彼此并排站立,因此如果您知道他们,则可能是确定性的。)

我的想法是制作一个熵池“充电器”,让人们在白天继续随身携带,同时继续写入USB驱动器。

几个小时后,用户将拥有一个〜4GB的漂亮的熵池,可以将其插入PC并使用。我负担不起基于光或放射性衰变的真正昂贵的QRNG,因此我试图提供更便宜的产品。

您认为Arduino是制作此原型的最佳选择吗?如果没有,您会推荐什么?

Answers:


22

我认为您会想遵循busz建议的方法。搜索“二极管噪声”的概念。二极管和晶体管中的PN结会产生接近完美的高斯白噪声。采样应该是比任何环境源都要好的熵源。

大多数环境/环境数据的问题在于这些值不会随时间变化太多:温度,湿度,光线和声音在真正强模式下的可变性都小于一个数量级。如果安装在人身上,则用于测量运动的加速度计可能是很好的可变性来源,但是您可能必须做一些信号处理才能消除人体运动中出现的正常振荡模式。如果放在高密度的城市空间中,环境光和声源的可变性可能会相当高,但是我仍然认为重复的次数很多。



6

两条评论:

  1. 看一下布鲁斯·施耐尔(Bruce Schneier)的Yarrow PRNG算法。要点是,您可以拥有一个非常糟糕的“真实”随机信息源。只要您在一段时间内积累了足够多的误差,就可以将所产生的不确定性与软件伪随机数生成技术结合使用,以生成体面的随机数。

  2. 另一方面,我必须同意大多数其他答复者的意见。来自环境传感器的变化缓慢的信号是糟糕的熵源,很容易受到影响。确保您使用的是基于设备固有噪声的东西,并且对环境变化不敏感。



3

我同意以上两个回答。人类活动和环境读数将造成可怕的随机事件。但是,听起来您只有通过尝试一下并自己检查由此产生的随机性,才能确信这一点。对您来说,这将是一次很棒的学习经历!

Arduino适用于此应用程序。您感兴趣的所有传感器都可以连接到Arduino,并且有针对这些传感器的Arduino库。

查看有关将传感器连接到Arduino的这些教程:http : //www.ladyada.net/learn/sensors/



3

模拟音乐合成器中的许多白噪声发生器(Moog和Arp)会雪崩晶体管。如果在线查询Minimoog原理图或ARP4027,则应找到原理图。

我为ARP4027做了PCB布局。如果找不到原理图,请给我发送电子邮件。

美国国家半导体制造了一个数字随机数发生器MM5437。IIRC有一些AT小程序也可以做到这一点。可能是一个有趣的小项目。


2

最近,我阅读了有关使用电阻器产生随机噪声的非常有趣的讨论。由于量子效应,电阻器将产生非常小的电压。可用运放将其放大,以产生高质量的随机噪声源。


2

您可以将传感器输入用作伪随机数生成器的种子。Linux OS使用来自键盘/鼠标的输入作为/ dev / random的种子。只是一个主意。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.