GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Zufallszahl-Entropie für GPG-Schlüssel hinzufügen?

Darin steckt ein Körnchen Wahrheit, eigentlich mehr Wahrheit als Mythos, aber nichtsdestotrotz 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 etwas Entropie bei, das Zufallszahlen zufällig macht. Nein, das Bewegen der Maus macht den Schlüssel nicht sicherer.

Alle guten Zufallsgeneratoren, die für Kryptografie geeignet sind, und der von Linux gehört zu dieser Kategorie, haben zwei Komponenten:

  • Eine Entropiequelle, 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 Gegner dieselbe Berechnung reproduzieren.
  • Ein Pseudozufallszahlengenerator, der aus einem sich ändernden internen Zustand auf deterministische Weise unvorhersehbare Zufallszahlen erzeugt.

Die Entropie muss aus einer Quelle stammen, die außerhalb des Computers liegt. Der Benutzer ist eine Entropiequelle. Was der Benutzer tut, ist meistens 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 häuft es sich an. Andere potenzielle Entropiequellen sind das Timing von Netzwerkpaketen und das weiße Rauschen von Kameras oder Mikrofonen. Unterschiedliche Kernel-Versionen und -Konfigurationen können unterschiedliche Quellen verwenden. Einige Computer verfügen über dedizierte Hardware-RNG-Schaltkreise, die auf radioaktivem Zerfall oder, weniger beeindruckend, instabilen elektronischen Schaltkreisen basieren. Diese dedizierten Quellen sind besonders nützlich in eingebetteten Geräten und Servern, die beim ersten Start ein ziemlich vorhersehbares Verhalten zeigen können, ohne dass ein Benutzer seltsame Dinge tut.

Linux stellt Programmen über zwei Geräte Zufallszahlen zur Verfügung:/dev/random und /dev/urandom . Das Lesen von beiden Geräten gibt kryptografische Qualität zurück. 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 sie nicht richtig machen:

  • /dev/urandom kann vorhersagbare Daten zurückgeben, wenn das System noch nicht genügend Entropie angesammelt hat.
  • /dev/random berechnet die Menge an verfügbarer Entropie und blockiert, wenn nicht genug vorhanden ist. Das hört sich gut an, nur dass die Berechnung auf theoretischen Überlegungen basiert, die die Menge an verfügbarer Entropie mit jedem ausgegebenen Bit linear abnehmen lassen. Also /dev/random neigt 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 Start zum nächsten übertragen. Die einzige Zeit, in der es einem Linux-System an Entropie mangelt, ist, wenn es frisch installiert ist. Sobald genügend Entropie im System 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, um einen kryptografischen Schlüssel durch einen professionellen Kryptografen zu generieren. Siehe auch Können Sie die in random.c verwendete Entropieschätzung erklären?

Das Bewegen der Maus fügt dem System mehr Entropie hinzu. Aber gpg kann nur ab /dev/random lesen , nicht /dev/urandom (Eine Möglichkeit, dieses Problem zu lösen, besteht darin, /dev/random dasselbe 1:9-Gerät wie /dev/urandom ), es besteht also nie die Gefahr, nicht zufällig genug Zufallszahlen zu erhalten. Wenn Sie die Maus nicht bewegen, ist der Schlüssel so zufällig wie möglich; aber was passieren kann, ist, dass gpg blockiert wird in einem Lesevorgang von /dev/random , und wartet darauf, dass der Entropiezähler des Kernels steigt.


GPG verwendet den Zufallszahlengenerator von Linux (Kernel). Der Kernel-Generator erhält Entropie (Zufälligkeit) von allen möglichen Stellen, darunter das Interrupt-Timing für bestimmte Interrupts. Das Bewegen der Maus (und Tippen, Festplattenaktivität usw.) erzeugt alle Interrupts.

Das Bewegen der Maus speist also tatsächlich potenziell in den Zufallszahlengenerator ein. Aber ob dies der Fall ist, hängt von der genauen verwendeten Kernel-Version ab; Neuere Versionen verwenden (zumindest in meinen Tests) keine Tastatur- oder Maus-Interrupts für die Entropie. Datenträgeraktivität jedoch (also z. B. Ausführen von sync wird eine potenziell große Menge an Entropie hinzufügen, je nachdem, wie viel gespült wird).

Kurzum:Auf aktuellen Linux-Versionen trifft das nicht zu. Es war auf älteren.

Wenn dem Generator jedoch die Entropie ausgeht, soll er einfach anhalten – Ihre Schlüsselgenerierung bleibt also hängen, bis etwas Entropie erzeugt wird. Es wäre also ein ewig dauerndes Problem, kein Sicherheitsproblem.

Mit cat /proc/sys/kernel/random/entropy_avail können Sie sehen, wie viel Entropie verfügbar ist .


Linux
  1. Linux – Werkzeug zur Messung der Entropiequalität?

  2. Zufallszahl zwischen Bereich in Shell

  3. Wie wähle ich eine statische Portnummer für eine benutzerdefinierte App aus?

  4. Erklären Sie in einfachem Englisch die verfügbare Entropie

  5. GPG hat nicht genug Entropie

Bash für Schleife

Bash For Loop – Die praktischste Anleitung

Generieren Sie SSH-Schlüssel für die passwortlose Anmeldung in Ubuntu

Werkzeug zur Messung der Entropiequalität?

Durchsuchen einer Reihe von Dateien nach einem String in LInux

Hinzufügen einer zufälligen Verzögerung für einen Linux-Befehl