различия между random и urandom

Я пытаюсь выяснить различия между /dev/random и /dev/urandom файлы

  1. каковы различия между /dev/random и /dev/urandom?
  2. когда я должен использовать их?
  3. когда я не должен использовать их?

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 и предоставить какое-то уведомление пользователя, если желаемая энтропия не сразу доступный.

безопасность:

на /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

источник

1 2 3