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

1975

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

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

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

14
Хотя это не очень актуально, http://www.2uo.de/myths-about-urandom/ и https://blog.cloudflare.com/ensuring-randomness-with-linuxs-random-number-generator/ (в частности, График на https://blog.cloudflare.com/content/images/image01.png) может быть полезным для чтения. grawity 8 лет назад 2
Если бы у вас был настоящий аппаратный ГСЧ, вы могли бы просто использовать его напрямую. Michael Hampton 8 лет назад 0

3 ответа на вопрос

24
otus

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

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

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

7
David Schwartz

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

Diagram from https://blog.cloudflare.com/ensuring-randomness-with-linuxs-random-number-generator/

4
JJZ

В 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.

Похожие вопросы