跳到主要内容

3.6. Non-hardware Sources of Randomness (非硬件随机性源)

3.6. Non-hardware Sources of Randomness (非硬件随机性源)

输入熵的最佳来源是基于硬件的随机源, 例如环形振荡器、磁盘驱动器时序、热噪声或放射性衰变。然而, 如果这些都不可用, 还有其他可能性。这些包括系统时钟、系统或输入/输出缓冲区、用户/系统/硬件/网络序列号或地址和时序以及用户输入。不幸的是, 在某些情况下, 这些源中的每一个都可能产生非常有限或可预测的值。

上面列出的一些源在多用户系统上会非常强, 其中系统的每个用户本质上是随机性的源。然而, 在小型单用户或嵌入式系统上, 特别是在启动时, 对手可能能够组装类似的配置。这可能为对手提供与最初使用的混合过程相关性足够好的输入, 使得穷举搜索变得实用。

建议使用多个随机输入与强混合函数, 这可以克服任何特定输入中的弱点。请求的"随机"用户按键的时序和内容可以产生数百个随机比特, 但需要做出保守的假设。例如, 一个相当保守的假设是击键间隔最多提供几个比特的随机性, 但仅当间隔在到该点为止的间隔序列中是唯一的时。类似的假设是键代码提供几个比特的随机性, 但仅当代码在序列中是唯一的时。因此, 重复前一个值的间隔或键代码将被假定为不提供额外的随机性。混合这些时序与键入字符的结果可以进一步与时钟值和其他输入组合。

这种策略可能使生成良好的随机数用于安全的可移植代码变得实用, 即使某些输入在某些目标系统上非常弱。然而, 它仍然可能在小型、单用户或嵌入式系统上对高级攻击失败, 特别是如果对手曾经能够在过去观察生成过程。仍然优先选择基于硬件的随机源。