Почему запись в / dev / random не делает параллельное чтение из / dev / random быстрее?

Обычно чтение из /dev/random производит 100-500 байтов и блоков, ожидая сбора энтропии.

Почему не записывает информацию в /dev/random другими процессами, ускоряет чтение? Разве он не должен обеспечивать требуемую энтропию?

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

  • Что скрывает энтропию?
  • / usr / bin / random, используя много CPU
  • Генератор паролей не работает OS X
  • Изменение имени хоста на рабочем столе Linux Mint до случайного значения во время загрузки
  • Создание уникальных номеров Функция RANDOM OS X
  • Извлечение случайной выборки из N строк на основе шаблона
  • Перемешать два параллельных текстовых файла
  • измерять количество данных, считанных с / dev / random
  • 3 Solutions collect form web for “Почему запись в / dev / random не делает параллельное чтение из / dev / random быстрее?”

    Вы можете написать /dev/random потому что это часть способа предоставления дополнительных случайных байтов в /dev/random , но этого недостаточно, вам также необходимо уведомить систему о наличии дополнительной энтропии через вызов ioctl() ,

    Мне нужна была такая же функциональность для тестирования моей программы настройки смарт-карт , поскольку я не хотел дожидаться, когда моя мышь / клавиатура будет генерировать достаточно для нескольких вызовов gpg которые были сделаны для каждого тестового прогона. То, что я сделал, – запустить программу Python, которая следует, параллельно моим тестам. Разумеется, он не должен использоваться вообще для реального генерации ключей gpg , так как случайная строка не является случайной (система генерирует случайную информацию по-прежнему будет чередоваться). Если у вас есть внешний источник для random установки строки, вы должны иметь высокую энтропию. Вы можете проверить энтропию с помощью:

     cat /proc/sys/kernel/random/entropy_avail 

    Программа:

     #!/usr/bin/env python # For testing purposes only # DO NOT USE THIS, THIS DOES NOT PROVIDE ENTROPY TO /dev/random, JUST BYTES import fcntl import time import struct RNDADDENTROPY=0x40085203 while True: random = "3420348024823049823-984230942049832423l4j2l42j" t = struct.pack("ii32s", 8, 32, random) with open("/dev/random", mode='wb') as fp: # as fp has a method fileno(), you can pass it to ioctl res = fcntl.ioctl(fp, RNDADDENTROPY, t) time.sleep(0.001) 

    (Не забудьте убить программу после того, как вы закончите.)

    Как правило, он разработан разработчиками ядра и задокументирован в man 4 random :

     Writing to /dev/random or /dev/urandom will update the entropy pool with the data written, but this will not result in a higher entropy count. This means that it will impact the contents read from both files, but it will not make reads from /dev/random faster. 

    Энтони уже объяснил, что запись в /dev/random не увеличивает счет энтропии и показывает, как RNDADDENTROPY ioctl (см. Случайное (4) ) можно использовать для кредитования энтропии. Это, очевидно, не очень безопасно, так что это альтернатива, когда имеется генератор случайных чисел.

    Следующие реализации берут 512 байт (4096 бит) случайности из /dev/hwrng и перенаправляют их в пул энтропии (зачисление 4 бит энтропии на каждый байт, это произвольный выбор от меня). После этого он вызовет select (2) syscall для блокировки, когда пул энтропии заполнен (задокументирован в случайной (4) man-странице).

    Версия Python:

     import fcntl, select, struct with open('/dev/hwrng', 'rb') as hw, open('/dev/random') as rnd: while True: d = hw.read(512) fcntl.ioctl(rnd, 0x40085203, struct.pack('ii', 4 * len(d), len(d)) + d) select.select([], [rnd], []) 

    Так как у Arch Linux iso не установлен Python, вот версия Perl:

     open my $hw, "</dev/hwrng" and open my $rnd, "</dev/random" or die; for (;;) { my $l = read $hw, my $d, 512; ioctl $rnd, 0x40085203, pack("ii", 4 * $l, $l) . $d or die; vec(my $w, fileno $rnd, 1) = 1; select undef, $w, undef, undef } 

    Вероятно, это то, что делает rngd-программа (часть rng-tools ) (непроверенная), за исключением того, что она использует инструменты (Python или Perl), которые уже широко доступны.

    Interesting Posts

    Как проверить, существует ли один или оба из двух файлов?

    Именование пакетов RPM

    Сделать запуск программы при загрузке

    Отключить AC приводит к остановке anacron. Не было возобновлено, если cron.daily уже начался?

    «Grep» доступное пространство с выхода «df»

    Визуализатор файла журнала в терминале (UNIX) (повтор записи в журнале)

    Ctrl + Alt + F6 для доступа к контейнеру linux?

    Как установить групповую политику для доступа ко всем папкам, кроме одного?

    Создайте каталог, если он не существует в TCL

    Mount Samba Share (сервер Linux) на клиентской машине Linux

    RPM не удаляется с использованием sudo rpm -e

    Драйвер устройства для веб-камеры для поддержки H.264

    Что случилось с моей установкой Arch? Случайный причудливый экран с момента последнего обновления

    Какую файловую систему / файловую систему использовать для раздела / tmp

    синтаксическая ошибка рядом с неожиданным токеном `then '

    Linux и Unix - лучшая ОС в мире.