Генерировать энтропию для ключа PGP

12

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

Как я могу генерировать некоторые?

Я пытался, cat /dev/urandom > /dev/nullно это не помогает.

redic
источник

Ответы:

13

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

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

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

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

Томас Гайот-Сионнест
источник
Обратите внимание, что во FreeBSD /dev/randomэто высококачественный PRNG , который обычно не должен блокироваться.
Кевин
@Kevin /dev/random- это высококачественный PRNG на современных BSD и Linux, конечно. Но он заблокируется, если не будет достаточно энтропии. С другой стороны, /dev/urandomне будет блокировать, если не достаточно доступных, но качество случайности может пострадать в этом случае. В деталях есть много тонкостей между случайными и случайными реализациями между Linux и различными BSD, но вышеупомянутое должно быть верно для всех AFAIK.
Гюйгенс
В Linux вы можете генерировать больше энтропии, просто пропингуя хост (например ping 8.8.8.8), если у вас есть другой сетевой хост, пытайтесь пинговать каждые 100 мс (если ваш RTT, конечно, <100 мс). И / или используйте findдля поиска файлов на жестком диске и очистки кэш-памяти RAM между каждым поиском файлов.
Гюйгенс
@Huygens: откройте справочную страницу, на которую я ссылался, и нажмите Ctrl + F "kern.random.sys.seeded"; по умолчанию /dev/randomне блокируется во FreeBSD.
Кевин
1
@Kevin да, вы правы, объединение энтропии или сбор урожая, возможно, два разных способа «посева» PRNG. И после некоторого тестирования на моем BSD-боксе я обнаружил, что случайное и случайное поведение ведут себя одинаково, они блокируются, когда не могут генерировать достаточно хороший PRNG. Попробуйте запустить dd if=/dev/random of=/tmp/rndtest bs=64M count=1после новой загрузки, потребовалось 2 последовательных запуска, чтобы увидеть время, чтобы сгенерировать увеличение файла до 64 МБ. Я думал, что не буду видеть этот эффект с urandom в качестве входных данных, но FreeBSD, похоже, блокирует и его, в отличие от Linux.
Гюйгенс
9

Вы можете использовать haveged.

haveged это демон, который генерирует энтропию при необходимости

Сильвен Фирмери
источник
Да, apt-get установил
Uwe Burger
2
Берегите себя с Hasged в виртуальной среде. Это может быть неоптимальным в зависимости от конфигурации гипервизора. Проверьте эту страницу: wiki.archlinux.org/index.php/Haveged#Virtual_machines
Гюйгенс
4

Я бы порекомендовал генерировать ваши ключи gpg на вашем локальном компьютере, который будет иметь гораздо лучшую случайность, чем удаленный. А затем перенесите ключи с помощью SSH на удаленный компьютер.

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

Если вы все еще хотите генерировать их удаленно: в Linux вы можете генерировать больше энтропии, просто пропингуя хост (например ping 8.8.8.8), если у вас есть другой сетевой хост, пытайтесь пинговать каждые 100 мс (если ваш RTT <100 мс, конечно). И / или используйте findдля поиска файлов на жестком диске и очистки кэш-памяти RAM между каждым поиском файлов.

Вы также можете установить, havegedно прочитать ограничения, если вы запускаете его в виртуальной среде: https://wiki.archlinux.org/index.php/Haveged#Virtual_machines

Гюйгенс
источник
На мой взгляд, это правильное решение - +1 от меня.
MadHatter,
3

В системах на основе Debian вы можете установить rng-toolsпакет, используя atp-get, а затем запустить демон для генерации энтропии:

echo HRNGDEVICE=/dev/urandom >> /etc/default/rng-tools && service rng-tools restart

На серверах CentOS-6 rngдемон устанавливается как один из базовых инструментов (по крайней мере, на большинстве систем, над которыми я работал), и вы можете запустить следующую команду, чтобы запустить его, чтобы сгенерировать энтропию:

sed -i \'s|EXTRAOPTIONS=\"\"|EXTRAOPTIONS=\"-r /dev/urandom\"|g\' /etc/sysconfig/rngd && service rngd restart
Андрей
источник
Я не думаю, что использование urandom в качестве источника для rngd - это разумно. Это поможет быстрее истощить имеющуюся энтропию, а после ее истощения станет предвзятым источником энтропии. Поэтому я бы избежал этого решения.
Гюйгенс
1
sudo yum install haveged && sudo systemctl start haveged

определенно работает на CentOS 7.2 VM. Иногда вы хотите создать ключи GPG на виртуальной машине, если вы создаете связку и хотите, чтобы ваш брелок был целым.

init0
источник