Подтвердить что ты не робот

Я понял/dev/urandom?

Я читал о /dev/urandom, и насколько я могу судить, /dev/random создает криптографически случайные числа, пользуясь несколькими событиями, такими как тайминг сетевых пакетов и т.д. Однако я правильно понял, что /dev/urandom использует PRNG, засеянный номером от /dev/random? Или он просто использует /dev/random до тех пор, пока есть бит - и когда они заканчиваются, он возвращается к некоторому PRNG с семенем, собранным откуда?

4b9b3361

Ответ 1

Из urandom manpage:

Генератор случайных чисел экологический шум от устройства драйверов и других источников в энтропийный пул. Генератор также оценивает количество бит шума в энтропийном пуле. Из этих случайных чисел пула энтропии.

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

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

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

Как правило, без специализированного дорогостоящего оборудования, которое собирает данные, например, из квантовых событий, нет такой вещи, как истинный генератор случайных чисел (т.е. RNG, который генерирует действительно непредсказуемое число); хотя для криптографической цели достаточно /dev/random или/dev/urandom (метод используется для CPRNG, генератора криптографических псевдослучайных чисел).

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

Ответ 2

Фактически то, что вам нужно на практике, это то, что предоставляет FreeBSD /dev/urandom: он будет читать начальное семя достаточной длины из /dev/random, а затем использовать PRNG. Таким образом, он может блокироваться изначально (сразу после загрузки системы), но как только он собрал достаточно энтропии, он никогда не блокирует. Это обеспечивает уровень случайности, необходимый большинству криптографических протоколов, но не чрезмерно блокируя.

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

Обычный дистрибутив Linux сохраняет при выключении случайное семя, полученное из /dev/urandom, и вводит его при следующей загрузке, гарантируя тем самым качество случайного, предоставляемого /dev/urandom. Только при установке ОС криптографическое качество становится проблемой, и обычно это происходит не потому, что установка связана с рядом взаимодействий с человеком, который выполняет установку, давая полчища энтропии.

Подводя итог, под Linux и FreeBSD вы должны использовать /dev/urandom, а не /dev/random.

Ответ 3

Цитата здесь

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

/dev/urandom не будет блокироваться. Вместо этого он будет повторно использовать внутренний пул для получения более псевдослучайных бит.


/dev/urandom лучше всего использовать, когда:

  • Вам просто нужен большой файл со случайными данными для какого-то тестирования.
  • Вы используете команду dd, чтобы стереть данные с диска, заменив их на случайные данные.
  • Почти везде, где у вас нет действительно веской причины использовать /dev/random вместо этого.

/dev/random, вероятно, будет лучшим выбором, если:

  • Случайность имеет решающее значение для безопасности криптографии в вашем приложении - одноразовые прокладки, генерация ключей.