/ dev / random和/ dev / urandom使用环境噪声来生成随机性。
使用虚拟化服务器,在一个硬件配置上可以有多个操作系统实例。这些操作系统都将从相同的环境噪声中获取随机性。
这是否意味着随机数生成器强度降低,因为所有操作系统实例都基于相同输入的计算?或者,是否将环境噪声划分为不共享?
如果后者是真的,我可以看到这降低了/ dev / urandom的有效性,因为它重用了它的内部池并减少了环境输入,降低了熵。
/ dev / random应该没问题,因为它会阻塞,直到获得足够的噪音......除非OS实例都在共享输入。
所以,问题是:虚拟化对加密强大的随机数生成器有什么影响,特别是那些使用环境噪声的生成器?
答案 0 :(得分:3)
我无法快速找到任何引用,但在我看来,熵是从设备的内核数据结构派生的,而不是实际的设备本身。由于无论虚拟化如何,这些都是独立的,我怀疑答案并不多。
[编辑]在查看内核源代码(实际上是修补程序历史记录)之后,它看起来像Linux,至少从键盘按下,鼠标活动,中断计时(但不是所有中断)收集熵,并阻止设备请求完成时间。在虚拟化系统上,我怀疑鼠标/键盘事件会非常低,因此不会对收集的熵产生影响。据推测,这可能会被额外的网络I / O中断活动所抵消,但目前尚不清楚。在这方面,我认为它与非VM服务器的区别很大。
答案 1 :(得分:0)
感谢。
根据我的理解,依赖于网络I / O进行熵的系统在中间攻击中易受人类攻击。我发现follow article讨论了适当的熵源。他们的建议是从Linux内核中删除网络I / O,因为它易受影响。
我认为这意味着有可能在虚拟化环境中利用通用硬件。如果使用网络I / O,则机会增加。否则它足够低,除了最安全的应用程序之外不会引起所有人的关注。在这种情况下,无论如何都可能更安全地托管您自己的应用程序。
答案 2 :(得分:0)
根据定义,加密强PRNG的随机性不应受虚拟化的影响。正如您所提到的,/ dev / random和/ dev / urandom [ref:http://en.wikipedia.org/wiki/Urandom/]之间的区别在于,如果系统收集的熵不足以产生所需的随机数量,/ dev / random上的读操作将会阻塞数据。您也可以写到/ dev / random,将自己的数据混合到熵池中。