Answers:
有两种“实际”硬件RNG类型:基于CPU的RNG和基于芯片组或PCI的RNG。(也有一些USB硬件RNG,但我怀疑您会注意到其中的一个;-)
以下是特定于Linux的。
对于基于CPU的/proc/cpuinfo
内核,您可以检查线索,假设您的内核足够新以检测它们。对于Intel 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
以查看被识别的内容。
要查明您已RNG
执行以下操作:
1)列出名称中带有“ rng”的所有模块:
cat /proc/modules | grep -i rng
2)如果有的话,会得到这样的结果
tpm_rng 16384 0 - Live 0xffffff......
3)确保modprobe
此时使用启用或加载它:
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
在最近的内核上,您可以在这里检查:
$ cat /sys/devices/virtual/misc/hw_random/rng_current
virtio_rng.0
如果该文件存在并且不说什么,那么基本上您会收到一个rng。(在这种情况下,它是主机提供随机源的虚拟机)
还要查看可用的功能(此示例来自现代intel机器,也连接了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有一些有趣的背景