在嵌入式系统中寻找熵的来源?

时间:2018-06-25 16:14:52

标签: c memory random embedded entropy

对于小型嵌入式设备(TI MSP430F2274),我试图创建一个伪随机数生成器(PRNG),但是我很难确定用作种子的潜在熵源。遗憾的是,该设备没有足够的可用存储空间来包含time.h和功能srand(time(0))。有没有人有使用该系列设备的经验,或者在受其存储空间限制的嵌入式设备中集成了PRNG?谢谢。

2 个答案:

答案 0 :(得分:4)

您的零件(MSP430F2274)不提供任何通用解决方案或支持,但您的应用程序可以提供。可以使用任何无法预测的异步外部事件或值,该事件或值一定会在您需要时或恰好在您需要时发生或可用。

例如,该部件具有一对16位定时器,其中一个正在运行,当检测到某些异步触发事件(例如用户按下按钮)时,该时刻的时钟计数器值可用作种子。 。

或者,如果您的模拟输入端具有不断变化且异步的信号,则可以随时读取该值,并可能在适当的时间间隔内读取多个采样,以在必要时生成更大的种子。

即使没有特定信号,否则未使用的ADC输入通道也可能具有足够的噪声,以致其最低有效位无法预测-您可以将多个独立样本中的LSB连接起来,以生成种子或所需的长度。 / p>

基本上,您的应用程序已支持任何不可预测的外部事件都可以满足。如果没有您的应用程序的详细信息,就不可能给出具体建议,但是鉴于这是一个混合信号微控制器,因此大概会有一些合适的外部不可预测性吗?

答案 1 :(得分:0)

如果您有多个时钟源(而MSP430F2274似乎一目了然),则如果绝对没有更好的选择,则可以使用这些源之间的不可预测的漂移来实现熵。

方法是使用两个来源,一个作为时基,测量一段时间内另一个来源的滴答声。由于两个时钟源是独立的,因此滴答的计数将略有不同。取决于计时器可用的选项,这可以由计时器完成,否则,甚至看门狗也可以是配置为间隔计时器的选项(如果没有其他选择,通常可以在与主时钟不同的时钟源上运行)。

此方法可能需要一些时间来设置(由于时钟与它们指定的频率相差不大,因此您需要等待相对较长的时间才能在它们之间收集有意义的随机偏差,大约一秒钟也许足够)。

否则,就像克利福德提到的那样,如果您有这样的环境,则可以从环境中收集熵,这绝对是优越的。唯一的好处(在时钟源之间漂移)是几乎任何设置都可以使用它。

通过您无法期望的srand(time(0))方式,time()可以获取自微控制器时代以来的秒数? :)