我怎么知道我的机器是否支持RNG硬件?


11

我遇到了一个有关熵池问题的博客,并了解到有一种称为RNG的特殊硬件。我已经阅读了该内核RNG页面,但是我仍然想知道是否有一种方法可以确定我的服务器是否支持硬件RNG。

Answers:


8

有两种“实际”硬件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以查看被识别的内容。


1

要查明您已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

1

在最近的内核上,您可以在这里检查:

$ 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有一些有趣的背景

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.