使用GPIO引脚的随机数生成器?


22

我刚刚阅读了AVR随机数生成器问题,并遇到了多种在AVR中生成随机种子的方法:

  • 使用专用的“安全AVR”
  • 使用内部温度传感器
  • 读取未写入的EEPROM
  • 测量用户输入之间的时间间隔
  • 使用浮动ADC引脚。

为什么不只将一个数字引脚配置为输入而没有上拉和浮空呢?从理论上讲,应该生成随机位流。为什么不使用这个?状态变化太慢了吗?它倾向于卡在1还是0?还有其他问题吗?


1
安全的AVR已失效AFAIK
vicatcu

1
未编写的eeprom是否始终为0xFF?
vsz

@vsz,也许如果您向其中写一些东西而忘记了所写的内容,那么它现在是“随机的”。大声笑。
Vorac 2012年

Answers:


5

“随机”是一个棘手的词。在某些情况下,它仅表示“不可预测”,而在其他情况下(尤其是与信号处理和加密相关的情况),则表示“统计上不相关”。

即使从浮动引脚读取的值是不可预测的(在第一个意义上是“随机”),在第二个意义上也不太可能有用。


15

使用数字输入和模拟输入之间的不言而喻的区别是,模拟中可能存在更大的种子值跨度。

其次,但也许更关键:如果数字引脚的浮动“中值”不在逻辑检测电平(不是电源电平和接地轨电平,而是输入电路的开关阈值)之间的中间值,则结果位流将具有偏向1或0的强烈偏见。这种偏见比类似水平的偏斜要严重得多。

将“浮动”数字引脚推到浮动状态,只需通过很少的耦合,无论是来自附近的迹线或信号,还是通过某种电阻性上拉/下拉(无论是设计的还是偶然的),即可将其“浮动”起来—部署。在工程设计中,最好避免这种形式的故障模式。


14

浮动输入未定义。它可以为您提供随机的位,但也可能会卡在0或1上。在大多数情况下,它会卡住。当它真正浮动时,可能会导致系统噪声和功耗增加。浮动输入通常是一件坏事,即使输入没有被使用。


它不仅将得到停留在0或1的一些时间,但除非两个晶体管组成输入的第一阶段缓冲器PERFECTLY平衡,或存在于这样或那样的一些外部电流源,输入浮动最终达到1或降至0。
wjl

9

最简单的解决方案是从滥用的集电极开路晶体管电路中构建硬件随机信号发生器电路。使用位流输出到微控制器上的输入。间隔采样输入的位。要确保1和0的数目大致为偶数,只需将状态更改作为1而不将状态更改作为0。Google提供了有关晶体管噪声发生器的更多信息。


有趣。“滥用的集电极开路晶体管电路”是什么样的?
斯蒂芬·科林斯

7
@Remiel-您对晶体管的基极-发射极结进行了反向偏置,它的作用就像是一个很烂的齐纳二极管。您采用非常嘈杂的齐纳二极管,然后放大噪声以获得随机比特流。参见robseward.com/misc/RNG2
康纳·沃尔夫

3

许多微控制器中都有一个随机发生器,它是两个时钟源(也许是一个内部时钟源,另一个是外部时钟源)之间的误差。当您比较它们时,它们会由于噪声而稍微漂移,因此可以使用。

最后,这取决于您需要什么?稍微随机化,您甚至可以使用一个未连接的ADC引脚。或者只是使用类似的算法

梅森捻线器http://en.wikipedia.org/wiki/梅森_twister

如果这在密码上是安全的,则没有任何限制,但是对于大多数目的来说已经足够了。


据我所知,这是msp430应用笔记中提到的先前问题中采用的方法,据我所知AVR时钟系统不支持该技术
vicatcu 2012年

正确。即使不直接支持,也应该可以使用相同的时钟源进行操作。
古斯塔沃·利托夫斯基2012年

3

随机种子及其算法的质量取决于每个随机位中的熵或不确定性的数量。然后,种子的最佳生成器使用极少步骤的高熵,而不是许多低熵的步骤。

高熵的一个很好的例子是对随机种子使用Latin Squares方法。

浮动输入很容易受到缺陷,泄漏​​或进入噪声的影响。


0

在PIC18F微处理器中,您需要为随机数提供种子。种子可以是0到32767(15位)之间的任何值。我建议在程序开始时,使引脚和模拟输入引脚之一。读取该引脚并取最低有效位并将其放入16位变量中。然后将变量向左移动1。再次读取该引脚,并将ADC结果的LSB放入存储了最后一位的变量的第一位。再次向左移动.....

重复此过程,直到变量中有15位。这是您需要放入种子中的数字。

完成此操作后,您可以简单地将模拟输入引脚设为数字输入引脚并对其进行弱上拉,或者将其设为数字​​输出引脚。任一个都会阻止该引脚浮空。

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.