[devel] rngd vs haveged vs crng

Leonid Krivoshein klark.devel на gmail.com
Пт Апр 26 03:01:51 MSK 2019


25.04.2019 22:26, Michael Shigorin пишет:
> On Thu, Apr 25, 2019 at 10:21:20PM +0300, Denis Medvedev wrote:
>> Кстати, довольно случайным, но полезным явилось перенесение
>> генерации hostkeys из первого старта системы в ее инсталлер,
>> в конец его работы - в это время в системе уже полно энтропии.
> Это явно есть смысл утащить в installer (не забыв,
> что sshd в целевой системе может и не быть, разумеется).

Хотя вот это было написано не так давно:

https://www.altlinux.org/Rescue/Recovery#Привязка_к_новому_"железу"_и_установка_загрузчика

Все ноуты для школ и другие крупные развёртывания делались по той же 
схеме: ssh-keygen -A вызывался в самом конце процедуры. Мы с год назад 
обсуждали, что у нас в стартовых скриптах sshd эта команда запускается 
при первом старте в самом начале, но тогда решили оставить, как есть, 
потому что, если ключей нет, их надо первый раз сгененрировать. 
Пользуясь случаем, решил об этом напомнить -- есть повод для пересмотра 
такого поведения, раз некоторые считают, что на старте этого делать не 
следует.

Однако замечу: по факту ssh-keygen -A берёт из ядра всего 32 байта через 
getrandom() с флагом 0. Делает он это для инициализации собственного 
ГПСЧ seed_rng(), строка #2463. Собран он у нас с libcrypto (OpenSSL). 
Весь выхлоп этой программы -- отнюдь не первородные Теодоровские нули и 
единицы! Да и getrandom() не просто синтаксический сахар, если кто 
забыл. Флаг 0 означает блокируемое чтение из не блокируемого 
/dev/urandom,  для запрошенных 32 байт это не прерываемый и не 
блокируемый вызов. В детали не углублялся, если кто просветит, буду 
признателен! Думаю, если на старте тут и пожирается реальная энтропия, 
то какие-то сущие крохи.

Если мы не хотим вкорячивать rngd/haveged, чтобы не ухудшать 
криптостойкость большинства систем, и одновременно хотим искоренить 
проблему подвисания на раннем старте в отдельных редких случаях 
(сизифная сборка JeOS -- хорошо воспроизводимый пример, хотя может это 
нечто другое), нужно искать потребителей энтропии на раннем старте и 
решать, что с ними делать и возможно ли их вызов немного отложить, 
сделать остальное менее зависимым от них, итп. И вопрос к знатокам: как 
это лучше дебажить? auditd? fanotify?


-- 
Best regards,
Leonid Krivoshein.



Подробная информация о списке рассылки Devel