我偶然看到了一篇关于熵池问题的博客,了解到有一种叫做 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......
modprobe
3)确保此时启用或加载它:
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