我有一个嵌入式系统。我希望它在开机或以其他方式重置时做的是生成一个唯一的 ID,以便在不同的重新启动时以很高的概率生成一个不同的唯一 ID。
它无法访问实时时钟,但可以访问 ADC 和 UART。我想知道是否有一种体面的方法可以从这些来源收集熵以生成唯一 ID。我隐约熟悉Yarrow .有什么好的方法可以使用它吗?
不幸的是,我没有任何具有可预测特征的噪声源; ADC 连接到许多相对低噪声的输入,所以我想我可以只使用 ADC 的最低有效位作为输入。
编辑:就其值(value)而言,这就是 TI TMS320F28335 处理器。
更新/说明:我正在寻找一种收集熵的软件方法。我找到了另一种方法来解决我的问题,所以在某种程度上,我的问题是有争议的,但我仍在寻找有关 的指导。收集熵的具体软件解决方案来自低熵源,如 ADC 的最低有效位和用于接收 UART 字符的系统时序。
最佳答案
我用过:
您还可以对网络数据包之间的时间等进行计时,但这些可能比很多人的事情更具确定性/可预测性。电噪声和用户交互是更好的熵源。
顺便说一下,关于“按键之间的时间”的东西,我倾向于将它们存储在一个嵌入式系统上,从开机开始,在最后 8 个左右的循环缓冲区中,因为你永远不知道什么时候需要他们。 (换句话说:不要等到你需要随机位,然后强制用户按下按钮 3 次!)
关于random - 嵌入式系统上 "uniqueness"/entropy 的来源,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3764976/