У GPG недостатньо ентропії


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

Ви подивилися на RNG?

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

Типи деб: 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
Sebastian


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
Sebastian

Ця відповідь 5 років. Ми думали, що урадон не був настільки безпечним, як випадковий, але все змінилося з тих пір і урадон вважається безпечним.
Жульєн Веент

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

8

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

Якщо ви застрягли в такій ситуації, як я, - у вас немає дозволу на встановлення нового програмного забезпечення (rng-інструментів) на безголовий сервер і практично не додано апаратне забезпечення для введення (звукова карта, клавіатура, миша). Ви можете запустити цей простий код з іншого терміналу, підключеного до того ж сервера, щоб додати його до ентропії. Не має значення, якщо ви починаєте це виконувати до або після запуску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, з нижчим пріоритетом (мені потрібно було добре на сервері, яким користуються багато користувачів). Цикл до нескінченності, тому не забудьте розірвати його, як тільки ключ буде створений. Все, що вона робить, викликає посилення ентропії мережевого трафіку. Він також стежить за лічильником entropy_avail, щоб показати, як він заповнюється та спорожняється з іншого боку gpg. У моєму випадку лічильник швидко заповнився до 64 і випорожнився назад до 0 (здогадуйтесь, що gpg збирається в 64). Я чекав 4096 бітового генерації ключів більше 3 годин на сервері. Після запуску цього сценарію він закінчився за 5 хв.


У мене теж не було кореневого доступу на віддалений сервер, і це працювало в створенні певної ентропії. Я думаю, що умову слід змінити на [ $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оскільки це залежність у наступному тесті.

Приклад тесту, щоб дізнатись, чи створюється ентропія за допомогою тегів:

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.