Как работает пул энтропии ядра?

Я использую /dev/urandom для генерации случайных данных для моей программы. Я узнал это /dev/random может быть пустым, потому что в отличие от /dev/urandom, Он не использует SHA, когда генерируется недостаточно байтов. /dev/random использует "пул энтропии ядра". По-видимому, он полагается на тайминги клавиатуры, движения мыши и тайминги IDE.

но как это действительно работает?
И разве нельзя "кормить" пул энтропии, делая/dev / random output предсказуемым?

3 ответов


то, что вы говорите, находится на месте, да теоретически можно подавать энтропию в /dev/random, но вам нужно будет контролировать много источников "шума" ядра, чтобы он был значительным. Вы можете посмотреть на исходный код случайные.c посмотреть /dev/random поднимает шум. В принципе, если вы контролируете значительное количество источников шумов, вы можете догадаться, что другие вносят вклад в пул энтропии.

С /dev/urandom это хэш цепь сеяный от /dev/random, тогда вы могли бы предсказать следующие числа, если бы знали семя. Если у вас достаточно контроля над пулом энтропии, то с выхода /dev/urandom возможно, вы сможете угадать это семя, что позволит вам предсказать все следующие числа из /dev/urandom, но только если вы держите /dev/random исчерпан, в противном случае /dev/urandom будет пересеяно.

это, как говорится, я не видел, чтобы кто-то действительно это делал, даже в контролируемой среде. Из конечно, это не гарантия, но я бы не волновался.

поэтому я бы предпочел использовать /dev/urandom и гарантировать, что моя программа не блокируется во время ожидания энтропии, вместо использования /dev/random и просить пользователя делать глупые вещи, такие как перемещение мыши или удар по клавиатуре.

Я думаю, вы должны прочитать об энтропии и случайности от LWN, надеюсь, это успокоит ваши заботы : -).

если вы все еще беспокоитесь, то получите себе HRNG.

редактировать Вот небольшая заметка об энтропии:

Я думаю, что понятие энтропии вообще трудно понять. Существует статья с дополнительной информацией о Википедия. Но в принципе, в этом случае вы можете читать энтропию как случайность.

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

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


Я ценю глубину ответа jbr.

добавление практического обновления для тех, кто в настоящее время смотрит на команду IPSec pki или что-то подобное блокирование пустого пула энтропии:

Я только что установил rng-tools в другом окне, и моя команда pki завершена.

apt-get install rng-tools

Я в середине чтения газеты в разделяется на составляющие и обратил внимание на раздел, где говорится:

"для разработчиков библиотеки : По умолчанию используется наиболее безопасная конфигурация. Оба!--0--> и Dropbear использовать по умолчанию /dev/urandom вместо /dev/random и Dropbear по умолчанию используется менее безопасной Метод случайности подписи DSA, хотя более безопасный метод доступен как вариант."

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