我如何知道我的机器是否有 RNG 硬件支持?

我如何知道我的机器是否有 RNG 硬件支持?

我偶然看到了一篇关于熵池问题的博客,了解到有一种叫做 RNG 的特殊硬件。我读过这篇文章内核随机数生成器 (RNG)页面,但我仍然想知道是否有办法找出我的服务器是否支持硬件 RNG。

答案1

有两种可能类型的“真实”硬件 RNG:基于 CPU 的 RNG 和基于芯片组或 PCI 的 RNG。(还有一些 USB 硬件 RNG,但我想您已经注意到其中一种 ;-)

以下是Linux特定的。

对于基于 CPU 的,您可以检查/proc/cpuinfo线索,假设您的内核足够新,可以检测到它们。对于英特尔 CPU,标志是rdrand,更多信息请见此处:https://unix.stackexchange.com/questions/43539/what-do-the-flags-in-proc-cpuinfo-mean

对于芯片组,如果你已经CONFIG_HW_RANDOM在内核中启用了每个供应商的支持CONFIG_HW_RANDOM_INTEL ..._AMD等。那么您的启动消息应该会指示是否找到了任何内容(例如“检测到 Intel 82802 RNG”)。如果它们作为模块存在,您可以尝试(modprobe intel-rng)查看它是否加载,“没有这样的设备”表示没有检测到硬件。并非所有驱动程序都会一致地打印“检测到 RNG”或“未检测到”,因此您可能最终会阅读源代码(/drivers/char/hw_random/内核源代码目录)。

对于其他人,您可以检查lspci -v一下是否可以识别。

答案2

对于最近的内核,你可以在这里检查:

$ cat /sys/devices/virtual/misc/hw_random/rng_current 
virtio_rng.0

如果该文件存在并且没有显示无,那么基本上你就有一个 rng。(在这种情况下,它是一个主机提供随机源的虚拟机)

还可以查看可用的内容(此示例来自现代英特尔机器,还连接了 ChaosKey 硬件 rng)

$ cat /sys/devices/virtual/misc/hw_random/rng_available 
ChaosKey-hw-1.0-sw-1.9-001900375346430b20333632 tpm-rng-0 

因此 ChaosKey 和 tpm 都可用。

有一些有趣的背景https://daniel-lange.com/archives/152-hello-buster.html

答案3

要找出答案,您必须RNG执行以下操作:

1)列出名称中带有“rng”的所有模块:

cat /proc/modules | grep -i rng

2)如果你有,你会得到这样的结果

tpm_rng 16384 0 - Live 0xffffff......

modprobe3)确保此时启用或加载它:

modprobe tpm_rng

更新:关于步骤(1),对我来说modprobe -l在 ubuntu 16 中不起作用,这就是为什么我尝试在“/proc/modules”中寻找,但如果它对你有用,那么就没问题了。最近我搜索了一下,发现所有模块都驻留在里面,/lib/modules/$(uname -r)所以你也可以使用以下更好的方法:

cat /lib/modules/$(uname -r)/modules.dep | grep -i rng.*.ko

相关内容