Используйте / dev / urandom
для большинства практических целей.
Более подробный ответ зависит от того, какой у вас Unix.
Исторически, / dev / random
и / dev / urandom
вводились одновременно.
Как отметил @DavidSchwartz в комментарии , использование / dev / urandom
является предпочтительным в подавляющем большинстве случаев. Он и другие также предоставили ссылку на прекрасную статью Myths about / dev / urandom
, которую я рекомендую для дальнейшего чтения.
Вкратце:
/ dev / random
блокируется, когда заканчивается энтропия / dev / urandom
никогда не блокируется, чтение из / dev / random
может останавливать выполнение процессов. / dev / urandom
может не давать высококачественной случайности. / dev / urandom
не исчерпывается пул энтропии (используется / dev / random
), но использует вывод CSPRNG из восходящего потока. / dev / urandom
. Исключения из правила
В Биржи криптографического стека Когда использовать / dev / random
вместо / dev / urandom
в Linux {{1 }} @ otus дает два варианта использования :
Вскоре после загрузки на устройстве с низкой энтропией, если еще не было сгенерировано достаточно энтропии для правильного заполнения / dev / urandom
.
Создание одноразового блокнота с теоретической информационной безопасностью
Если вас беспокоит (1), вы можете проверить энтропию, доступную в / dev / random
.
Если вы выполняете (2), вы уже это знаете :)
Примечание: вы можете проверить, блокирует ли чтение из / dev / random , но будьте осторожны с возможными условиями гонки.
Альтернатива: не используйте ни то, ни другое!
@otus также указал, что система getrandom ()
будет читать из / dev / urandom
и блокировать, только если начальная энтропия семени недоступна.
Есть проблемы с изменением / dev / urandom
на использование getrandom ()
, но возможно, что новый / dev / xrandom
устройство создается на основе getrandom ()
.
Это не имеет значения, поскольку Википедия говорит :
macOS использует 160-битный Yarrow на основе SHA1. Нет никакой разницы между / dev / random и / dev / urandom; оба ведут себя одинаково. IOS от Apple также использует Тысячелистник.
Это не имеет значения, поскольку Википедия говорит :
/ dev / urandom
- это просто ссылка на/ dev / random
и только блоки, пока правильно не засеяны.
Это означает, что после загрузки FreeBSD достаточно умен, чтобы дождаться, пока будет набрано достаточно начальной энтропии, прежде чем доставить нескончаемый поток случайных качеств.
Используйте / dev / urandom
, предполагая, что ваша система прочитала хотя бы один раз из / dev / random
, чтобы обеспечить правильное начальное заполнение.
На странице rnd (4) написано :
/ dev / urandom
Никогда не блокируется.
/ dev / random
Иногда блоки. Будет блокироваться раньше при загрузке, если известно, что состояние системы предсказуемо.Приложения должны читать из / dev / urandom, когда им нужны случайно сгенерированные данные, например криптографические ключи или начальные числа для моделирования.
Системы должны быть спроектированы так, чтобы разумно читать хотя бы один раз из / dev / random при загрузке перед запуском любых служб, которые обращаются к Интернету или иным образом требуют криптографии, чтобы избежать {{ 1}} генерирует ключи предсказуемо.
screen
(и даже nohup
: это не обязательно встроенный) может запустить subshell. Если инициализация вашей оболочки устанавливает PATH
, например, и вы использовали некоторый скрипт для настройки среды Java, то запуск оболочки, подобной этой, нарушит описанные выше вещи.