Im folgenden Video: Linux-HOWTO: Sichern Sie Ihre Daten mit PGP, Teil 2 , wird gezeigt, wie Sie ein Schlüsselpaar mit erstellen gpg
. Ungefähr 1:50
sagt der Ausbilder Folgendes:
Während der Schlüsselgenerierung wird empfohlen , die Maus ein wenig zu bewegen, um die Zufallszahlenentropie für die Erstellung des Schlüsselpaars zu erhöhen.
Dies scheint mir ein Mythos zu sein, zumal Befehlszeilentools normalerweise nicht vom Cursor beeinflusst werden sollten. Andererseits habe ich keine Ahnung, wie der Zufallszahlengenerator von Linux funktioniert, ob er von der GUI gemeinsam genutzt wird oder von dieser unabhängig ist. Gibt es einen Bestand in dem, was er behauptet, oder ist dies ein Beispiel für die Programmierung von Frachtkult ?
Antworten:
Das ist ein Körnchen Wahrheit, tatsächlich mehr Wahrheit als Mythos, aber dennoch spiegelt die Aussage ein grundlegendes Missverständnis dessen wider, was vor sich geht. Ja, das Bewegen der Maus beim Generieren eines Schlüssels mit GPG kann eine gute Idee sein. Ja, das Bewegen der Maus trägt zu einer Entropie bei, die Zufallszahlen zufällig macht. Nein, durch Bewegen der Maus wird der Schlüssel nicht sicherer.
Alle guten Zufallsgeneratoren, die für die Kryptografie geeignet sind, und Linux-Generatoren in dieser Kategorie, bestehen aus zwei Komponenten:
Die Entropie muss von einer Quelle stammen, die sich außerhalb des Computers befindet. Der Benutzer ist eine Entropiequelle. Was der Benutzer tut, ist meistens nicht zufällig, aber das feine Timing von Tastenanschlägen und Mausbewegungen ist so unvorhersehbar, dass es leicht zufällig ist - nicht sehr zufällig, aber nach und nach sammelt es sich an. Andere mögliche Entropiequellen sind das Timing von Netzwerkpaketen und weißem Rauschen von Kamera oder Mikrofon. Unterschiedliche Kernelversionen und -konfigurationen verwenden möglicherweise unterschiedliche Quellen. Einige Computer verfügen über dedizierte Hardware-RNG-Schaltkreise, die auf radioaktivem Zerfall oder weniger eindrucksvoll auf instabilen elektronischen Schaltkreisen basieren. Diese dedizierten Quellen sind besonders nützlich bei eingebetteten Geräten und Servern, die beim ersten Start ein ziemlich vorhersehbares Verhalten aufweisen können, ohne dass ein Benutzer seltsame Dinge tun muss.
Linux stellt Programmen Zufallszahlen über zwei Geräte zur Verfügung:
/dev/random
und/dev/urandom
. Das Lesen von beiden Geräten gibt eine kryptografische Qualität zurück. Beide Geräte verwenden denselben internen RNG-Status und denselben Algorithmus, um den Status zu transformieren und zufällige Bytes zu erzeugen. Sie haben besondere Einschränkungen, die keinen von ihnen zum richtigen machen:/dev/urandom
kann vorhersagbare Daten zurückgeben, wenn das System noch keine ausreichende Entropie angesammelt hat./dev/random
berechnet die Menge der verfügbaren Entropie und Blöcke, wenn nicht genug vorhanden ist. Dies hört sich gut an, außer dass die Berechnung auf theoretischen Überlegungen basiert, die dazu führen, dass die Menge der verfügbaren Entropie mit jedem Ausgangsbit linear abnimmt. Neigt daher/dev/random
dazu, sehr schnell zu blockieren.Linux-Systeme speichern den internen RNG-Status auf der Festplatte und stellen ihn beim Start wieder her. Daher überträgt sich die Entropie von einem Schuh zum nächsten. Das einzige Mal, wenn einem Linux-System die Entropie fehlt, ist die Neuinstallation. Sobald das System eine ausreichende Entropie aufweist, nimmt die Entropie nicht ab. Nur die fehlerhafte Berechnung von Linux nimmt ab. Für weitere Erklärungen dieser Überlegung
/dev/urandom
eignet sich read zum Generieren eines kryptografischen Schlüssels durch einen professionellen Kryptographen. Siehe aso Can erklären Sie sich die Entropie Schätzung in random.c verwendet .Durch Bewegen der Maus wird dem System mehr Entropie hinzugefügt. Aber gpg kann nur aus lesen
/dev/random
, nicht/dev/urandom
(einem Weg , um dieses Problem zu lösen ist , um/dev/random
das gleiche 1: 9 - Gerät wie/dev/urandom
), so dass es nie in Gefahr Aufnahme nicht-zufall genug Zufallszahlen ist. Wenn Sie die Maus nicht bewegen, ist die Taste so zufällig wie möglich. aber was passieren kann ist, dass gpg in einem Lesevorgang blockiert wird/dev/random
und darauf wartet, dass der Entropiezähler des Kernels steigt.quelle
add_input_randomness
indrivers/input/input.c
, aber ich weiß nicht, unter welchen Umständen es tatsächlich Entropie injiziert.GPG verwendet den Linux (Kernel) Zufallszahlengenerator. Der Kernelgenerator erhält Entropie (Zufälligkeit) von allen Arten von Orten, darunter das Interrupt-Timing für bestimmte Interrupts. Durch Bewegen der Maus (und Tippen, Festplattenaktivität usw.) werden Interrupts generiert.
Das Bewegen der Maus wird also möglicherweise in den Zufallszahlengenerator eingespeist. Ob dies jedoch der Fall ist, hängt von der genauen verwendeten Kernelversion ab. Neuere Versionen verwenden (zumindest in meinen Tests) keine Tastatur- oder Maus-Interrupts für die Entropie. Die Festplattenaktivität ist jedoch aktiv (z. B. führt das Ausführen zu
sync
einer potenziell großen Menge an Entropie, je nachdem, wie viel gespült wird).Kurz gesagt: Dies gilt nicht für aktuelle Linux-Versionen. Es war bei älteren.
Wenn dem Generator jedoch die Entropie ausgeht, sollte er einfach anhalten. Ihre Schlüsselgenerierung bleibt also hängen, bis eine gewisse Entropie generiert wird. Es wäre also ein ewiges Problem, kein Sicherheitsproblem.
Sie können sehen, wie viel Entropie von verfügbar ist
cat /proc/sys/kernel/random/entropy_avail
.quelle
rngd
, um den Entropiepool künstlich zu versorgen.haveged
Es ist ein weiteres gutes Werkzeug, um den Entropiepool künstlich zu versorgen.Tails hat eine extrem schnelle Schlüsselgenerierung, weil es
haveged
installiert hat:quelle