Generieren Sie eine Entropie für den PGP-Schlüssel


12

Ich bin remote auf einer VM angemeldet und versuche, einen 4096-Bit-PGP-Schlüssel zu generieren. Dieser hängt sich nur für immer auf, da keine Entropie vorhanden ist. Da ich über den Remotedesktop arbeite, wird die Mausbewegung wahrscheinlich nicht als Entropie erkannt.

Wie kann ich welche generieren?

Ich habe es versucht, cat /dev/urandom > /dev/nullaber das hilft nicht.

Antworten:


13

Abrufen von Daten aus der /dev/randomoder /dev/urandomdefinitiv nicht gehen zu helfen, all es ist erschöpfen Ihre Entropiepool tun wird, was noch schlimmer das Problem zu machen. Der Hauptunterschied zwischen diesen beiden Dateien besteht darin, dass der Kernel selbst dann, wenn die Entropie urandomaufgebraucht ist, weiterhin zufällige Daten von geringerer Qualität generiert und randomblockiert, bis er neue zufällige Daten von hoher Qualität erfassen kann. PGP benötigt die höchstmöglichen Zufallsdaten, um sichere Schlüssel zu generieren. Daher werden diese immer verwendet /dev/random.

Wenn Sie gute Zufallsdaten haben oder einige von einem anderen Server exportieren /dev/random, können Sie catdiese in Ihren Server übertragen /dev/random, um mehr Entropie zu erzielen. Sie sollten jedoch niemals catzweimal dieselbe Datei speichern /dev/random.

Wenn Ihnen häufig die Entropie ausgeht , können Sie auch so etwas wie haveged installieren , einen Daemon, der die Entropie im Hintergrund neu generiert und /dev/randomnach Bedarf auffüllt .

Es kann auch verlockend sein, Symlinks /dev/randomzu erstellen /dev/urandom, dies sollte jedoch als Sicherheitsrisiko angesehen werden, da jeder damit generierte Schlüssel möglicherweise weniger sicher ist als er sollte. Während dies für eine weniger kritische Anwendung hilfreich sein kann, müssen Sie jede andere mögliche Verwendung in Betracht ziehen /dev/random, einschließlich anderer Benutzer, die ihre eigenen Schlüssel, CSR usw. generieren.


Beachten Sie, dass FreeBSD /dev/randomein PRNG hoher Qualität ist und normalerweise nicht blockieren sollte.
Kevin

@ Kevin /dev/randomsind qualitativ hochwertige PRNG auf modernen BSD und Linux, sicher. Es wird jedoch blockiert, wenn nicht genügend Entropie verfügbar ist. Auf der anderen Seite /dev/urandomwird nicht geblockt, wenn nicht genug verfügbar ist, aber die Qualität der Zufälligkeit kann in diesem Fall leiden. In den Details gibt es viele Feinheiten zwischen zufälligen und zufälligen Implementierungen zwischen Linux und den verschiedenen BSDs, aber das obige sollte für alle AFAIK zutreffen.
Huygens,

Unter Linux können Sie mehr Entropie erzeugen, indem Sie einfach einen Host ping 8.8.8.8anpingen ( z. B. ), wenn Sie einen anderen Netzwerkhost besitzen und versuchen, alle 100 ms Pings zu erhalten (wenn Ihre RTT <100 ms ist). Und / oder verwenden Sie find, um nach Dateien auf Ihrer Festplatte zu suchen und den RAM-Cache zwischen den einzelnen Dateisuchen zu leeren.
Huygens

@Huygens: Öffne die von mir verlinkte Manpage und Ctrl + F "kern.random.sys.seed"; Standardmäßig wird /dev/randomFreeBSD nicht blockiert.
Kevin

1
@ Kevin Ja, Sie haben Recht, Entropie-Pooling oder Ernte sind vielleicht zwei verschiedene Arten, PRNG zu "aussäen". Und nach einigen Tests mit meiner BSD-Box habe ich herausgefunden, dass Zufall und Urandom sich gleich verhalten und blockieren, wenn sie nicht gut genug PRNG generieren können. Versuchen Sie, das Programm dd if=/dev/random of=/tmp/rndtest bs=64M count=1nach einem Neustart auszuführen. Es dauerte zwei aufeinanderfolgende Durchläufe, bis die Zeit zum Generieren der 64-MB-Datei angestiegen war. Ich dachte, ich würde diesen Effekt nicht mit urandom als Eingabe sehen, aber FreeBSD scheint im Gegensatz zu Linux auch damit zu blockieren.
Huygens


4

Ich würde empfehlen, Ihre gpg-Schlüssel auf Ihrem lokalen Computer zu generieren, der eine viel bessere Zufälligkeit aufweist als der Remote-Computer. Migrieren Sie anschließend die Schlüssel mithilfe von SSH auf Ihren Remotecomputer.

Lokale Generierung ist schneller (mehr Quelle für Entropie) und sicherer (niemand kann den Prozess ausspionieren, wenn Ihr Computer nicht infiziert ist, bessere Zufälligkeit).

Wenn Sie diese weiterhin remote generieren möchten: Unter Linux können Sie mehr Entropie erzeugen, indem Sie einfach einen Host ping 8.8.8.8anpingen ( z. B. ), wenn Sie einen anderen Netzwerkhost besitzen, und versuchen, alle 100 ms Pings zu erhalten (wenn Ihre RTT <100 ms ist). Und / oder verwenden Sie find, um nach Dateien auf Ihrer Festplatte zu suchen und den RAM-Cache zwischen den einzelnen Dateisuchen zu leeren.

Sie können havegeddie Einschränkungen auch installieren, aber lesen, wenn Sie sie in einer virtuellen Umgebung ausführen : https://wiki.archlinux.org/index.php/Haveged#Virtual_machines


Für mich ist dies die richtige Lösung - +1 von mir.
MadHatter

3

Auf Debian-basierten Systemen können Sie das rng-toolsPaket mit atp-get installieren und dann den Dämon starten, um Entropie zu erzeugen:

echo HRNGDEVICE=/dev/urandom >> /etc/default/rng-tools && service rng-tools restart

Auf CentOS-6-Servern ist der rngDämon als eines der Basistools installiert (zumindest auf den meisten Systemen, auf denen ich gearbeitet habe), und Sie können den folgenden Befehl ausführen, um ihn zu starten, um Entropie zu generieren:

sed -i \'s|EXTRAOPTIONS=\"\"|EXTRAOPTIONS=\"-r /dev/urandom\"|g\' /etc/sysconfig/rngd && service rngd restart

Ich denke nicht, dass es klug ist, Urandom als Quelle für rngd zu verwenden. Es wird helfen, die verfügbare Entropie schneller zu erschöpfen, und sobald es erschöpft ist, wird es eine voreingenommene Quelle für Entropie sein. Also würde ich diese Lösung vermeiden.
Huygens

1
sudo yum install haveged && sudo systemctl start haveged

Funktioniert definitiv auf einer CentOS 7.2 VM. Manchmal möchten Sie GPG-Schlüssel auf einem virtuellen Computer erstellen, wenn Sie einen Haufen erstellen und Ihren Schlüsselbund intakt lassen möchten.

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.