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

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

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

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

  • Почему entropy_avail стекает, а затем стабилизируется?
  • Почему dd из / dev / random дает разные размеры файлов?
  • / usr / bin / random, используя много CPU
  • Произвольно скопируйте определенное количество определенного типа файла из одного каталога в другой
  • Печатать случайные строки в соответствии с порядком исходного файла
  • Случайные аргументы (содержащие цветовые коды) из массива
  • Использование NeuG TRNG с / dev / random?
  • Генератор паролей не работает OS X
  • 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

    При входе в терминал отображать пользовательский текст

    Как удалить все строки с «.png» в файле?

    `Unhandled Exception: System.ArgumentNullException: значение не может быть ошибкой null.` при запуске` dotnet run` с использованием сценария запуска

    как заставить getopts просто прочитать первое сообщение персонажа `-`

    Почему фоновые задания запускаются моей оболочкой, живущей дольше, чем исходная оболочка и управляющие терминалы?

    Доступна только системная группа SNMPD!

    NetBSD предоставляет цифровые подписи для официальных образов ISO и бинарных пакетов?

    Ubuntu 14.04 сбой при подключении 2 мониторов

    как совместить точный субдомен с grep, игнорируя другие

    Установите .deb полностью «вручную»,

    Почему вывод этой команды вставки разделяется на отдельные строки с помощью отступов?

    Проверка наличия файлов в некоторых удаленных папках с помощью bash

    Настройте автозаполнение для первого аргумента, оставьте остальных в покое

    Регистратор данных на основе tcpdump

    Установите Centos7 с файлом kickstart с «входом в аварийный режим»,

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