[make-initrd] q: фича для зарыбливания RNG

Alexey Gladkov gladkov.alexey at gmail.com
Mon Jul 5 14:45:11 MSK 2021


On Mon, Jul 05, 2021 at 02:11:30PM +0300, Michael Shigorin wrote:
> 	Здравствуйте.
> Коллеги, в связи с очередной невменяемостью апстрима systemd
> (по совместительству udevd), в v240 выразившейся в повышении
> требований к качеству псевдослучайных чисел на ранней стадии
> загрузки[1,2], и возникающих вследствие этого залипаний этой
> самой ранней стадии загрузки в ожидании каких-либо событий
> -- бывает достаточно нажать Shift или вставить USB-флэшку --
> предлагаю реализовать фичу, которая бы обеспечивала начальную
> инициализацию ядерного RNG с опорой на то, что при старте
> может "дребезжать" (особенно при наличии хоть какого-то RTC).
> 
> У нас тут образовался хак на скору руку, но он прямо по
> rc.sysinit и заведомо неоптимален, вследствие чего далее
> был предложен такой вид кусочка на шелле:
> 
> ---
> {
> # Initialize bash random seed using current time nanoseconds
> # to avoid possible kernel pool usage
> RANDOM=$((10#$(date "+%N") % 32768))
> seed=$( { dmesg; ls -l /var/log /proc; } | md5_bin | od -h )
> for ((i=0; i<64; i++)); do
>   echo $seed $RANDOM $(date "+%s%N") | md5_bin
> done > /dev/random
> unset i seed
> } &
> ---
> 
> или даже такой (но это ещё 128 форков):
> 
> ---
> {
> export \
>   RANDOM=$((10#$(date "+%N") % 32768)) \
>   seed=$( { dmesg; ls -l /var/log /proc; } | md5_bin | od -h )
> for ((i=0; i<64; i++)); do
>   ( echo $seed $RANDOM $(date "+%s%N"); ls -l /proc ) | md5_bin
> done > /dev/random
> unset i seed
> } &
> ---

Я уже видел похожий код и мы с тобой что-то подобное обсуждали. Я помню,
что тогда была проверка а нужно ли делать такой хак.

> Прилагаю хак и md5_bin.c, прошу совета:
> * стоит ли так делать;
> * как лучше собирать md5_bin имени ilyakurdyukov@;
> * куда лучше поместить скрипт.
> 
> [1] http://systemd.io/RANDOM_SEEDS
> [2] http://github.com/systemd/systemd/blob/v240/NEWS#L200

Насколько вижу это всё касается исключительно systemd. Насколько мне
известно udevd не требует наличия энтропии.

Разве не правильнее добавить код в systemd так как это будет на си и будет
оптимальнее ?

-- 
Rgrds, legion



More information about the Make-initrd mailing list