GPG зависает на генерации энтропии

При попытке сгенерировать ключи GPG (используя gpg --gen-key) он может зависнуть после выдачи сообщения:

Недостаточно случайных байтов. Пожалуйста, сделайте какую-нибудь другую работу, чтобы дать ОС шанс собрать больше энтропии! (Нужно еще 278 байт)

gpg (GnuPG) 1.4.16

Убунту 14.04.2 ЛТС


person River Satya    schedule 05.10.2015    source источник
comment
См. Дублирующийся вопрос: " title="pgp недостаточно случайных байтов, пожалуйста, сделайте другую работу, чтобы дать ОС"> stackoverflow.com/questions/11708334/   -  person wisbucky    schedule 09.07.2019


Ответы (3)


Хотя rng-tools будут работать, это не рекомендуется, поскольку они не обеспечивают реальной энтропии. См. обсуждение здесь: https://bugs.launchpad.net/ubuntu/+source/gnupg/+bug/706011

Для пользователей, которые разочарованы этим, вот некоторые вещи, которые я нашел полезными на сервере без мыши/рабочего стола.

1) Пройдите процесс создания ключа GPG. Если он зависает в ожидании большей энтропии, переходите к следующему шагу.

2) Вы можете посмотреть, сколько энтропии имеет ваша система, открыв терминал и набрав (будет просматривать этот файл каждую секунду):

watch -n1 cat /proc/sys/kernel/random/entropy_avail

3) Откройте третий терминал, чтобы сгенерировать свою энтропию. Вы можете попробовать разные вещи, чтобы попытаться повысить эту энтропию. Вот некоторые вещи, которые я заметил, увеличивающие энтропию в достаточной степени, чтобы заставить работать gpg. Обратите внимание, что это было несколько случайно (не каламбур). Иногда выполнение чего-то увеличивало энтропию; но когда я делаю это снова, это не так:

Получить большой файл из Интернета

wget http://us1.php.net/get/php-7.2.2.tar.bz2/from/this/mirror

Сделайте что-нибудь, что выведет много материала на терминал:

ls -R /
sudo find /folder/with/lots/of/files/ -type f | xargs grep 'simple string that shows up in lots of files'

4) Если то, что вы делаете, не увеличивает entropy_avail, попробуйте что-нибудь еще.

person juacala    schedule 15.02.2018
comment
может потребоваться повторно загрузить файл большего размера, если он находится на облачном сервере, например. wget http://releases.ubuntu.com/18.04/ubuntu-18.04-live-server-amd64.iso - person erikvw; 13.07.2018

Изменить: этому совету не следует следовать в целом, поскольку он не генерирует безопасные ключи. Подробнее см. ответ juacala или stackoverflow.com/questions/11708334.

Оказывается, это известная проблема: https://bugs.launchpad.net/ubuntu/+source/gnupg/+bug/706011

Я решил это, установив rng-tools.

ie sudo apt-get install rng-tools

Тогда gpg --gen-key работает как положено.

person River Satya    schedule 05.10.2015
comment
как ни странно, запуск sudo apt-get install rng-tools генерировал больше энтропии, чем любой другой предложенный метод. Мой gpg --gen-key застопорился на десятки минут и сразу завершился во время установки rng-tools. И это было после прохождения всех методов, перечисленных @juacala ниже (все во время одного и того же вызова gpg --gen-key!) - person ampersand; 28.08.2018
comment
Согласно ссылке, указанной в ответе, вам НЕ следует использовать rng-tools, если вы собираетесь использовать ключ в реальных целях, потому что он не генерирует реальную энтропию, и ваш ключ может быть небезопасным. - person juacala; 06.09.2018

sudo apt install haveged

Это установит сервис haveged, который собирает энтропию и гораздо эффективнее заполняет /dev/random. Никаких дополнительных команд после установки haveged выполнять не нужно, служба запустится автоматически. systemctl status haveged, чтобы убедиться, что служба запущена. Вы также можете cat /dev/random продемонстрировать, что он может постоянно предоставлять значения. В моем тесте gpg --gen-key завершилось за 10 секунд с установленным haveged.

Если вы не хотите ничего устанавливать, вы можете генерировать энтропию другими способами, но это намного медленнее, чем 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

# one liner
while true; do cat /proc/sys/kernel/random/entropy_avail; dd bs=1M count=1 if=/dev/zero of=/tmp/foo conv=fdatasync; done
person wisbucky    schedule 23.08.2019