GPG nie ma wystarczającej entropii


86

W tle działa mnóstwo procesów, które próbują uzyskać wystarczającą entropię, ale nadal mi się nie udaje.

**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)**

Potrzebuję metody do wygenerowania klucza, który działa, ponieważ to, co próbuję zrobić, najwyraźniej kończy się niepowodzeniem.

Odpowiedzi:


112

Rzuciłeś okiem na RNG?

Typy Fedora / Rh / Centos: sudo yum install rng-tools

W przypadku typów deb: sudo apt-get install rng-toolsaby go skonfigurować.

Następnie uruchom sudo rngd -r /dev/urandomprzed wygenerowaniem kluczy.

Odniesienie: http://it.toolbox.com/blogs/lim/how-to-generate-enough-entropy-for-gpg-key-generation-process-on-fedora-linux-38022


4
Ponadto, bardziej poważnie, możesz użyć, sudo apt-get install rng-toolsjeśli korzystasz z Ubuntu, a sudo yum install rng-utilsnie z Fedory, ponieważ nie ma żadnego rng-utilspakietu dla Ubuntu.
Jason Swett

4
Nazwa pakietu rng-toolszarówno w Fedorze, jak i EL6, więc podejrzewam literówkę w połączonym artykule. BTW, dobrym pomysłem jest podanie tutaj podstawowych części odpowiedzi oraz linku do celów referencyjnych, na wypadek gdyby linek nie działał w przyszłości.
Michael Hampton

11
W urandomie nie ma „niskiej jakości entropii” lub „fałszywej entropii”. urandom wywołuje ten sam kod co / dev / random. Nie ma potrzeby dodawania dodatkowej losowości do CSPRNG (z wyjątkiem czasu antenowego i tam Twoja dystrybucja powinna się tym zająć). To mit i nie należy go propagować. Zobacz na przykład sockpuppet.org/blog/2014/02/25/safely-generate-random-numbers lub ten film: media.ccc.de/v/32c3-7441-the_plain_simple_reality_of_entropy
Sebastian Wiesinger


2
Najwyżej głosowany komentarz to nonsens; niestety często to widzę na SO. Ostrzeżenia (nawet jeśli całkowicie błędne) otrzymają dużo głosów i nie ma sposobu, aby je poprawić (brak opcji komentowania) oznacza, że ​​nie możemy pozbyć się mitów.
Stijn de Witt

28

Byłem w stanie wygenerować klucz przez

apt-get install rng-tools

W innym oknie SSH otwórz

 gpg --gen-key

Wróć do pierwszej sesji SSH i uruchom

sudo rngd -r /dev/urandom

Niech to działa, dopóki gpg nie wygeneruje twoich kluczy!


9
Zdecydowanie odradzam używanie /dev/urandomgenerowania kluczy o dowolnym znaczeniu.
Andrew Barber,

12
@AndrewBarber Nonsense. Jest to zalecana metoda.
David Schwartz

3
@AndrewBarber Jest specjalnie zaprojektowany do tego celu. Zasadniczo /dev/randomjest to błąd projektowy. Powinien on zawsze blokować się przy pierwszym (kiedykolwiek) wywołaniu (przy pierwszym uruchomieniu), gdy nie została jeszcze zgromadzona żadna entropia. Tak jak w innych systemach operacyjnych. Zamiast tego mamy teraz dwie pule. Po prostu nigdy /dev/randomgo nie używaj nie ma żadnych zalet.
Stijn de Witt

@AndrewBarber, co byś polecił?
qodeninja

13

Aby sprawdzić ilość obecnie dostępnych bajtów entropii, użyj

cat /proc/sys/kernel/random/entropy_avail

Wiadro entropii ma 4096 bajtów, co można bardzo szybko wyczerpać.

Za pomocą tego małego narzędzia „readspeed” ( http://1wt.eu/tools/readspeed/ ) możesz zmierzyć, jak szybko pojemnik z entropią jest zapełniany różnymi metodami.

Na przykład uruchom:

$ ./readspeed < /dev/random

i poruszaj myszą. Zobaczysz, że „prędkość odczytu” opróżnia wiadro entropii, gdy tylko zostanie wypełnione, a kiedy poruszasz myszą, wypełnia się ono nieco.

Próbując różnych metod, wydaje się, że wprowadzanie klawiatury i ruchy myszy są najskuteczniejsze do uzupełnienia tego segmentu. Transfery sieciowe i kopie dysków twardych nie mają większego wpływu.

Wreszcie dostępne są urządzenia do generowania entropii, takie jak ten: http://www.entropykey.co.uk/ .


4
W urandomie nie ma „entropii niskiej jakości”. urandom wywołuje ten sam kod co / dev / random. To mit i nie należy go propagować. Zobacz na przykład sockpuppet.org/blog/2014/02/25/safely-generate-random-numbers lub ten film: media.ccc.de/v/32c3-7441-the_plain_simple_reality_of_entropy
Sebastian Wiesinger

Ta odpowiedź ma 5 lat. Myśleliśmy, że urandom nie był wtedy tak bezpieczny jak losowy, ale od tamtej pory wszystko się zmieniło i uważa się, że urandom jest bezpieczny.
Julien Vehent

1
Faktem jest, że od początku było bezpiecznie. Ostrzeżenia były błędne także 7 lat temu.
Stijn de Witt

8

+1 dla narzędzi rng

W przypadku, gdy utkniesz w takiej sytuacji, jak ja - nie mam uprawnień do instalowania nowego oprogramowania (narzędzi rng) na bezgłowym serwerze bez podłączonego sprzętu wejściowego (karta dźwiękowa, klawiatura, mysz). Możesz uruchomić ten prosty kod z innego terminala podłączonego do tego samego serwera, aby dodać do entropii. Nie ma znaczenia, czy uruchomisz to przed czy po uruchomieniugpg --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

Pierwsza linia to uruchomienie nowej powłoki bash, o niższym priorytecie (musiałem być miły na serwerze współdzielonym przez wielu użytkowników). Pętla till jest nieskończona, więc pamiętaj, aby ją przerwać po wygenerowaniu klucza. Wszystko, co robi, powoduje zwiększenie ruchu sieciowego w entropii. Monitoruje również licznik entropy_avail, aby pokazać, jak jest wypełniany i opróżniany po drugiej stronie przez gpg. W moim przypadku licznik szybko zapełnił się do 64 i opróżniono z powrotem do 0 (zgadnij, że gpg podnosi się w kawałku 64). Czekałem na generowanie klucza 4096 bitów przez ponad 3 godziny na serwerze. Po uruchomieniu tego skryptu skończył się w niecałe 5 minut.


Ja również nie miałem dostępu do roota na zdalnym serwerze i to działało w tworzeniu entropii. Myślę, że warunek powinien zostać zmieniony na [ $COUNT -lt 0 ]. Ponieważ w systemie z naprawdę mniejszą entropią czasami osiąga 0 i zatrzymuje się. GPG jest naprawdę głodna entropii.
Ajay Brahmakshatriya

Dzięki, powinno mi wystarczyć wygenerowanie entropii na pudełku z szczeliną powietrzną. Tyle że nie
użyję

7

Byłem zobowiązany i zdecydowany wygenerować entropię na moim bezgłowym serwerze Ubuntu 14.04 w celu wygenerowania klucza 4096 gpg --gen-key

Istnieje pakiet do generowania entropii o nazwie haveged. Przykład instalacji:

sudo apt-get install haveged

Musiałem to zrobić, sudo apt-get install rng-toolsponieważ jest to zależność w poniższym teście.

Przykład testu sprawdzającego, czy entropia jest generowana przez haveged:

cat /dev/random | rngtest -c 1000

Bardzo niewielka liczba awarii jest akceptowalna w dowolnym generatorze liczb losowych, ale można spodziewać się 998-1000 sukcesów bardzo często przy użyciu hovers.

Dowiedziałem się o tym w tutorialu tutaj:

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

Teraz mam klucze po uruchomieniu gpg --gen-key


0

Natknąłem się na ten problem podczas uruchamiania pacman-key --initw arch. Inne rozwiązania tutaj nie działały dla mnie dobrze, ale stwierdziłem, że po prostu pingowanie routera działało dobrze:ping -f ip.of.my.router



0

havegedjest najlepszym sposobem, ale jeśli nie możesz nic zainstalować, możesz ręcznie wygenerować entropię. Ta metoda pozwoliła gpg --gen-kenzakończyć się w ciągu 1-2 minut na mojej maszynie (w porównaniu do 10 sekund z haveged). To około 10 razy wolniej.

Uruchom to w innym terminalu podczas gpg --gen-keydziałania:

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

Jedna wkładka:

while true; do cat /proc/sys/kernel/random/entropy_avail; dd bs=1M count=1 if=/dev/zero of=/tmp/foo conv=fdatasync; done
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.