Назад | Перейти на главную страницу

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

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

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

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

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

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

Страница руководства 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