
Im folgenden Video:Linux-Anleitung: Sichern Sie Ihre Daten mit PGP, Teil 2wird Ihnen gezeigt, wie Sie mit ein Schlüsselpaar erstellen gpg
. Bei etwa 1:50
sagt der Kursleiter folgendes:
Während der Schlüssel generiert wird, ist es sinnvoll,Bewegen Sie die Mausein wenig, um ihm etwas mehr Zufallszahlen-Entropie für die Erstellung des Schlüsselpaares zu geben.
Das scheint mir ein Mythos zu sein, insbesondere da Kommandozeilen-Tools normalerweise nicht vom Cursor beeinflusst werden sollten. Andererseits habe ich keine Ahnung, wie der Zufallszahlengenerator von Linux funktioniert, ob er von der GUI geteilt wird oder unabhängig davon ist. Ist an dem, was er behauptet, etwas dran, oder ist das ein Beispiel fürCargo-Kult-Programmierung?
Antwort1
Daran ist ein Körnchen Wahrheit, eigentlich mehr Wahrheit als Mythos, aber dennoch spiegelt diese Aussage ein grundlegendes Missverständnis dessen wider, was vor sich geht. Ja, das Bewegen der Maus während der Generierung eines Schlüssels mit GPG kann eine gute Idee sein. Ja, das Bewegen der Maus trägt etwas Entropie bei, die Zufallszahlen zufällig macht. Nein, das Bewegen der Maus macht den Schlüssel nicht sicherer.
Alle guten Zufallsgeneratoren, die für die Kryptographie geeignet sind – und der von Linux gehört in diese Kategorie – haben zwei Komponenten:
- EinEntropieQuelle, die nicht deterministisch ist. Der Zweck der Entropie besteht darin, den Zufallszahlengenerator mit unvorhersehbaren Daten zu booten. Die Entropiequelle muss nicht deterministisch sein: Andernfalls könnte ein Angreifer dieselbe Berechnung reproduzieren.
- APseudozufallszahlengenerator, das auf deterministische Weise aus einem sich ändernden internen Zustand unvorhersehbare Zufallszahlen erzeugt.
Die Entropie muss von einer Quelle außerhalb des Computers kommen. Der Benutzer ist eine Quelle der Entropie. Was der Benutzer tut, ist größtenteils nicht zufällig, aber das genaue Timing von Tastenanschlägen und Mausbewegungen ist so unvorhersehbar, dass es leicht zufällig ist – nicht sehr zufällig, aber nach und nach akkumuliert es sich. Andere mögliche Quellen der Entropie sind das Timing von Netzwerkpaketen und weißes Rauschen von Kameras oder Mikrofonen. Verschiedene Kernelversionen und -konfigurationen können unterschiedliche Quellen verwenden. Einige Computer haben dedizierte Hardware-RNG-Schaltkreise, die auf radioaktivem Zerfall oder, weniger beeindruckend, instabilen elektronischen Schaltkreisen basieren. Diese dedizierten Quellen sind besonders nützlich bei eingebetteten Geräten und Servern, die beim ersten Booten ein ziemlich vorhersehbares Verhalten aufweisen können, ohne dass ein Benutzer seltsame Dinge tut.
Linux stellt Programmen Zufallszahlen über zwei Geräte zur Verfügung:/dev/random
Und/dev/urandom
. Das Lesen von beiden Geräten liefert kryptografische Qualität. Beide Geräte verwenden denselben internen RNG-Zustand und denselben Algorithmus, um den Zustand umzuwandeln und zufällige Bytes zu erzeugen. Sie haben besondere Einschränkungen, die keines von beiden zum richtigen Gerät machen:
/dev/urandom
kann vorhersehbare Daten zurückgeben, wenn das System noch nicht genügend Entropie angesammelt hat./dev/random
berechnet die Menge der verfügbaren Entropie und blockiert, wenn nicht genug vorhanden ist. Das klingt gut, allerdings basiert die Berechnung auf theoretischen Überlegungen, die die Menge der verfügbaren Entropie mit jedem Ausgabebit linear abnehmen lassen. Dadurch/dev/random
neigt es dazu, sehr schnell zu blockieren.
Linux-Systeme speichern den internen RNG-Status auf der Festplatte und stellen ihn beim Booten wieder her. Daher wird die Entropie von einem Bootvorgang zum nächsten übertragen. Ein Linux-System kann nur dann an Entropie mangeln, wenn es frisch installiert ist. Sobald im System ausreichend Entropie vorhanden ist, nimmt die Entropie nicht ab; nur die fehlerhafte Berechnung von Linux nimmt ab. Weitere Erläuterungen zu dieser Überlegung finden Sie unter/dev/urandom
ist geeignet, einen kryptographischen Schlüssel zu erzeugen, von einem professionellen Kryptographen. Siehe auchKönnen Sie die in random.c verwendete Entropieschätzung erklären?.
Das Bewegen der Maus fügt dem System mehr Entropie hinzu. Abergpg kann nur lesen von /dev/random
, nicht/dev/urandom
/dev/random
(Eine Möglichkeit, dieses Problem zu lösen, besteht darin , das gleiche Gerät im Maßstab 1:9 wie herzustellen /dev/urandom
), sodass nie die Gefahr besteht, dass nicht ausreichend zufällige Zufallszahlen empfangen werden.Wenn Sie die Maus nicht bewegen, ist die Taste so zufällig wie möglich. Es kann jedoch passieren, dass GPG blockiert wird.beim Lesen von und /dev/random
wartend, bis der Entropiezähler des Kernels steigt.
Antwort2
GPG verwendet den Zufallszahlengenerator von Linux (Kernel). Der Kernelgenerator erhält Entropie (Zufälligkeit) von allen möglichen Quellen, unter anderem von der Interrupt-Zeit für bestimmte Interrupts. Das Bewegen der Maus (und Tippen, Festplattenaktivität usw.) erzeugt Interrupts.
Das Bewegen der Maus kann also tatsächlich in den Zufallszahlengenerator einfließen. Aber ob das der Fall ist, hängt von der genauen verwendeten Kernelversion ab; neuere Versionen verwenden (zumindest in meinen Tests) keine Tastatur- oder Mausinterrupts für die Entropie. Die Festplattenaktivität tut dies jedoch (so sync
wird z. B. beim Ausführen eine potenziell große Menge an Entropie hinzugefügt, je nachdem, wie viel gelöscht wird).
Kurz gesagt: Dies trifft auf aktuelle Linux-Versionen nicht zu. Auf älteren Versionen traf es zu.
Wenn dem Generator jedoch die Entropie ausgeht, sollte er einfach anhalten – Ihre Schlüsselgenerierung bleibt also hängen, bis etwas Entropie generiert wird. Es wäre also ein Problem, das ewig dauert, kein Sicherheitsproblem.
Sie können sehen, wie viel Entropie verfügbar ist, indem Sie cat /proc/sys/kernel/random/entropy_avail
.
Antwort3
Tails verfügt über eine extrem schnelle Schlüsselgenerierung, da es Folgendes haveged
installiert hat:
sudo apt-get install haveged