Различия между случайными и урбандами

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

  • В чем разница между /dev/random и /dev/urandom?
  • Когда следует использовать их?
  • Когда я не должен их использовать?

Ответ 1

Использование /dev/random может потребовать ожидания результата, поскольку он использует так называемый пул энтропии, где случайные данные могут быть недоступны в данный момент.

/dev/urandom возвращает столько байтов, сколько запрошено пользователем, и поэтому оно менее случайное, чем /dev/random.

Как можно прочитать на странице руководства:

случайное

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

urandom

Чтение с устройства /dev/urandom не будет блокировать ожидание большего энтропия. В результате, если в энтропии недостаточно энтропии энтропийный пул, возвращаемые значения теоретически уязвимы для криптографическая атака на алгоритмы, используемые драйвером. Знание о том, как это сделать, недоступно в текущем неклассифицированном литературы, но теоретически возможно, что такая атака может существовать. Если это относится к вашему приложению, используйте /dev/randomвместо этого.

Для криптографических целей вы действительно должны использовать /dev/random из-за природы возвращаемых данных. Возможное ожидание должно рассматриваться как приемлемый компромисс ради безопасности, ИМО.

Если вам нужны случайные данные fast, вы должны использовать /dev/urandom, конечно.

Источник: Wikipedia страница, man страница

Ответ 2

Всегда используйте /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/

Ответ 3

В чем разница между /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, вы должны открыть его в неблокирующем режиме и предоставить какое-то пользовательское уведомление, если желаемая энтропия не будет немедленно доступна.

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

  • В FreeBSD нет никакой разницы, но также и в Linux /dev/urandom считается безопасным практически для всех практических случаев (например, Является ли rand из /dev/urandom безопасным для ключ входа? и Мифы о /dev/urandom).
  • Ситуации, в которых это может повлиять, - это крайние случаи, такие как новая установка Linux. Чтобы ссылаться на страницу руководства Linux:

Интерфейс /dev/random считается устаревшим интерфейсом, а /dev/urandom является предпочтительным и достаточным в        все варианты использования, за исключением приложений, требующих случайности во время ранней загрузки; для        эти приложения, getrandom (2) должны использоваться вместо этого, потому что они будут блокироваться до тех пор, пока не будет инициализирован пул энтропии.

Если начальный файл сохраняется при перезагрузках, как рекомендовано ниже (все основные дистрибутивы Linux сделали это        с 2000 по меньшей мере), выход криптографически защищен от злоумышленников без локального корневого доступа, поскольку        в скором времени, когда он перезагружается в последовательности загрузки и отлично подходит для ключей сеанса сетевого шифрования.        Так как чтение из /dev/random может блокироваться, пользователи обычно захотят открыть его в неблокирующем режиме (или выполнить        чтение с тайм-аутом) и предоставление своего рода уведомления пользователя, если желаемая энтропия не доступна сразу.

Рекомендация

Как правило, /dev/urandom следует использовать для всех, кроме долгоживущих ключей GPG/SSL/SSH.

Ответ 4

Короткий ответ

Используйте /dev/urandom

Длинный ответ

Оба они питаются одним и тем же криптографически защищенным генератором псевдослучайных чисел (CSPRNG). Тот факт, что /dev/random ждет энтропии (или, более конкретно, ждет, что системная оценка его энтропии достигнет соответствующего уровня), только имеет значение, когда вы используете теоретически безопасный алгоритм, в отличие от алгоритма, Первый включает в себя алгоритмы, которые вы, вероятно, не используете, например, Shamir Secret Sharing и одноразовая панель. Последний содержит алгоритмы, которые вы фактически используете и заботитесь, такие как AES, RSA, Diffie-Hellman, OpenSSL, GnuTLS и т.д.

Так что неважно, используете ли вы цифры из /dev/random, так как они все равно откачиваются из CSPRNG, и "теоретически возможно" разбить алгоритмы, которые вы, вероятно, используете в любом случае.

Наконец, этот "теоретически возможный" бит означает именно это. В этом случае это означает использование всей вычислительной мощности в мире в течение времени, в течение которого вселенная существовала для взлома приложения.

Поэтому в использовании /dev/random

почти нет смысла использовать <

Поэтому используйте /dev/urandom

Источники

1 2 3