9

/dev/random 和 /dev/urandom 使用环境噪音来产生随机性。

使用虚拟化服务器,一个硬件配置上可以有多个操作系统实例。这些操作系统都将从相同的环境噪声中获取随机性。

这是否意味着作为一个组,随机数生成器的强度会降低,因为所有操作系统实例都基于相同输入的计算?或者,是否将环境噪声分开,从而不会发生共享?

如果后者是真的,我可以看到这会降低 /dev/urandom 的有效性,因为它重用了其内部池并且环境输入更少,从而降低了熵。

/dev/random 应该没问题,因为它会阻塞直到获得足够的噪音......当然,除非操作系统实例都共享输入。

所以,问题是:虚拟化对加密强的随机数生成器有什么影响,特别是那些使用环境噪声的生成器?

4

3 回答 3

3

我无法快速找到任何参考资料,但在我看来,熵来自设备的内核数据结构,而不是实际设备本身。由于无论虚拟化如何,这些都是独立的,我怀疑答案并不多。

[编辑] 在查看内核源代码(实际上是补丁历史)之后,看起来 Linux 至少从键盘按下、鼠标活动、中断时间(但不是所有中断)和块设备请求完成时间收集熵。在虚拟化系统上,我怀疑鼠标/键盘事件会非常低,因此不会对收集的熵做出贡献。据推测,这会被额外的网络 I/O 中断活动所抵消,但目前尚不清楚。在这方面,我认为它与非 VM 服务器没有太大区别。

于 2008-10-24T13:54:13.677 回答
0

根据定义,加密强 PRNG 的随机性不应受到虚拟化的影响。正如您所提到的,/dev/random 和 /dev/urandom [ref: http://en.wikipedia.org/wiki/Urandom/]之间的区别在于,如果系统有,则 /dev/random 上的读取操作将阻塞收集到的熵不足以产生所需数量的随机数据。您也可以写入/dev/random 以将您自己的数据混合到熵池中。

于 2008-10-25T03:03:42.697 回答
0

谢谢。

据我了解,依赖网络 I/O 获取熵的系统容易受到中间人攻击。我发现以下文章讨论了适当的熵来源。他们的建议是从 Linux 内核中删除网络 I/O,因为它具有敏感性。

我认为这意味着有可能在虚拟化环境中利用通用硬件。如果使用网络 I/O,机会就会增加。否则,它足够低,除了最安全的应用程序之外,其他所有应用程序都不会关注它。在这种情况下,无论如何托管您自己的应用程序可能更安全。

于 2008-10-25T02:50:45.107 回答