Сколько битов энтропии на побайтовое чтение от/dev/random и/dev/urandom?

Приблизительно, сколько битов энтропии содержится в каждом побайтовом чтении от/dev/random и/dev/urandom? Данные из/dev/random используют генератор случайных чисел ядра, в то время как/dev/urandom использует CPRNG поэтому, хотя число байтов, считанных от каждого, может быть идентичным, количество фактической энтропии, считанной от каждого, не было бы идентично.

Есть ли какие-либо лучшие практики и/или исследования, оценивающие, сколько энтропии обычно содержится в каждом байте данных, считанных с этих источников?

Например, если бы мне были нужны 80 битов энтропии для безопасного маркера, и маркер был сгенерирован путем чтения данных с dev/urandom, и если бы я знал, что каждый байт данных, считанных с/dev/urandom, будет содержать приблизительно 4 бита энтропии, то я мог считать 20 байтов данных и использовать хеш-функцию для генерации маркера.

1
задан 31 December 2014 в 21:42
2 ответа

Пока CPRNG когда-либо был правильно засеян, / dev / random и / dev / urandom не имеют заметных различий в поведении. Это похоже на разницу между водой и святой водой - есть разница в том, как вы их делаете, но никакой тест не может отличить одно от другого.

Нет смысла получать больше байтов данных из одного CPRNG и хеширования их. Именно это CPRNG уже делает внутри.

3
ответ дан 3 December 2019 в 17:06

Страница руководства man 4 random содержит довольно много полезной информации о / dev / random и / dev / urandom .

Если я поймите это правильно, идея состоит в том, что пока общая энтропия в вашей системе достаточно высока, это не имеет значения: получение большего количества данных из / dev / urandom , чем было энтропии, не должно быть проблемой, так как использование того факта, что «фактическая энтропия» в, например, 2000 бит, которые вы используете, составляет всего 512 бит, потребуется разбить CPRNG или угадать 512 бит, что по-прежнему намного больше, чем когда-либо может быть выполнено с помощью методов грубой силы .

Если вы действительно хотите измерить эффект от использования данных с любого из этих двух устройств в пуле энтропии, вы можете прочитать содержимое / proc / sys / kernel / random / entropy_avail , которое содержит текущее количество бит энтропии:

cat /proc/sys/kernel/random/entropy_avail
2
ответ дан 3 December 2019 в 17:06