[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