Сколько битов энтропии на байт считывается из /dev/random и /dev/urandom?
Приблизительно, сколько битов энтропии содержится в каждом байте, считанном из /dev/random и /dev/urandom? Данные из /dev/random используют генератор случайных чисел ядра, в то время как / dev / urandom использует CPRNG, поэтому, хотя количество считываемых байтов из каждого из них может быть одинаковым, количество фактических считанных энтропий из каждого не будет одинаковым.
Существуют ли лучшие практики и / или исследования, оценивающие, сколько энтропии обычно содержится в каждом байте данных, считанных из этих источников?
Например, если мне нужно 80 бит энтропии для безопасного токена, и токен генерируется путем чтения данных из dev/urandom, и если бы я знал, что каждый байт данных, считанных из / dev/urandom, будет содержать приблизительно 4 бита энтропия, я мог прочитать 20 байтов данных и использовать хеш-функцию для генерации токена.
2 ответа
Пока CPRNG когда-либо был правильно посеян, /dev/random
а также /dev/urandom
не имеют заметных различий в поведении. Это как разница между водой и святой водой - есть разница в том, как вы их делаете, но ни одно испытание не может отличить одно от другого.
Нет смысла получать больше байтов данных из одного CPRNG и хэшировать их. Это именно то, что CPRNG уже делает внутри страны.
Страница man 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