[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