различия между random и urandom
Я пытаюсь выяснить различия между /dev/random
и /dev/urandom
файлы
- каковы различия между
/dev/random
и/dev/urandom
? - когда я должен использовать их?
- когда я не должен использовать их?
4 ответов
используя /dev/random
может потребоваться ожидание результата, поскольку он использует так называемый энтропия бассейн, где случайные данные могут быть недоступны на данный момент.
/dev/urandom
возвращает столько байтов, сколько запросил пользователь, и поэтому он менее случайный, чем /dev/random
.
как можно прочитать с man-страницы:
случайные
при чтении
/dev/random
устройство будет возвращать только случайные байты в оценочное число бит шума в пуле энтропии./dev/random
следует использовать, если требуется очень высокое качество рандоме как одноразовая пусковая площадка или ключевое поколение. Когда пул энтропии пусто, читает из/dev/random
будет пока шум окружающей среды собран.
urandom
чтение из файла
/dev/urandom
устройство не будет блокировать ждем еще энтропия. В результате, если в пуле, возвращаемые значения теоретически уязвимы для шифрования, атаки на алгоритмы, используемые драйвером. Знание о том, как это сделать, не доступно в текущей несекретной литературе, но теоретически возможно, что такая атака может существовать. Если это проблема в вашем приложении, используйте/dev/random
вместо.
для криптографических целей вы действительно должны использовать /dev/random
из-за природы данных он возвращает. Можно ждать должны считается приемлемым компромиссом в интересах безопасности, ИМО.
когда вам нужны случайные данные быстро, вы должны использовать /dev/urandom
конечно.
всегда используйте /dev / urandom.
/dev / urandom и/dev / random используют один и тот же генератор случайных чисел. Они оба из одного пула. Они оба дадут одинаково случайное число произвольного размера. Они оба могут дать бесконечное количество случайных чисел, только с 256-битным семян. Пока начальное семя имеет 256 бит энтропии, вы можете иметь бесконечный запас произвольно длинных случайных чисел. Вы ничего не получаете от использования /dev/random. Тот факт, что два устройства-это недостаток в API Linux.
Если вас беспокоит энтропия, использование /dev / random не исправит этого. Но это замедлит ваше приложение, не генерируя числа больше случайных, чем /dev/urandom. И если вас не волнует энтропия, почему вы вообще используете /dev / random?
вот гораздо лучшее / глубокое объяснение того, почему вы всегда должны использовать /dev/ urandom:http://www.2uo.de/myths-about-urandom/
в чем разница между
/dev/random
и/dev/urandom
?
/dev/random
и /dev/urandom
интерфейсы к генератору случайных чисел ядра:
- чтение возвращает поток случайных байтов, достаточно сильный для использования в криптографии
- запись в них предоставит данные ядра для обновления пула энтропии
когда дело доходит до различий, это зависит от операции система:
- в Linux, чтение из
/dev/random
может блокировать, что значительно ограничивает его использование на практике - на FreeBSD их нет.
/dev/urandom
- это просто символическая ссылка на/dev/random
.
когда я должен использовать их? Когда я не должен их использовать?
очень трудно найти дело, где вы должны использовать /dev/random
над /dev/urandom
.
опасность блокировка:
- это реальная проблема, с которой вам придется столкнуться, когда вы решите использовать
/dev/random
. Для одиночных использований какssh-keygen
должно быть нормально подождать несколько секунд, но для большинства других ситуаций это не будет вариантом. - если вы используете
/dev/random
, вы должны открыть его в режиме nonblocking и предоставить какое-то уведомление пользователя, если желаемая энтропия не сразу доступный.
безопасность:
- на FreeBSD разницы все равно нет, но и в Linux
/dev/urandom
считается безопасным почти для всех практических случаев (e.g,является ли rand из /dev/urandom безопасным для ключа входа? и мифы о / dev / urandom). - ситуации, в которых это может иметь значение, - это крайние случаи, такие как новая установка Linux. Цитировать из Linux man страница:
на
/dev/random
интерфейс считается устаревшим интерфейсом, и/dev/urandom
является предпочтительным и достаточным в все случаи использования, за исключением приложений, которые требуют случайности во время ранней загрузки; для вместо этих приложений необходимо использовать getrandom(2), поскольку он будет блокировать до инициализации пула энтропии.если семенной файл сохраняется при перезагрузке, как рекомендуется ниже (все основные Linux дистрибутивы сделали это по крайней мере, с 2000 года), выход криптографически защищен от злоумышленников без локального корневого доступа, как как только он перезагружается в последовательности загрузки, и вполне подходит для шифрования ключей сеанса. Поскольку читает от
/dev/random
может блокировать, пользователи обычно хотят открыть его в режиме nonblocking (или выполнить чтение с таймаутом), и предоставить какое-то уведомление пользователя, если желаемая энтропия не сразу доступный.
рекомендация
как правило, /dev/urandom
следует использовать для всего, кроме долгоживущих ключей GPG/SSL/SSH.
короткий ответ:
использовать /dev/urandom
Ответ
они оба питаются одним и тем же криптографически безопасным генератором псевдослучайных чисел (CSPRNG). Дело в том, что /dev/random
ожидает энтропии (или, более конкретно, ждет, пока оценка системы ее энтропии достигнет соответствующего уровня) имеет значение только при использовании информационно-теоретически безопасного алгоритма, в отличие от вычислительно безопасного алгоритма. Первый включает алгоритмы, которые вы, вероятно, не используете, такие как секретный обмен Шамира и одноразовая панель. Последний содержит алгоритмы, которые вы действительно используете и заботитесь о них, такие как AES, RSA, Diffie-Hellman, OpenSSL, GnuTLS и т. д.
поэтому не имеет значения, используете ли вы числа из /dev/random
поскольку они все равно выкачиваются из CSPRNG, и "теоретически возможно" сломать алгоритмы, которые вы, вероятно, используете с ними в любом случае.
наконец, что "теоретически возможный" бит означает именно это. В этом случае это означает использование всех вычислительных мощностей в мире, за то время, что Вселенная существовала, чтобы взломать приложение.
поэтому нет смысла использовать /dev/random
чтобы использовать /dev/urandom