Обычно чтение из /dev/random
дает 100-500 байтов и блоков, ожидая сбора энтропии.
Почему запись информации /dev/random
другими процессами не ускоряет чтение? Разве это не должно обеспечить необходимую энтропию?
Это может быть полезно для разблокировки gpg
или аналогичного программного обеспечения без перезапуска и повторного ввода всего, для генерации не сверхсекретных секретных ключей и т. Д.
/dev/urandom
вместо./dev/urandom
так же безопасен, как и/dev/random
для криптографического использования , поведение/dev/random
плохого дизайна.gpg --gen-key
от/dev/random
к/dev/urandom
без перезагрузки?gpg
имеет/dev/random
жестко закодированы. Вы можете изменить конфигурацию udev, чтобы сделать/dev/random
то же устройство/dev/urandom
, что и другие возможности.gpg --gen-key
, поэтому повторно вводит данные, которые он запрашивает в интерактивном режиме (или использует более умные методы, такие как указание большего количества параметров командной строки). Также время ЦП, генерирующее простое число, может быть потеряно (gpg может работать минуту, печатать некоторые+
es и затем запрашивать дополнительные случайные данные). И это дает ощущение «давайте вернемся и пойдем другим путем» вместо «давайте возьмем молоток и заставим его двигаться вперед» ...Ответы:
Вы можете писать,
/dev/random
потому что это часть способа предоставления дополнительных случайных байтов/dev/random
, но этого недостаточно, вы также должны уведомить систему о наличии дополнительной энтропии посредствомioctl()
вызова.Мне нужна была та же функциональность для тестирования моей программы установки смарт-карт , так как я не хотел ждать, пока моя мышь / клавиатура сгенерирует достаточно для нескольких вызовов,
gpg
которые были сделаны для каждого запуска теста. Что я сделал, так это запустил программу Python, которая следует параллельно с моими тестами. Конечно, его вообще не следует использовать дляgpg
генерации реального ключа, так как случайная строка вовсе не случайна (сгенерированная системой случайная информация все равно будет чередоваться). Если у вас есть внешний источник, для которого нужно установить строкуrandom
, то вы должны иметь высокую энтропию. Вы можете проверить энтропию с:Программа:
(Не забудьте убить программу после того, как вы закончите.)
источник
rngd
. Он доступен как пакет в большинстве (всех?) Дистрибутивов.random = "3420348024823049823-984230942049832423l4j2l42j"
см. xkcd.com/221Как правило, он разработан разработчиками ядра и задокументирован в
man 4 random
:источник
Энтони уже объяснил, что запись в
/dev/random
не увеличивает счет энтропии, и показал, как RNDADDENTROPY ioctl (см. Random (4) ) можно использовать для подсчета энтропии. Это, очевидно, не совсем безопасно, поэтому здесь есть альтернатива, когда доступен аппаратный генератор случайных чисел.Следующие реализации берут 512 байтов (4096 битов) случайности
/dev/hwrng
и направляют ее в пул энтропии (зачисление 4 битов энтропии на байт, это произвольный выбор от меня). После этого он вызовет системный вызов select (2) для блокировки при заполнении пула энтропии (задокументировано на странице random (4) ).Версия Python:
Поскольку в Arch Linux iso не был установлен Python, здесь также есть версия Perl:
Это, вероятно, то, что делает программа rngd (часть rng-tools ) (не проверено), за исключением того, что она использует инструменты (Python или Perl), которые уже общедоступны.
источник
/dev/urandom
вместо него,/dev/hwrng
если вы абсолютно не заботитесь о небезопасных случайных значениях .getrandom()
использовании hwrng в ядрах старше 4.8-rc1 возникает ошибка, приводящая к блокированию. Чтобы обойти этоread()
дважды/dev/random
, смотрите github.com/Lekensteyn/archdir/commit/…