我听说人们使用光传感器,盖革计数器和其他物理传感器来生成随机数,但我持怀疑态度。有没有办法通过测量物理世界(使用Arduino或任何其他微控制器)生成随机数?如果是这样,这些数字是否真的是随机的?
澄清:问题是关于使用微控制器收集的数据生成随机数的可行性,这些随机数可以合理地应用于密码术 - 是依赖设备熵的替代方案。
答案 0 :(得分:3)
取决于传感器的范围,采样频率和灵敏度。您可以将传感器测量视为位串或浮点数,这并不重要。关键是,最重要的位/前导小数不是很随机,它们甚至可能几乎没有变化。同样,最低有效位是不可靠的随机源,因为它们可能由于传感器灵敏度有限而显示阶跃效应,并且取决于传感器,它们可能在时间上强烈相关(例如,温度或电压将具有逐渐变化的趋势) )。然而,中间位/数字很可能是真随机值的来源。
假设您有一个传感器输出0到200范围内的值,精度为0.01。让我们说这是一个压力表,也许是一个分贝计。您需要对此进行广泛测试,并查看特定传感器和环境的值分布,但我认为10 ^ 0和10 ^ -1位置的数字可能非常均匀分布且没有可辨别的顺序。
最适合的传感器可以进行非常精确的测量,但无论如何都必须处理高水平的噪音。这可能会产生问题,因为大多数传感器的设计并不是为了提供不必要/不可靠的精度。此外,当然优选的是总是和任何地方(噪声除外)大致相同的测量。宇宙背景辐射就是一个很好的例子。
答案 1 :(得分:1)
我一直在尝试使用随机数生成的硬件源,到目前为止它们似乎提供了一个不可预测的来源。如果使用美白技术,则减少/消除任何潜在的偏差,以允许它们产生统一的随机整数序列。
如果你想尝试和实验,我已经实现了一个Arduino兼容库,它使用与看门狗定时器相关的抖动来生成随机数。初步结果表明它正在产生适合加密目的的结果。
找到答案 2 :(得分:-3)
Google:真正的随机数生成器
这就是你如何做到的,你制造噪音并对其进行采样。你无法从像软件算法那样具有确定性的东西中创造真正随机的东西。