GPG hat nicht genug Entropie


86

Ich habe eine Menge Prozesse im Hintergrund laufen, um genügend Entropie zu bekommen, aber ich scheitere immer noch.

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

Ich brauche eine Methode, um den Schlüssel zu generieren, der funktioniert. Ich versuche nämlich, einen Fehler zu machen.

Antworten:


112

Haben Sie sich RNG angesehen?

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

Auf deb Arten: sudo apt-get install rng-toolsum es einzurichten.

Führen Sie dann sudo rngd -r /dev/urandomvor dem Generieren der Schlüssel aus.

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


4
Im Ernst, Sie können auch sudo apt-get install rng-toolsUbuntu verwenden, anstatt sudo yum install rng-utilswie Fedora, da es kein rng-utilsPaket für Ubuntu gibt.
Jason Swett

4
Das Paket heißt rng-toolssowohl auf Fedora als auch auf EL6, daher vermute ich einen Tippfehler im verlinkten Artikel. Übrigens ist es eine gute Idee, hier die wesentlichen Teile der Antwort und den Link als Referenz anzugeben, falls der Link in Zukunft nicht mehr funktioniert.
Michael Hampton

11
Es gibt keine "Entropie geringer Qualität" oder "gefälschte Entropie" im Urandom. urandom ruft den gleichen Code wie / dev / random auf. Es ist nicht erforderlich, zusätzliche Zufälligkeiten in das CSPRNG einzuspeisen (außer zur Startzeit, und dort sollte sich Ihre Verteilung darum kümmern). Dies ist ein Mythos und sollte nicht verbreitet werden. Siehe zum Beispiel sockpuppet.org/blog/2014/02/25/safely-generate-random-numbers oder dieses Video: media.ccc.de/v/32c3-7441-the_plain_simple_reality_of_entropy
Sebastian Wiesinger


2
Der am häufigsten gewählte Kommentar ist Unsinn. leider sehe ich das viel auf SO. Warnungen (auch wenn sie völlig falsch sind) erhalten eine Menge Stimmen und keine Möglichkeit, sie zu korrigieren (keine Option zum Abwerten von Kommentaren), bedeutet, dass wir die Mythen nicht loswerden können.
Stijn de Witt

28

Ich konnte den Schlüssel von generieren

apt-get install rng-tools

In einem anderen SSH-Fenster öffnen

 gpg --gen-key

Kehren Sie zu Ihrer ersten SSH-Sitzung zurück und führen Sie sie aus

sudo rngd -r /dev/urandom

Lass dies laufen, bis gpg deine Schlüssel generiert!


9
Ich würde definitiv davon abraten, jemals /dev/urandomirgendwelche wichtigen Schlüssel zu generieren.
Andrew Barber

12
@ AndrewBarber Unsinn. Es ist die empfohlene Methode.
David Schwartz

3
@ AndrewBarber Es wurde explizit für diesen Zweck entwickelt. Grundsätzlich /dev/randomhandelt es sich um einen Designfehler. Es sollte nur beim ersten (jemals) Aufruf (beim ersten Start) blockiert werden, wenn noch keine Entropie gesammelt wurde. Wie bei anderen Betriebssystemen. Stattdessen haben wir jetzt zwei Pools. Verwenden Sie /dev/randomes einfach nie, es hat keine Vorteile.
Stijn de Witt

@ AndrewBarber was würdest du stattdessen empfehlen?
Qodeninja

13

Verwenden Sie, um die Anzahl der aktuell verfügbaren Entropiebytes zu überprüfen

cat /proc/sys/kernel/random/entropy_avail

Der Entropie-Eimer ist 4096 Byte groß, was sehr schnell erschöpft werden kann.

Mit diesem kleinen Readspeed-Tool ( http://1wt.eu/tools/readspeed/ ) können Sie messen, wie schnell der Entropiebehälter mit verschiedenen Methoden gefüllt wird.

Starten Sie zum Beispiel:

$ ./readspeed < /dev/random

und bewegen Sie die Maus. Sie werden sehen, dass "readspeed" den Entropieeimer leert, sobald er gefüllt ist, und wenn Sie die Maus bewegen, füllt er sich etwas.

Bei verschiedenen Methoden scheinen Tastatureingaben und Mausbewegungen am effizientesten zu sein, um diesen Eimer aufzufüllen. Netzwerkübertragungen und Festplattenkopien haben keinen großen Einfluss.

Schließlich gibt es Geräte zur Entropieerzeugung, wie das folgende: http://www.entropykey.co.uk/ .


4
Es gibt keine "minderwertige Entropie" im Urandom. urandom ruft den gleichen Code wie / dev / random auf. Dies ist ein Mythos und sollte nicht verbreitet werden. Siehe zum Beispiel sockpuppet.org/blog/2014/02/25/safely-generate-random-numbers oder dieses Video: media.ccc.de/v/32c3-7441-the_plain_simple_reality_of_entropy
Sebastian Wiesinger

Diese Antwort ist 5 Jahre alt. Wir dachten, dass Urandom damals nicht so sicher wie zufällig war, aber die Dinge haben sich seitdem geändert und Urandom gilt als sicher.
Julien Vehent

1
Tatsache ist, dass es von Anfang an sicher war. Die Warnungen waren auch vor 7 Jahren falsch.
Stijn de Witt

8

+1 für rng-tools

Falls Sie in der aktuellen Situation nicht weiterkommen - Sie haben keine Berechtigung, neue Software (rng-tools) auf einem kopflosen Server ohne angeschlossene Eingabehardware (Soundkarte, Tastatur, Maus) zu installieren. Sie können diesen einfachen Code von einem anderen Terminal ausführen, um die Entropie zu erweitern. Es spielt keine Rolle, ob Sie dies vor oder nach dem Start ausführengpg --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

Die erste Zeile ist das Starten einer neuen Bash-Shell mit niedrigerer Priorität (ich musste auf einem Server, der von vielen Benutzern gemeinsam genutzt wird, nett sein). Die till-Schleife ist unendlich. Denken Sie also daran, sie zu unterbrechen, sobald der Schlüssel generiert wurde. Es bewirkt lediglich, dass der Netzwerkverkehr die Entropie erhöht. Es überwacht auch den Zähler entropy_avail, um zu zeigen, wie er von gpg auf der anderen Seite gefüllt und geleert wird. In meinem Fall füllte sich der Zähler schnell auf 64 und wurde wieder auf 0 geleert. Ich habe mehr als 3 Stunden auf die 4096-Bit-Schlüsselgenerierung auf dem Server gewartet. Nachdem das Skript gestartet wurde, war es in weniger als 5 Minuten fertig.


Ich hatte auch keinen Root-Zugriff auf dem Remote-Server, und dies führte zu einer gewissen Entropie. Ich denke, die Bedingung sollte geändert werden [ $COUNT -lt 0 ]. Denn für ein System mit wirklich weniger Entropie erreicht es manchmal 0 und stoppt. GPG ist wirklich entropiehungrig.
Ajay Brahmakshatriya

Vielen Dank, das sollte für mich ausreichen, um eine Entrophie-Generation auf einer mit Luftspalten versehenen Box zu erzeugen. Außer ich werde kein Datum verwenden, da dies vorhersehbar ist
grepsedawk

7

Ich war fest entschlossen, Entropie auf meinem kopflosen Ubuntu 14.04-Server zu generieren, um einen 4096-Schlüssel mit zu generieren gpg --gen-key

Es gibt ein Paket zur Erzeugung von Entropie namens haveged. Beispiel für die Installation:

sudo apt-get install haveged

Das musste ich, sudo apt-get install rng-toolsda es sich bei dem folgenden Test um eine Abhängigkeit handelt.

Beispiel eines Tests, um festzustellen, ob Entropie durch haveged erzeugt wird:

cat /dev/random | rngtest -c 1000

Eine sehr kleine Anzahl von Fehlern ist in jedem Zufallszahlengenerator akzeptabel, aber Sie können erwarten, dass 998-1000 Erfolge sehr oft auftreten, wenn Sie den Schwebeflug verwenden.

Ich habe es in einem Tutorial hier herausgefunden:

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

Ich habe jetzt Schlüssel nach dem Laufen gpg --gen-key


0

Ich bin auf dieses Problem gestoßen, als ich pacman-key --initin Arch lief. Die anderen Lösungen hier funktionierten nicht gut für mich, aber ich fand, dass das einfache Pingen meines Routers gut funktionierte:ping -f ip.of.my.router



0

havegedist der beste Weg, aber wenn Sie nichts installieren können, können Sie manuell Entropie erzeugen. Diese Methode konnte gpg --gen-kenin 1-2 Minuten auf meinem Computer abgeschlossen werden (im Vergleich zu 10 Sekunden mit haveged). Es ist also ungefähr 10x langsamer.

Führen Sie dies in einem anderen Terminal aus, während gpg --gen-keyes ausgeführt wird:

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

Einzeiler:

while true; do cat /proc/sys/kernel/random/entropy_avail; dd bs=1M count=1 if=/dev/zero of=/tmp/foo conv=fdatasync; done
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.