14

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

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

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

3 ответа3

24

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

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

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

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.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .