Как часто / dev / urandom производит выборку из / dev / random?

15

Если я не совсем запутался, и это не делает этого.

Я хочу знать, получит ли / dev / urandom увеличенную энтропию, если я возьму аппаратный ГСЧ и включу его энтропию в / dev / random.

Итак, перефразируя, если бы я увеличил энтропию / dev / random на X бит / сек (то есть / dev / random после инъекции позволяет вам выбирать X бит / сек), увеличит ли это энтропийный переход к урандом?


источник
2
Хотя это не очень актуально, 2uo.de/myths-about-urandom и blog.cloudflare.com/… (в частности, график на blog.cloudflare.com/content/images/image01.png ) может быть полезным для чтения.
user1686
Если бы у вас был настоящий аппаратный ГСЧ, вы могли бы просто использовать его напрямую.
Майкл Хэмптон

Ответы:

25

Не совсем точно сказать, что /dev/urandomобразцы из /dev/random. Вместо этого два пула поддерживаются одним и тем же источником энтропии. Когда счетчик энтропии пулов достигает нуля, они повторно заполняются из общего входного пула. Так что, если вы определите энтропию ввода в ядре каким-либо образом, она может использовать ее для любого /dev/randomили /dev/urandom, в зависимости от того, что читается.

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

На практике все это не имеет значения, поскольку до тех пор, пока пул первоначально заполнен энтропией не менее 128 бит, прогнозирование любого выхода потребует не только просмотра предыдущих выходов, но и нарушения используемых алгоритмов, включая, по крайней мере, сопротивление прообразу. SHA-1 ( который остается неразрушенным ).

Otus
источник
7

Это зависит от реализации. Но, как правило, /dev/randomи /dev/urandomвытащить энтропию из одного пула, так и будет.

Диаграмма из https://blog.cloudflare.com/ensuring-randomness-with-linuxs-random-number-generator/

Дэвид Шварц
источник
4

В Linux любые данные, записанные в / dev / random или / dev / urandom, копируются в блокирующий пул (источник случайности для / dev / random) и неблокирующий пул (источник случайности для / dev / urandom).

Просто посмотрите на функцию random_write .

Но данные, записанные в / dev / random, не учитываются внутренним оценщиком энтропии (в конце концов, некоторые локальные злоумышленники могут попытаться просто перенаправить / dev / zero или какой-либо другой источник, не являющийся случайным, в / dev / random), так что если у вас есть проблемы с блокировкой / dev / random просто запись в / dev / random не помогает.

В Linux пишите в / dev / random (или / dev / urandom, без разницы), но всегда читайте из / dev / urandom (как только он будет заполнен - ​​на самом деле лучший способ - использовать новый системный вызов getrandom ).

Я не знаю, как это работает в других Unices.

JJZ
источник