ГПГ не хватает энтропии


86

У меня есть тонна процессов, работающих в фоновом режиме, чтобы попытаться получить достаточно энтропии, но я все еще терплю неудачу.

**We need to generate a lot of random bytes. It is a good idea to perform
some other action (type on the keyboard, move the mouse, utilize the
disks) during the prime generation; this gives the random number
generator a better chance to gain enough entropy.
Not enough random bytes available.  Please do some other work to give
the OS a chance to collect more entropy! (Need 210 more bytes)**

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

Ответы:


112

Вы смотрели на ГСЧ?

Типы Fedora / Rh / Centos: sudo yum install rng-tools

О типах deb: sudo apt-get install rng-toolsнастроить.

Затем запустите sudo rngd -r /dev/urandomперед генерацией ключей.

Ссылка: http://it.toolbox.com/blogs/lim/how-to-generate-enough-entropy-for-gpg-key-generation-process-on-fedora-linux-38022


4
Кроме того, на более серьезной ноте, вы можете использовать, sudo apt-get install rng-toolsесли вы используете Ubuntu, а не sudo yum install rng-utilsкак в Fedora, поскольку rng-utilsдля Ubuntu не существует пакета.
Джейсон Светт

4
Пакет назван rng-toolsкак на Fedora, так и на EL6, поэтому я подозреваю, что опечатка приведена в связанной статье. Кстати, это хорошая идея, чтобы предоставить основные части ответа здесь, и ссылку для справки, в случае, если ссылка не работает в будущем.
Майкл Хэмптон

11
В урандоме нет «некачественной энтропии» или «фальшивой энтропии». urandom вызывает тот же код, что и / dev / random. Нет необходимости вводить дополнительную случайность в CSPRNG (кроме как во время загрузки, и там ваш дистрибутив должен позаботиться об этом). Это миф и не должен распространяться. См., Например, sockpuppet.org/blog/2014/02/25/safely-generate-random-numbers или это видео: media.ccc.de/v/32c3-7441-the_plain_simple_reality_of_entropy
Себастьян Визингер,


2
Самый высоко оцененный комментарий - это нонсенс; К сожалению, я вижу это на SO. Предупреждения (даже если они полностью ошибочны) получат много голосов, и ни один из способов их исправить (без опции комментария понижающего голоса) означает, что мы не можем избавиться от мифов.
Стейн де Витт

28

Я смог сгенерировать ключ

apt-get install rng-tools

В другом окне SSH открыть

 gpg --gen-key

Вернитесь к своей первой сессии SSH и запустите

sudo rngd -r /dev/urandom

Пусть это работает, пока gpg не сгенерирует ваши ключи!


9
Я определенно рекомендовал бы никогда не использовать /dev/urandomдля генерации ключей любой важности.
Эндрю Барбер

12
@AndrewBarber Ерунда. Это рекомендуемый метод.
Дэвид Шварц

3
@AndrewBarber Это явно разработано для этой цели. По сути, /dev/randomэто ошибка дизайна. Он должен блокироваться только при первом (когда-либо) вызове (при первой загрузке), когда энтропия вообще не была собрана. Как и в других ОС. Вместо этого мы получили два бассейна сейчас. Просто никогда не пользуйтесь /dev/randomим, не имеет никаких преимуществ.
Стейн де Витт

@AndrewBarber, что бы вы порекомендовали вместо этого?
qodeninja

13

Чтобы проверить количество байтов энтропии, доступных в настоящее время, используйте

cat /proc/sys/kernel/random/entropy_avail

Емкость энтропии имеет размер 4096 байт, который может быть очень быстро исчерпан.

Используя этот небольшой инструмент «readspeed» ( http://1wt.eu/tools/readspeed/ ), вы можете измерить, насколько быстро ковш энтропии заполняется различными методами.

Например, запустите:

$ ./readspeed < /dev/random

и наведите курсор мыши. Вы увидите, что «readspeed» очищает контейнер энтропии, как только он заполнен, и когда вы перемещаете мышь, он немного заполняется.

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

Наконец, доступны устройства генерации энтропии, такие как этот: http://www.entropykey.co.uk/ .


4
В урандоме нет «некачественной энтропии». urandom вызывает тот же код, что и / dev / random. Это миф и не должен распространяться. Смотрите, например, sockpuppet.org/blog/2014/02/25/safely-generate-random-numbers или это видео: media.ccc.de/v/32c3-7441-the_plain_simple_reality_of_entropy
Себастьян Визингер,

Этому ответу 5 лет. Мы думали, что случайный случай был не так безопасен, как случайный, но с тех пор все изменилось, и случайный случай считается безопасным.
Жюльен Вехент

1
Факт был безопасен с самого начала. Предупреждения были неверны и 7 лет назад.
Стейн де Витт

8

+1 для rng-инструментов

В случае, если вы застряли в такой ситуации, как я - у вас нет прав на установку нового программного обеспечения (rng-tools) на сервер без монитора, практически без подключенного оборудования ввода (звуковая карта, клавиатура, мышь). Вы можете запустить этот простой код из другого терминала, подключенного к тому же серверу, чтобы добавить энтропию. Не имеет значения, начнете ли вы запускать это до или после запускаgpg --gen-key

$ nice -n 19 bash
$ until [ $COUNT -lt 1 ]; do
  let COUNT=`cat /proc/sys/kernel/random/entropy_avail`
  echo "`date` COUNTER $COUNT"
done

Первая строка - запустить новую оболочку bash с более низким приоритетом (мне нужно было хорошо работать на сервере, которым пользуются многие пользователи). Цикл till бесконечен, поэтому не забывайте прерывать его после генерации ключа. Все, что он делает, заставляет сетевой трафик увеличивать энтропию. Он также отслеживает счетчик entropy_avail, чтобы показать, как он заполняется и опорожняется с другой стороны gpg. В моем случае счетчик быстро заполнился до 64 и опустошился до 0 (думаю, gpg набирает частоту 64). Я ожидал генерации 4096-битного ключа более 3 часов на сервере. После запуска этого скрипта он завершился менее чем за 5 минут.


У меня тоже не было root-доступа на удаленном сервере, и это работало на создание некоторой энтропии. Я думаю, что условие должно быть изменено на [ $COUNT -lt 0 ]. Потому что для системы с действительно меньшей энтропией она иногда достигает 0 и останавливается. GPG действительно жаждет энтропии.
Аджай Брахмакшатрия

Спасибо, это должно быть достаточно для меня, чтобы сделать некоторое поколение энтрофии на коробке с воздушной пробкой. За исключением того, что я не буду использовать дату, так как это предсказуемо
grepsedawk

7

Я был привязан и полон решимости генерировать энтропию на моем безголовом сервере Ubuntu 14.04 для генерации ключа 4096 с gpg --gen-key

Существует пакет для генерации энтропии, называемый hasged. Пример установки:

sudo apt-get install haveged

Мне пришлось, sudo apt-get install rng-toolsтак как это зависимость в следующем тесте.

Пример теста, чтобы увидеть, генерируется ли энтропия hasged:

cat /dev/random | rngtest -c 1000

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

Я узнал об этом в уроке здесь:

https://www.digitalocean.com/community/tutorials/how-to-setup-additional-entropy-for-cloud-servers-using-haveged

Теперь у меня есть ключи после запуска gpg --gen-key


0

Я столкнулся с этой проблемой при запуске pacman-key --initв арке. Другие решения здесь не работали хорошо для меня, но я обнаружил, что просто закачка моего маршрутизатора работает хорошо:ping -f ip.of.my.router


0

Ну, это проще, чем я думал, по сравнению с решениями, представленными здесь:

ls -R /

Случайных байтов, предоставленных вышеприведенной командой, было достаточно для обеспечения необходимой энтропии для генерации пары ключей RSA / 4096.

Взято из: https://www.thingy-ma-jig.co.uk/blog/22-01-2010/generate-entropy-gnupg


0

havegedэто лучший способ, но если вы не можете ничего установить, то вы можете вручную генерировать энтропию. Этот метод позволил gpg --gen-kenзавершить в течение 1-2 минут на моей машине (по сравнению с 10 с haveged). Так что примерно в 10 раз медленнее.

Запустите это в другом терминале во время gpg --gen-keyработы:

while true; do
    # print entropy available
    cat /proc/sys/kernel/random/entropy_avail
    # write a 1 MB stream of zeros to /tmp/foo
    # "conv=fdatasync" flushes the disk cache
    dd bs=1M count=1 if=/dev/zero of=/tmp/foo conv=fdatasync
done

Один лайнер:

while true; do cat /proc/sys/kernel/random/entropy_avail; dd bs=1M count=1 if=/dev/zero of=/tmp/foo conv=fdatasync; done
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.