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

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

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

4 ответа

Решение

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

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

Как можно прочитать из справочной страницы:

случайный

Когда читаешь, /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. Тот факт, что есть два устройства, является недостатком в Linux API.

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

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

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

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

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

Как общее правило, /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

Другие вопросы по тегам