Энтони уже объяснил, что запись в / dev / random
не увеличивает счетчик энтропии, и показал, как RNDADDENTROPY ioctl (см. ] random (4) ) можно использовать для оценки энтропии. Очевидно, что это не совсем безопасно, поэтому есть альтернатива, когда доступен аппаратный генератор случайных чисел.
Следующие реализации берут 512 байт (4096 бит) случайности из / dev / hwrng
и направляют его в пул энтропии (зачисляя 4 бита энтропии на байт, это мой произвольный выбор) . После этого он вызовет системный вызов select (2) для блокировки при заполнении пула энтропии (описано в справочной странице random (4) ).
Версия Python:
import fcntl, select, struct
with open('/dev/hwrng', 'rb') as hw, open('/dev/random') as rnd:
while True:
d = hw.read(512)
fcntl.ioctl(rnd, 0x40085203, struct.pack('ii', 4 * len(d), len(d)) + d)
select.select([], [rnd], [])
Поскольку в iso Arch Linux не был установлен Python, вот и версия Perl:
open my $hw, "
Вероятно, это программа rngd (часть rng-tools ) имеет (непроверенный), за исключением того, что он использует инструменты (Python или Perl), которые уже широко доступны.