entropy_avail
не указывает количество битов, доступных в / dev / random
. Он указывает оценку энтропии ядра в состоянии RNG, которое поддерживает / dev / random
. Эта оценка энтропии с математической точки зрения является довольно бессмысленной величиной; но Linux блокирует / dev / random
, если оценка энтропии слишком низкая.
Программа, считывающая из / dev / random
, блокируется до тех пор, пока значение в / proc / sys / kernel / random / entropy_avail
не станет больше, чем / proc / sys / kernel. / random / read_wakeup_threshold
. Чтение из / dev / random
потребляет энтропию со скоростью 8 бит на байт.
Но в любом случае вы не должны использовать / dev / random
. Вы должны использовать / dev / urandom
, который так же безопасен, в том числе для генерации криптографических ключей , и который не блокирует. Генерация случайных чисел не потребляет энтропию: как только в системе будет достаточно энтропии, этого хватит на время жизни Вселенной. ОС сохраняет начальное число ГСЧ в файл, поэтому, когда системе достаточно энтропии один раз, у нее будет достаточно энтропии даже после перезагрузки.
Единственные случаи, когда / dev / urandom
небезопасно, - это загрузка только что установленной системы в первый раз, в действующей системе, которая только что загрузилась (поэтому генерация криптографических ключей из действующей системы не лучшая идея!), или на недавно загруженном встроенном устройстве, у которого нет ни аппаратного ГСЧ, ни постоянной памяти. В таких системах подождите, пока / dev / random
не согласится выдать 16 байтов, чтобы убедиться, что пул энтропии накоплен.Затем используйте / dev / urandom
.