Я не совсем понимаю разницу между /dev/random и /dev/urandom в системах Linux.

Что значит «исчерпать энтропию» и как система получает больше?

Что это значит, когда люди говорят /dev/random «блокирует», если энтропии недостаточно?

Какой из них я должен использовать для каких сценариев?

1 ответ1

3

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

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

Таким образом, Linux собирает "случайность" в пулы из различных источников (например, время между входными событиями). "Количество" случайности в этом пуле - энтропия. Меньше энтропии = менее регулярные, повторяющиеся, предсказуемые паттерны - вам нужно как можно больше энтропии. Ядро Linux будет "заполнять" свой пул энтропией, когда оно становится низким, но это зависит от того, что происходит в системе, так как оно использует время между непредсказуемыми аппаратными событиями для его генерации.

Если пул пуст, /dev/random заблокирует или прекратит выдавать данные, пока ядро не получит достаточную энтропию.

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

Теперь, когда вы освоили основы, вы всегда можете использовать urandom, и вот почему.

Вот выдержка из этой статьи, объясняющая, почему это не имеет значения:

Но давайте предположим, что вы получили эти «истинные» случайные числа. Что вы собираетесь с ними делать?

Вы распечатываете их, создаете их и вешаете на стену гостиной, чтобы насладиться красотой квантовой вселенной? Это здорово, и я, конечно, понимаю.

Чего ждать? Ты их используешь? Для криптографических целей? Ну, это все портит, потому что теперь все становится немного уродливым.

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

Поскольку почти все криптографические алгоритмы, которые мы используем, не поддерживают теоретико-информационную безопасность. Они могут «только» предложить вычислительную безопасность. Два исключения, которые приходят мне в голову, это «Секретный обмен Шамира» и «Одноразовый блокнот». И хотя первый может быть допустимым контрапунктом (если вы действительно намереваетесь его использовать), последний крайне непрактичен.

Но все те алгоритмы, о которых вы знаете, aes, rsa, Diffie-Hellman, эллиптические кривые и все те криптопакеты, которые вы используете, OpenSSL, GnuTLS, Keyczar, криптографический API вашей операционной системы, являются только вычислительно безопасными.

Какая разница? В то время как теоретически защищенные алгоритмы являются безопасными, период, эти другие алгоритмы не могут гарантировать безопасность от противника с неограниченными вычислительными возможностями, который пробует все возможности для ключей. Мы по-прежнему используем их, потому что все компьютеры в мире потребуют больше времени, чем существовала вселенная. Это уровень «небезопасности», о котором мы здесь говорим.

Если только какой-нибудь умник не сломает сам алгоритм, используя гораздо меньше вычислительных ресурсов. Даже вычислительная мощность достижима сегодня. Это большая награда, о которой мечтает каждый криптоаналитик: сломать себя, сломать рису и так далее.

Так что теперь мы находимся в точке, где вы не доверяете внутренним строительным блокам генератора случайных чисел, настаивая на «истинной случайности» вместо «псевдослучайности». Но затем вы используете те «истинные» случайные числа в алгоритмах, которые вы так презираете, что не хотите, чтобы они были рядом с генератором случайных чисел!

Правда в том, что когда нарушены современные хэш-алгоритмы или когда сломаны современные блочные шифры, не имеет значения, что из-за них вы получаете «философски небезопасные» случайные числа. У вас ничего не осталось, чтобы безопасно использовать их в любом случае.

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .