random - 嵌入式系统上 "uniqueness"/entropy 的来源

标签 random embedded uniqueidentifier entropy

我有一个嵌入式系统。我希望它在开机或以其他方式重置时做的是生成一个唯一的 ID,以便在不同的重新启动时以很高的概率生成一个不同的唯一 ID。

它无法访问实时时钟,但可以访问 ADC 和 UART。我想知道是否有一种体面的方法可以从这些来源收集熵以生成唯一 ID。我隐约熟悉Yarrow .有什么好的方法可以使用它吗?

不幸的是,我没有任何具有可预测特征的噪声源; ADC 连接到许多相对低噪声的输入,所以我想我可以只使用 ADC 的最低有效位作为输入。

编辑:就其值(value)而言,这就是 TI TMS320F28335 处理器。

更新/说明:我正在寻找一种收集熵的软件方法。我找到了另一种方法来解决我的问题,所以在某种程度上,我的问题是有争议的,但我仍在寻找有关 的指导。收集熵的具体软件解决方案来自低熵源,如 ADC 的最低有效位和用于接收 UART 字符的系统时序。

最佳答案

我用过:

  • float ADC 输入的最低位,但您触及了
  • 一个极高分辨率的计时器(~10ns),并在用户按键之间计时时采用最低的“n”位。如果您接受用户按键(在最高时序分辨率下)在其时序上实际上是随机的,那么它运行得非常好。

  • 您还可以对网络数据包之间的时间等进行计时,但这些可能比很多人的事情更具确定性/可预测性。电噪声和用户交互是更好的熵源。

    顺便说一下,关于“按键之间的时间”的东西,我倾向于将它们存储在一个嵌入式系统上,从开机开始,在最后 8 个左右的循环缓冲区中,因为你永远不知道什么时候需要他们。 (换句话说:不要等到你需要随机位,然后强制用户按下按钮 3 次!)

    关于random - 嵌入式系统上 "uniqueness"/entropy 的来源,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3764976/

    相关文章:

    mysql - 唯一 ID : is a unique username + currentMilliseconds good enough for a unique Id

    python - 在 Python 中生成一个随机字母

    vb.net - For-Next-语句中的新随机数重复相同的值

    PHP 种子、确定性、加密安全 PRNG(伪随机数生成器)。可能吗?

    embedded - MSP430上的Zlib压缩

    c - STM32F103 GPIO 端口

    rust - 如何以简单的英语引用 SPI1 数据寄存器以在 Rust 中设置 DMA

    c# - 唯一设备 ID UWP

    c# - 如何在C#中生成一个总共8位的随机数? (4个整数,4个小数部分)

    ios - 应用程序从 iTunes 获取更新后钥匙串(keychain)不保留数据