Ich kann mit einem Computer ein großes Durcheinander anrichten, aber heute geht's um ein ordentliches Chaos. Ich will Zufallswerte von hoher Qualität, das bedeutet von minimaler Vorhersagbarkeit, erzeugen. Wer in die Katakomben kryptographischer Funktionen hinabsteigt, benötigt einen guten und schnellen Zufallsgenerator, etwa um einen Schlüssel aus wirklich zufälligen, nicht vorhersagbaren Daten zu generieren.
An qualitativ hochwertiges Chaos zu gelangen erfordert Kreativität. Findige Köpfe haben Methoden ersonnen, Zufallszahlen aus der Blasenbildung in einer Lavalampe zu gewinnen, aus dem Rauschen eines übersteuerten Mikrofoneingangs und den Luminanzwerten eines Kamerasensors in einer schwarzen verschlossenen Box. All das funktioniert gut, ist aber sehr langsam.
Gut und wenig oder viel und schlecht
Auf Linux-Systemen ist es das gleiche Dilemma. Im Blockdevice »/dev/random«
steht eine gewisse Menge von Zufallsdaten bereit, die der Kernel aus unvorhersehbaren Hardware-Interrupts (Tastatur, Maus, Platten, …) errechnet. Das ist der Grund, warum manche Schlüsselgeneratoren den Benutzer dazu auffordern, wild auf die Tastatur einzudreschen, während der Schlüssel erzeugt wird. Die Qualität des Zufalls aus »/dev/random«
reicht für die meisten kryptographischen Zwecke aus, nicht aber die Menge.
Andererseits gibt es »/dev/urandom«
, das eine große Menge Zufallsdaten von minderer Qualität liefert, die für Verschlüsselungstechniken wertlos sind. Zu allem Überfluss kommen sich beide in die Quere, denn wenn ich »/dev/urandom«
um Zufallswerte bitte, saugt er zunächst einmal den Entropie-Pool seines Bruders »/dev/random«
leer, um die eigenen Ergebnisse ein wenig aufzuhübschen.
Prozessorgeflimmer
Einen Lösung verspricht Havege (Hardware Volatile Entropy Gathering and Expansion, [1]). Das Verfahren macht sich den Umstand zunutze, dass moderne Prozessoren Elemente zur Verzweigungsvorhersage (Branch Prediction), Caches, Pipelines und vieles mehr besitzen. Das normale Benutzen der CPU löst ein Trommelfeuer an Statusänderungen bei Tausenden dieser Elemente aus, und genau daraus produziert das Havege-Verfahren viel und hochwertigen Zufall.
Die Linux-Implementation des Havege-Verfahrens heißt wenig überraschend Haveged [2]. Er gehört zum Lieferumfang der meisten Linux-Distributionen und geht nach der Installation ganz ohne Umschweife, sprich ohne Konfiguration, ans Werk. Auf meinem Ubuntu-Testsystem verzehnfachte sich die Größe des verfügbaren Entropie-Pools nach dem Start von Haveged binnen weniger Sekunden (siehe Abbildung 1). Den Füllstand des Pools teilt mir der Kernel freundlicherweise unter »/proc/sys/kernel/random/entropy_avail«
fortlaufend mit.
Abbildung 1: Auf dem Testsystem füllt sich der Entropie-Pool (y-Achse, Maßeinheit Byte) nach dem Start von Haveged binnen Sekunden.
Mein Fazit: Wer mit kryptographischen Funktionen arbeitet, und sei es nur, dass er gelegentliche einen Schlüssel feilt, sollte Haveged installieren. Der Daemon arbeitet unauffällig und praktisch wartungsfrei, ist aber sehr wirksam. Es ist kein Zufall, dass er so lange zu meinem Standard-Werkzeugkasten gehören soll, bis ich eine Methode gefunden habe, den Zustand meines Arbeitszimmer kryptographisch abzubilden. (jk)
Charly Kühnast administriert Unix-Systeme im Rechenzentrum Niederrhein in Kamp-Lintfort. Zu seinen Aufgaben gehören die Sicherheit und Verfügbarkeit der Firewalls und der DMZ. Im heißen Teil seiner Freizeit frönt er dem Kochen, im feuchten Teil der Süßwasseraquaristik und im östlichen lernt er Japanisch.