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