Я наткнулся на блог, посвященный проблеме энтропийного пула, и узнал, что есть специальное оборудование, называемое 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
чтобы увидеть, что распознано.
Чтобы выяснить, у вас есть 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