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

电器工程 Arduino 随机数
2022-01-19 07:21:46

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

  • 环境光
  • 环境声(和声级)
  • 环境温度
  • 环境湿度
  • 设备本身的位置(倒置、向左倾斜、向右倾斜等)
  • 未来的其他来源,甚至可能是 GPS 数据(标记为可能是因为两个用户可能站在一起,因此如果你知道他们可能是确定性的。)

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

几个小时后,用户将拥有一个不错的约 4GB 熵池,可以插入 PC 并使用它。我买不起基于光衰变或放射性衰变的真正昂贵的 QRNG,所以我试图想出更便宜的东西。

在您看来,Arduino 是对此进行原型设计的最佳选择吗?如果没有,你会推荐什么?

4个回答

我想你会想走busz建议的路。搜索“二极管噪声”的概念。二极管和晶体管中的 PN 结可以产生接近完美的高斯白噪声。采样应该是比任何环境源更好的熵源。

大多数环境/环境数据的问题在于这些值不会随着时间的推移而发生太大变化:温度、湿度、光线和声音的变化都小于一个数量级的可变性,并且具有非常强的模式。如果安装在人身上,用于测量运动的加速度计可能是一个很好的可变性来源,但您可能需要进行一些信号处理才能消除人类运动中存在的正常振荡模式。如果放置在高密度的城市空间中,环境光和声源可能会有一些相当高的可变性,但我再次认为会有很多重复。

HRNG 有一些有趣的电路,不需要环境熵源: http ://www.cryogenius.com/hardware/rng/ http://robseward.com/itp/adv_tech/random_generator/ 等等...

绝对有可能将这些电路之一改编为Arduino shield然后,Arduino 将充当 HRNG 和 PC 之间的网关。

如果您真的需要环境熵输入,arduino 有 6 个模拟输入通道,因此您可以读取几乎任何您能想到的传感器并将数据用作随机种子的来源。

两条评论:

  1. 查看 Bruce Schneier 的Yarrow PRNG 算法。主要的一点是,你可能有一个非常糟糕的“真实”随机信息来源;只要您随着时间的推移积累了足够多的不确定性,就可以将由此产生的不确定性与软件伪随机数生成技术相结合,以产生不错的随机数。

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