Von Enten und Zufallsgeneratoren

Gespeichert von Matthias Heinz am Mi, 25.10.2017 - 11:07

Den Forschern Shaanan Cohney, Matthew D. Green und Nadia Heninger ist ein Angriff auf einen Zufallszahlengenerator gelungen. In ihrem Paper DUHK Attack beschreiben sie ausführlich, wie es ihnen gelungen ist Zufallszahlen vorherzusagen und damit verschlüsselte Verbindungen zu entschlüsseln und mitzulesen.

Der Angriff ist nicht ganz so fatal, wie KRACK, da er sich gegen den ANSI X9.31 Random Number Generator (RNG) richtet, der hauptsächlich in älteren Installationen zum Einsatz kommt. Eine weitere Voraussetzung dafür, dass der Angriff gelingen kann, ist, dass der Seed-Key, der Anfangswert des Zufallszahlengenerators, bekannt ist. Nichtsdestotrotz sollten Benutzer dieser alten Installationen prüfen, ob sie betroffen sind und gegebenfalls ein Update durchführen oder betroffene Geräte vom Netz nehmen.

Einige Leser mögen sich nun fragen: Zufallszahlengenerator? Warum ist der berechenbar und wieso hat der einen Startwert? Die Antwort hat etwas damit zu tun, dass Computer deterministisch sind, das bedeutet, dass alle Schritte vorhersagbar sind (auch, wenn sich das manchmal nicht so anfühlt). Für die Verschlüsselung braucht es aber Zufallszahlen, denn viele Verfahren basieren darauf, dass das Verhalten des Systems nicht vorhersagbar ist. Wie bei KRACK beschrieben müssen zum Beispiel die Primzahlen für RSA-Schlüssel zufällig sein.

An Zufallszahlen kann ein Computer aus zwei Quellen kommen. Einmal gibt es die Möglichkeit auf Signale aus der Umwelt zu hören, zum Beispiel Funkwellen aus einem breiten Spektrum oder ein Mikrofon, welches Geräusche macht oder Benutzereingaben. Diese externen Signale werden als weitgehend zufällig betrachtet, da sie ohne genaue Kenntnisse (gemeint ist Genauigkeit auf elementarer Ebene) der Umgebung des Systems nicht vorhersagbar sind. In Desktopsystemen werden noch Benutzereingaben, Netzwerkverkehr und viele andere Komponenten dafür genutzt. Diese Art der Zufallszahlen haben aber das Problem, dass sie nur recht langsam auftreten und viel zusätzliche Hardware brauchen.

Für Systeme, die schnell Zufallszahlen brauchen oder möglichst klein gehalten werden sollen, gibt es die Möglichkeit über mathematische Methoden Pseudozufallszahlen zu berechnen. Diese Zahlen sind nicht zufällig, erscheinen für eine außenstehnde Person aber so als wären sie zufällig. Der Computer berechnet diese Zahlen anhand eines hochlaufenden Zählers (der Seed-Key), damit bei jeder Berechnung eine andere Pseudozufallszahl rauskommt. Wie wir nun wissen sind Computer aber deterministisch und die Berechnung dieser Pseudozufallszahlen und das Hochzählen des Zählers laufen ebenfalls deterministisch, also vorhersagbar, ab.

Wird der Seed-Key nach jedem Neustart des Systems zurückgesetzt, weil fest im System gespeichert, dann kann ein Angreifer das für sich nutzen und die Zufallszahlen vorhersagen. Damit lassen sich dann vom Computer erzeugten geheimen Schlüssel berechnen und die eigentliche verschlüsselte Kommunikation kann mitgelesen werden, was bei DUHK Attack gemacht wird.

Als Gegenmaßnahme muss der aktuelle Seed-Key beim Runterfahren des Systems gespeichert werden, besser noch bei jeder Änderung. Denn auch wenn viele, vor allem eingebettete Systeme, mit dem gleichen Seed-Key erstmalig in Betrieb genommen werden, so wandern diese Keys im laufenden Betrieb sehr schnell auseinander, da Kommunikation zeitlich gesehen einen gewissen zufälligen Anteil hat und somit nicht alle System gleichmäßig ihren Seed-Key hochzählen.