您可能知道,在虚拟机上生成熵并不像在“普通”电脑上那么容易。即使使用正确的工具,在虚拟机上生成 gpg-key 也需要一段时间。
还有许多其他加密函数不像 gpg 那样具有熵意识。
那么是否可以说虚拟机上的加密不太安全呢?
答案1
首先,我要说一下,我并不是一个安全专家。
由于 gpg 密钥创建使用/dev/random
随机数生成器,因此它在虚拟机上和在真实机器上一样安全。
/dev/random
是一个阻止设备,并且将停止提供超出可用量的任何随机性。 您可以通过以下方式检查可用的随机性
cat /proc/sys/kernel/random/entropy_avail
(应该在2000)
在虚拟机上,由于无法访问硬件,可用的随机性确实低于真实机器。
您可以通过以下方式增加熵:熵密钥和/或切换到非虚拟化机器。
有一个好文章虚拟机上的熵可用。不幸的是两个都 部分该文章目前仅在 Google 缓存中可用。
熵对任何 SSL/TLS 加密都有进一步的影响。因此,使用/dev/urandom
或任何非真正随机的源确实有影响应用程序的安全性。
关于/dev/urandom
与真正随机性相比的可靠性如何,
我无法给你一个合适的答案,抱歉。
有关此主题的更多信息,您可以访问http://security.stackexchange.com和/或阅读例如这个帖子
答案2
是的,大多数情况下,虚拟机上的加密不如“真实”服务器上的加密安全。
后者至少可以从一些实际硬件中收集熵。事实上,在大多数情况下,硬件的运行与某种物理现象有关,这些物理现象总是会受到微小变化的影响,而且据所有人说都是随机的。由于服务器通常会运行很长时间而不需要重置,因此最终产生的熵池将具有足够的质量。
虚拟机面临三个问题。
- 他们看到的硬件并不是真实的,因此几乎不受任何物理现象的影响。他们将能够以更慢的方式收集熵。
- 虚拟机重置的频率比真实服务器高得多,它们甚至可能没有时间收集足够的熵(这就是为什么最好在关闭时保存当前熵状态,并在重新启动时使用它来提供熵池)。
- 虽然真正的服务器可能有机会确定何时处理坏的熵池,虚拟机将更容易在熵池是好的印象下运行(因为它是从 HW 收集的,但不知道 HW 不是真实的),而实际上它是坏的。
最好的解决方案是让虚拟机放弃并意识到它看到的硬件是一个糟糕的熵源。然后,安排一个本地网络服务来分发高质量的熵(参见熵经纪人)“熵服务器”可以从通用硬件(在这种情况下它必须运行足够长的时间,并且必须有一个合适的操作系统)或特定的加密硬件(TPM 芯片、VIA Padlock 芯片等)中提取随机性。
使用此类服务的虚拟机甚至可能更多的比刚刚启动的“真实”服务器更安全(加密方面)。