ЦП - этоAMD GX-412TC SOC:
GX-412TC GE412TIYJ44JB 4 6 Вт 2 МБ 1,0 ГГц/ 1,4 ГГц N/AN/A DDR-1333 0-90°C
который не имеет rdrand
:
grep rdrand /proc/cpuinfo
# nothing
После загрузки компьютера я вижу следующие сообщения syslog
:
kernel: random: dd: uninitialized urandom read (512 bytes read)
kernel: random: cryptsetup: uninitialized urandom read (32 bytes read)
Что именно означают эти сообщения и что я могу с этим сделать?
Означает ли это , dd
что и cryptsetup
попытаться прочитать из /dev/urandom
, но энтропии недостаточно?
Я использую haveged
демон, но он запускается поздно в процессе загрузки, после появления этого сообщения.
Вот последовательность запуска моего загрузочного скрипта:
/etc/rcS.d/S01hostname.sh
/etc/rcS.d/S01mountkernfs.sh
/etc/rcS.d/S02mountdevsubfs.sh
/etc/rcS.d/S03checkroot.sh
/etc/rcS.d/S04checkfs.sh
/etc/rcS.d/S05mountall.sh
/etc/rcS.d/S06bootmisc.sh
/etc/rcS.d/S06procps
/etc/rcS.d/S06urandom
/etc/rcS.d/S07crypto-swap
/etc/rc2.d/S01haveged
/etc/rc2.d/S01networking
/etc/rc2.d/S04rsyslog
/etc/rc2.d/S05cron
/etc/rc2.d/S05ssh
Сообщения в системном журнале поступают из этих двух скриптов:
/etc/rcS.d/S06urandom -> dd
/etc/rcS.d/S07crypto-swap -> cryptsetup
Следует ли haveged
начинать раньше urandom
?
Я использую Debian 10.
Также я должен добавить, что эта машина — голая плата, без клавиатуры. Единственный интерфейс — последовательная консоль. Я думаю, что это влияет на доступную энтропию, и это причина, по которой я установил ее haveged
в первую очередь. Без haveged
демон sshd
не запустился бы в течение нескольких минут, потому что у него недостаточно энтропии.
решение1
Ваш диагноз верен: была предпринята попытка чтения пустого пула энтропии. Это "время загрузки энтропийное голодание".
Вы можете использовать systemd-boot, если у вас система EFI,проигнорируйте предупреждение(вы используете предсказуемую криптовалюту, но вбольшинствоиспользуйте варианты, которые все равно лучше, чем полное отсутствие криптографии), или попробуйте кредитовать энтропию из альтернативных источников -если доступно- добавление этого в командную строку ядра
rng_core.default_quality=X
(начните с X=1000 и идите вниз).
Существуют и другие методы сбора энтропии; SOC может иметь некоторые доступные пины, и есть модули аппаратных драйверов, которые позволяют собирать энтропию с них. Затем остается только подключить подходящую транзисторно-резисторную установку (или, в некоторых случаях, электретный микрофон) для сбора некоторого теплового шума.
С другой стороны, ядра серии 5.4+ имеют более эффективный сбор энтропии, которого может быть достаточно.
решение2
Для работы haveged он должен быть совместим с вашим ядром — есть проблема, когда haveged ничего не делает в версиях ядра >=5.x, см.hasged все еще полезен/актуален? #57на GitHub.
Разработчик был настолько любезен, что заново представил функционал, но эти исправления должны быть выпущены и затем сначала добавлены в различные дистрибутивы... старая версия либо вообще не запустится, либо не будет ничего делать, даже если она запущена (проверьте с помощью strace
), поскольку пул энтропии ядра, похоже, больше не испытывает недостатка — но crng init по какой-то причине все еще занимает время.
Он также должен запускаться очень рано, поэтому если вы используете initramfs, то вам также нужно запустить haveged в initramfs, за некоторое время до использования случайного устройства. В традиционной системе init haveged должен запускаться как можно скорее /proc
/sys
/dev
.
Я не уверен, сколько времени требуется haveged, чтобы отправить энтропию ядру... он должен сначала собрать случайность самостоятельно и запустить несколько качественных тестов. В моем последнем тесте (с пропатченным haveged) была задержка примерно в полсекунды между запуском haveged и отчетом ядра random: crng init done
.
В дополнение к haveged вы также можете рассмотреть возможность сохранения/восстановления случайного начального числа, и если у вас есть сеть, небольшой трафик также может помочь ядру собрать некоторую энтропию.