Как я могу узнать, есть ли на моей машине аппаратная поддержка RNG?
Я наткнулся на блог, посвященный проблеме энтропийного пула, и узнал, что есть специальное оборудование, называемое RNG. Я прочитал эту страницу ядра RNG, но мне все еще интересно, есть ли способ узнать, поддерживает ли мой сервер аппаратный RNG или нет.
2 ответа
Существует два вероятных типа "реального" аппаратного RNG: процессор на базе процессора и чипсет или PCI. (Есть также несколько аппаратных RNG USB, но я подозреваю, что вы бы заметили один из них;-)
Следующее является специфичным для Linux.
Для процессора на основе вы можете проверить /proc/cpuinfo
для подсказок, предположим, что ваше ядро достаточно новое, чтобы обнаружить их. Для процессоров Intel флаг rdrand
Более подробная информация здесь: https://unix.stackexchange.com/questions/43539/what-do-the-flags-in-proc-cpuinfo-mean
Для чипсетов, если у вас есть CONFIG_HW_RANDOM
включена в вашем ядре и поддержка каждого поставщика CONFIG_HW_RANDOM_INTEL
..._AMD
и т.д., тогда ваши загрузочные сообщения должны указывать, были ли они найдены (например, "обнаружен RNG Intel 82802"). Если они присутствуют в виде модулей, вы можете попробовать (modprobe intel-rng
), чтобы увидеть, загружается ли он, "Нет такого устройства" означает отсутствие обнаруженного оборудования. Не все драйверы постоянно печатают "Обнаружен ГСЧ" или "Не обнаружен", поэтому вы можете прочитать источники (/drivers/char/hw_random/
каталог исходного кода ядра).
Для других вы можете проверить lspci -v
чтобы увидеть, что узнал.
Для последних ядер вы можете проверить здесь:
$ cat /sys/devices/virtual/misc/hw_random/rng_current
virtio_rng.0
Если этот файл существует и не говорит none, то в основном у вас есть rng. (в данном случае это виртуальная машина, где хост предоставляет случайный источник)
Также, чтобы увидеть, что доступно (этот пример на современной машине Intel, также с подключенным аппаратным rng ChaosKey)
$ 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 есть интересная предыстория.
Чтобы узнать, у вас есть 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