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

Michael Shigorin mike at altlinux.org
Mon Jul 5 14:11:30 MSK 2021


	Здравствуйте.
Коллеги, в связи с очередной невменяемостью апстрима 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

-- 
 ---- WBR, Michael Shigorin / http://altlinux.org
  ------ http://opennet.ru / http://anna-news.info


More information about the Make-initrd mailing list