Leider taugen diese in der Regel für kryptographische Applikationen, die besonders hohe Forderungen an die Qualität der Generatoren stellen (müssen), überhaupt nicht. Schwächen bei der Erzeugung von Zufallszahlen stellen einen guten Angriffspunkt für die Kryptoanalyse dar und haben vielfach erfolgreiche Attacken auf konkrete Implementierungen von Verfahren und Protokollen ermöglicht.
Es ist natürlich klar, daß die typischen, durch Computer-Programme algorithmisch realisierten Zufallszahlen-Generatoren keine echt zufälligen Folgen liefern können. Donald Knuth (der Vater des Textsatzsystems TeX) zitiert im zweiten Band seines bekannten Buches The Art of Computer Programming, der den Titel Seminumerical Algorithms trägt, John von Neumann mit den Worten:
"Anyone who considers arithmetical methods of producing random digits is, of course, in a state of sin."Mit Hilfe eines Computer-Programms lassen sich allerdings Pseudozufallszahlen-Generatoren (pseudorandom number generators, kurz PRNG) konstruieren. Darunter wollen wir Algorithmen verstehen, deren Ausgabe zufällig aussieht, d.h., statistische Tests sollten keinen Hinweis darauf liefern, daß die Zahlen keiner echt zufälligen Folge entstammen.
So erwarten wir z.B. eine Gleichverteilung, d.h., alle Zahlen sollten ungefähr gleich oft vorkommen. Außerdem sollte die Periode (d.h. die Anzahl der Werte, nach denen sich die gesamte Ausgabe wiederholt) so groß sein, daß die tatsächlich verwendete Teilfolge keinen periodischen Charakter trägt. Genauere Informationen zu verschiedenen in der Praxis üblichen Tests der Qualität von PRNGs finden sich z.B. bei Menezes.
Für kryptographisch sichere Pseudozufallszahlen-Generatoren gilt eine zusätzliche Forderung: Es darf rechnerisch nicht möglich sein, die nächste Zahl vorherzusagen, obwohl man den Algorithmus und alle zuvor erzeugten Zahlen kennt. Die Sicherheit beruht auf der Geheimhaltung des Schlüssels, von dem die jeweils generierte Folge eindeutig abhängt, da er den Anfangszustand des Generators bestimmt. Dadurch lassen sich die Ausgaben, im Gegensatz zu echten Zufallsfolgen, immer wieder reproduzieren.
Kryptographisch sichere PRNGs sind wie andere kryptographische Verfahren auch Gegenstand kryptoanalytischer Attacken und können daher ebenfalls gebrochen werden. Deshalb ist es sehr wichtig, sie gegen Angriffe resistent zu machen.
Wir wollen nachfolgend einige konkrete Realisierungen von kryptographisch sicheren PRNGs kurz vorstellen, die z.T. schon an anderer Stelle angesprochen worden sind.
Statt des einfachen Zählers könnte man auch die Ausgabe eines anderen guten Zufallszahlen-Generators als Eingabe verwenden.
X9.17 nutzt Triple DES als Blockchiffre. Folgende Elemente spielen eine Rolle:
Der Aufbau des Generators läßt sich so veranschaulichen:
Die verwendeten Symbole haben folgende Bedeutung:
Die Entstehung der Ergebnisse können wir formal so beschreiben:
DTi Wert für Datum und Uhrzeit zu Beginn des i-ten Schrittes Vi Seed zu Beginn des i-ten Schrittes Ri die im i-ten Schritt erzeugte Pseudozufallszahl K1, K2 die für alle Schritte gemeinsam genutzten 2 DES-Keys
Ri = EDEK1, K2 [ EDEK1, K2 (DTi) XOR Vi ] Vi+1 = EDEK1, K2 [ EDEK1, K2 (DTi) XOR Ri ]
Pseudozufallszahlen werden bei
verwendet.
Anmerkung zu CFB: Bei PGP 2.x wird zur symmetrischen Verschlüsselung nicht der CBC, sondern der 64-bit Cipher Feedback Mode von IDEA eingesetzt.
PGP 2.x verwaltet einen Puffer von echt zufälligen Bits. Als zufälliger Input dienen die Tastatureingaben der Nutzer, wobei sowohl die eingegebenen 8-Bit-Werte als auch die Zeitabstände zwischen den Tastenanschlägen ausgewertet werden. Der zur Erzeugung der Pseudozufallszahlen verwendete Algorithmus basiert auf ANSI X9.17, wobei allerdings IDEA statt Triple DES als Blockchiffre zum Einsatz kommt.