我目前正在开发一个需要使用该gpg
工具创建 GPG 密钥对的应用程序。不幸的是,如果系统上没有足够的熵/随机性来生成密钥对,则此工具需要很长时间才能生成密钥对。一个常见的解决方法是安装rng-tools
软件包,因为它在 Debian 系统上被调用。这允许gpg
利用真正的硬件随机数生成器。在操作系统只能访问虚拟化硬件的虚拟机/虚拟专用服务器上使用(从安全角度来看)是否安全?生成的密钥是否足够随机?
在虚拟机上使用 rng-tools 是否安全?
所有这些都取决于 VM 可用的硬件(物理或虚拟)。rng-tools 只能从可用的资源中获取熵。如果您的虚拟机没有可用的熵源供 rng-tools 使用,那么您的情况也不会好过。
然而,一些虚拟化系统能够通过多种机制使来自硬件的熵可供来宾使用。在某些情况下,您可以将硬件设备直接传递给您的访客(USB、PCI 等)并让 rng-tools 使用该设备。在大多数情况下,这是不可能的。
virtio 准虚拟驱动程序从硬件控制域(运行 KVM 的 Linux 内核,Xen 中的 dom0)向来宾 VM 公开各种 IO 设备。有一个 virtio-rng 设备允许将熵源暴露给客人。据我所知,这在 KVM 上相当成熟,但 Xen 支持似乎正在进行中:http ://wiki.xen.org/wiki/Virtio_On_Xen
虽然 virtio 很棒,但它要求来宾具有 virtio 驱动程序,因此要知道它是一个 VM(半虚拟化)。较新的硬件(如 Intel IVB 和 HSW 芯片)具有特定的 CPU 指令,可提供来自片上 RNG 的随机数,这些指令可以暴露给来宾 VM。您可以使用 CPUID 探测这些指令的可用性。
这是一个简短的概述和足够的信息。如果您对更多细节感兴趣,这里有关于这个主题的精彩讨论:http: //log.amitshah.net/2013/01/about-random-numbers-and-virtual-machines/
编辑:对不起,我想我提供了很多数据,但从未真正回答过这个问题。无论如何,这是我对实际问题的看法:
在操作系统只能访问虚拟化硬件的虚拟机/虚拟专用服务器上使用(从安全角度来看)是否安全?生成的密钥是否足够随机?
谈到安全性,没有什么比认为您的配置不安全时更具破坏性的了。当 rng-tools 没有给您带来任何好处时(没有可供提取的硬件熵源),使用 rng-tools 很可能会让您认为您正在生成高质量的随机数(密钥材料?),而实际上您并没有。所以我不认为在你的虚拟机中没有熵源的情况下使用 rng-tools 会降低生成的数字的随机性,但它可能会让你认为你正在生成高质量的密钥,而实际上并非如此。
我的建议是使用 rng-tools 守护程序,但只有在验证您有可用的熵源之后才能使用它。
另一个答案有点不准确。
如果您在 Ivy Bridge(或更新版本)或任何最新的 AMD 处理器上运行,则 VM 可以使用 CPU 指令RDRAND
。这是真正的硬件熵,它适用于所有虚拟机(甚至在云中)。
我大多同意@flihp,但这里和那里的一些“教程”建议使用 /dev/urandom 作为硬件熵源。
这是完全错误的,因为它将伪随机数注入“真正的”随机源,而后者又将用于生成更多的伪随机数等。
在这种情况下,我认为使用 rng-tools 会使事情变得更糟。
另见: https ://wiki.archlinux.org/index.php/Rng-tools 和https://lwn.net/Articles/525459/