Когда я вхожу в систему, он зависает до завершения crng init

22

Когда я захожу с LightDM на моем ноутбуке под управлением Debian Unstable, он недавно начал зависать около 2 минут, пока не journalctlпоявится сообщение kernel: random: crng init done. Когда я нажимаю случайные клавиши на клавиатуре, когда она зависает, она входит в систему быстрее (около 10 секунд). Прежде чем у меня не было этой проблемы, есть ли способ, как я могу это исправить?

Редактировать: использовать linux-image-4.15.0-3-amd64вместо linux-image-4.16.0-1-amd64работает, но я не хочу использовать старое ядро.

wb9688
источник
1
Похоже, что-то съедает весь пул энтропии.
Кусалананда
1
Тема systemd-journaldи (заявленная) потребность в CSPRNG для посева обсуждались в последнее время на различных дискуссионных форумах. Смотрите, например, lists.freedesktop.org/archives/systemd-devel/2018-May/…
JdeBP
1
sudo apt install haveged sudo systemctl enable haveged
virusmxa

Ответы:

15

Похоже, какой-то компонент ваших системных блоков при попытке получить случайные данные из ядра (то есть чтение /dev/urandomили вызов getrandom()) из-за недостаточной доступной энтропии (случайности).

У меня нет готового объяснения того, почему проблема зависит от конкретной версии ядра или от того, какой компонент в вашей системе фактически блокируется, но независимо от основной причины,

Действительно, как указал Бигон в своем ответе , это, похоже, ошибка в ядре, представленная в 4.16:

Эта ошибка возникает в результате изменения «crng_init> 0» на «crng_init> 1» в этом коммите: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/ ? ID = 43838a23a05fbd13e47d750d3dfd77001536dd33

Это изменение непреднамеренно влияет на urandom_read, в результате чего состояние crng_init == 1 считается неинициализированным и вызывает блокировку urandom, несмотря на то, что это состояние существует специально для поддержки некриптографических потребностей во время загрузки: https://git.kernel.org/pub /scm/linux/kernel/git/torvalds/linux.git/tree/drivers/char/random.c#n1863

Возврат 43838a23a05f («random: fix crng_ready () test») исправляет ошибку (протестировано с 4.16.5-1), но это может вызвать проблемы безопасности (CVE-2018-1108 упоминается в 43838a23a05f). Я тестирую более локализованное исправление, которое должно быть более приемлемым для апстрима.

( https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=897572#82 )

... Тем не менее, вы можете попробовать использовать havegedили rng-toolsдля сбора энтропии быстрее.

intelfx
источник
4
Похоже, в Linux 4.16.4 некоторые вещи, связанные с CRNG, изменились из-за CVE-2018-1108. rng-toolsне работает на моем ноутбуке, потому что Intel Celeron N2840 не поддерживает AES-NI и, следовательно, не имеет встроенного TRNG.
wb9688
3
Последняя загрузка rng-toolsв Debian от 2011 года. У вас есть rng-tools5пакет, который был представлен недавно
Bigon
@Bigon TBH Я ничего не знаю о пакетах в Debian; Я им не пользуюсь. Это общий совет, а не специфичный для Debian.
intelfx
1
Подтверждено с Ubuntu 18.04 (бионический). Возникла эта проблема после dropbear-initramfsудаленной установки и разблокировки моего диска cryptroot-unlock. Просто apt install rng-toolsзаставляет вещи волшебным образом работать. Спасибо!
платный ботаник
Установка havegedработала на меня. У меня есть старый Intel Core 2 Duo, который не имеет генератора случайных чисел.
Балау
7

Это изменение (ошибка?) В ядре, смотрите: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=897572.

Чтобы смягчить эту установку rng-tools5 кажется, помогает. Обратите внимание, что я не знаю, влияет ли установка этого пакета на генерацию ключей криптографии.

Изменить: Видимо, обновление util-linux 2.32 должно исправить проблему

Бигон
источник
Нет, util-linux 2.32 не решает проблему для меня.
vinc17
5

Это ошибка ядра, которая может случиться с разными ядрами.

Запуск apt-get install rng-toolsкак suв терминале должен работать.

Джулио Дж
источник
Запуск apt-get install rng-tools, так как su в терминале устранил проблему с моим linux box.
Джованни Канниццаро
2

rng-toolsПомогает только в том случае, если ваша система имеет аппаратную поддержку случайных чисел, например, « Безопасный ключ » от Intel . Этот способ придуман с помощью Ivy Bridge . Мои системы с процессорами 1037u (основанные на ivy bridge) не имеют этой аппаратной поддержки. Поэтому rng-toolsне помогают.

На другой системе здесь с процессором Sandy Bridge i3 rng-toolsдействительно помочь. rngdСлужба должна быть запущена в самом начале процесса загрузки, для того , чтобы заполнить энтропию очереди. Это имеет место в последовательности загрузки с Ubuntu, я не знаю, верно ли это для других дистрибутивов, но вы можете узнать, как начало rngdрегистрируется в системном журнале.

Й. Швендер
источник
1
Это не совсем так. Вы могли бы работать , rngd -f -r /dev/urandomчтобы накачать /dev/urandomв /dev/random, хотя это не рекомендуется запускать его таким образом, это вариант ..
ОДС
2

Может также произойти после удаления раздела подкачки

Висит перед kernel: random: crng init done может также произойти после удаления раздела подкачки.

Если раздел подкачки удален, файл конфигурации /etc/initramfs-tools/conf.d/resume должен быть либо полностью пустым, либо прочитанным RESUME=. Удалить любой номер UUID. RESUME=NONEне является допустимым.

$ sudo vim /etc/initramfs-tools/conf.d/resume

Исходная файловая система RAM требует обновления, чтобы эти изменения вступили в силу:

$ sudo update-initramfs -u
Серж Строобандт
источник
1

В моем случае я использовал 4.19.0-4-amd64виртуальную машину Debian Buster (ядро ) на Proxmox VE.

Решением было добавить устройство VirtIO RNG в виртуальную машину . На Proxmox это делается путем редактирования файла конфигурации виртуальной машины .

В моем случае я отредактировал /etc/pve/qemu-server/110.confи добавил следующую строку:

args: -device virtio-rng-pci

Инструменты пользовательского пространства (например, rng-toolsили haveged) не были необходимы.

Джонатон Рейнхарт
источник