2013-11-14 4 views
26

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

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

+0

Imho вы должны заменить один из тегов, чтобы упомянуть, что этот вопрос специфичен для Linux; во всяком случае, о второй части - нет, только root может это сделать, обычные пользователи могут смешивать только новые данные, что безвредно. – loreb

ответ

20

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

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

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

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

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

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

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

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

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

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

+0

Спасибо за этот действительно хороший ответ. Являясь неродным английским спикером, слово «энтропия» очень трудно получить для меня. Я представляю энтропийный пул в виде массива памяти, который, когда заполняется 8/16 бит, печатает соответствующий символ, я прав? – Antoninarto

+0

Я добавил небольшую заметку об энтропии. Надеюсь, это облегчит вам ситуацию. – jbr

+0

Самая классная вещь, которую я читал весь день :) – siliconrockstar

2

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

Добавление практического обновления для тех, кто в настоящее время, глядя на IPSEC команды PKI или что-то подобное блокирование на пустой пул энтропии:

Я только что установил RNG-инструменты в другом окне и моя команда ИПК завершена.

apt-get install rng-tools 
0

Я в разгаре чтения документа в factorable и вынесенный к сведению раздела, где он говорит:

«Для разработчиков библиотеки:. По умолчанию для наиболее безопасной конфигурации Оба OpenSSL и Dropbear по умолчанию для использования /dev/urandom вместо /dev/random и Dropbear по умолчанию использует менее защищенный DSA подпись хаотичности techniqu даже если более безопасный метод доступен в качестве опции ».

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

+0

Может быть, в вашем последнем предложении есть какая-то ошибка, потому что есть дважды '/ dev/random'. –

+0

Хорошо поймать, Кевин. Второе появление должно быть/dev/urandom. /dev/urandom возвращает результаты немедленно, независимо от уровня Энтропия присутствует. /dev/random будет ждать/висеть для подходящего уровня энтропии, прежде чем предоставить результаты . – Mike

+0

Так как они не блокируются при истечении энтропии, не могли бы вы теоретически «всасывать» энтропию, используя ее самостоятельно (без корня) и оставляя гораздо меньше энтропии (или ничего кроме псевдо) для криптографических программ? –

Смежные вопросы