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

电器工程 微控制器 浮针 随机数
2022-01-04 07:30:36

我刚刚通读了问题AVR Random Number Generator并遇到了多种在 AVR 中生成随机种子的方法:

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

为什么不只是一个数字引脚,配置为没有上拉和浮动的输入?理论上应该会生成一个随机比特流。为什么不使用这个?状态变化太慢?它倾向于停留在 1 还是 0?还有其他问题吗?

4个回答

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

其次,但也许更关键:如果数字引脚的浮动“中值”值不正好位于逻辑检测电平之间(不是电源和接地轨电平,而是输入电路的开关阈值),则生成的比特流将具有对 1 或 0 的强烈偏差。这种偏差比模拟电平的偏差更强烈地倾斜种子。

只需很少的耦合,无论是来自附近的走线或信号,还是通过一些电阻上拉/下拉,无论是设计的还是偶然的,都可以推动“浮动”数字引脚解除浮动 - 这也可能发生在后 -部署。在工程任何设计中,最好避免这种形式的故障模式。

浮动输入未定义。它可以给你随机位,但它也可能会卡在 0 或 1。大多数时候它会卡住。而当它真正浮动时,可能会导致系统噪声和功耗增加。浮动输入通常是一件坏事,即使输入没有被用于任何事情。

最简单的解决方案是用一个误用的集电极开路晶体管电路构建一个硬件随机信号发生器电路。使用比特流输出到微控制器上的输入。每隔一段时间对传入的位进行采样。为确保 1 和 0 的数量大致为偶数,只需将状态变化用作 1,将无变化用作零。谷歌晶体管噪声发生器了解更多信息。

“随机”是一个棘手的词。在某些情况下,它只是意味着“不可预测”,但在其他情况下——特别是与信号处理和密码学相关的情况——它意味着“统计上不相关”。

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