[devel] rngd vs haveged vs crng (khwrngd)
Leonid Krivoshein
klark.devel на gmail.com
Вт Сен 3 10:37:07 MSK 2019
03.09.2019 02:59, Alexey V. Vissarionov пишет:
> [...]
>
> >> 2. к моменту начала использования недоверенного RNG пул должен
> >> быть заполнен данными из других источников.
> > Вот он ещё не заполнен. Почти... а уже надо!
>
> Если почти, то можно и недоверенный источник подмешивать.
В смысле: пул почти почти пуст.
> [...]
>
> > хотяи с заданными пороговыми значениями, чтобы число бит на
> > выходе не было меньше реальной энтропии на входе.
>
> Дядя, ты как сам-то? Если не меньше - значит, строго равно (ибо
Конечно, оговорка по Фрейду: s/не меньше/не больше/ :)
> [...]
>
> > Единственное, что делается ДО -- инициализация devtmpfs.
>
> Вроде бы достаточно очевидно, что devtmpfs_mount() выполняется до
> run_init_process(), но после mount_block_root()
Инициализация экземпляра файловой системы внутри ядра и монтирование её
в userspace -- две разные вещи. Монтирование /dev в userspace
инициируется процессом с PID 1 уже после того, как ядро
проинициализировало initramfs, devtpmfs, нашло и запустило /sbin/init.
Никаких устройств на этом этапе ещё нет, ramfs/tpmfs в ядро
вкомпилируются. Даже если не указывать путь к собственному initramfs,
оно тоже в ядре имеется всегда. Пустое, без /sbin/init, чтобы отработал
твой любимый fallback с /dev/md0.
> > К моменту запуска /sbin/init может быть даже не загружено ещё
> > никаких модулей.
>
> И это очень плохо. Потому что очень многие из них используют как
> минимум один способ (из четырех возможных) помочь ядерному ГСЧ
> набрать энтропию перед run_init_process()
К счастью, в initramfs у нас не systemd, иначе с проблемой мы
сталкивались бы раньше и на большем охвате железа. systemd только так
генерирует UUID'ы для сервисов, множество временных файлов, использует
внутренние хэш-таблицы и случайные числа для всевозможных "сетевых"
нужд. Так что плохо, да, но может быть ещё хуже. Полагаю, тем, у кого
нет systemd, эта проблема неведома. На SysV-init вероятность запуска
сервиса, требующего CRNG, примерно равна нулю.
> > Процесс асинхронной инициализации хорошо виден в dmesg и
> > journalctl. У нас, правда, тут не systemd сейчас стартует, а
> > другой /sbin/init. Но надо понимать, что прохождение stage1
> > зависит от железа и конфигурации системы.
>
> Что ты в данном случае называешь stage1?
initrafms (initrd) -- первая стадия загрузки.
> [...]
>
> > Блокировку на этапе загрузки можно рассматривать не только как
> > баг юзабилити. В ряде задач это тоже CVE, вплоть до DoS для
> > всего HA-кластера. В конце концов, подкопив энтропии, можно
> > обновить состояние инициализации CRNG.
>
> Да: низкоэнтропийная криптография - это уязвимость. Исправлять ее
> будем, или как обычно?
>
> > А терпеть тормоза при загрузке можно далеко не во всех сценариях.
>
> При вводе системы в промышленную эксплуатацию сервер должен быть
> запущен позавчера.
--
Best regards,
Leonid Krivoshein.
Подробная информация о списке рассылки Devel