Für kryptografische Zwecke ist es erforderlich, dass der Strom "rechnerisch nicht von gleichmäßig zufälligen Bits zu unterscheiden" ist. "Computergestützt" bedeutet, dass es nicht wirklich zufällig sein muss, sondern dass es jedem ohne Zugang zu Gottes eigenem Computer so erscheint.
In der Praxis bedeutet dies, dass das System zuerst eine Folge von n wirklich zufälligen Bits erfassen muss. n muss groß genug sein, um eine erschöpfende Suche zu verhindern, dh es muss unmöglich sein, alle 2 ^ n Kombinationen von n Bits auszuprobieren . Dies wird in Bezug auf die heutige Technologie erreicht, solange n größer als etwa 90 ist, Kryptographen jedoch nur Zweierpotenzen lieben. Daher ist es üblich, n = 128 zu verwenden .
Diese n zufälligen Bits werden erhalten, indem "physikalische Ereignisse" gesammelt werden, die für die Physik unvorhersehbar sein sollten. Normalerweise wird das Timing verwendet: Die CPU verfügt über einen Zykluszähler, der mehrere Milliarden Mal pro Sekunde aktualisiert wird, und einige Ereignisse treten mit unvermeidlichem Jitter auf (eingehende Netzwerkpakete, Mausbewegungen, Tastenanschläge ...). Das System codiert diese Ereignisse und "komprimiert" sie dann durch Anwenden einer kryptografisch sicheren Hash-Funktion wie SHA-256 (die Ausgabe wird dann abgeschnitten, um unsere n Bits zu erhalten). Was hier zählt, ist, dass die Codierung der physikalischen Ereignisse genug Entropie hat : grob gesagt, dass diese Ereignisse zusammen mindestens 2 ^ n angenommen haben könntenKombinationen. Die Hash-Funktion sollte per Definition gute Arbeit leisten, um diese Entropie in einem n- Bit-String zu konzentrieren.
Sobald wir n Bits haben, verwenden wir einen PRNG (Pseudo-Random Number Generator), um so viele Bits wie nötig herauszukurbeln. Ein PRNG wird als kryptografisch sicher bezeichnet, wenn unter der Annahme, dass es über einen ausreichend breiten unbekannten n- Bit-Schlüssel arbeitet, seine Ausgabe rechnerisch nicht von gleichmäßig zufälligen Bits zu unterscheiden ist. In den 90er Jahren war RC4 eine beliebte Wahl , die sehr einfach zu implementieren und recht schnell ist. Es stellte sich jedoch heraus, dass es messbare Vorurteile gab, dh es war nicht so ununterscheidbar, wie ursprünglich gewünscht. Das eSTREAM-Projektbestand darin, neuere Designs für PRNG zu sammeln (tatsächlich Stream-Chiffren, da die meisten Stream-Chiffren in einem PRNG bestehen, dessen Ausgabe mit den zu verschlüsselnden Daten XOR-verknüpft ist), sie zu dokumentieren und die Analyse durch Kryptographen zu fördern. Das eSTREAM-Portfolio enthält sieben PRNG-Designs, die als sicher genug eingestuft wurden (dh sie widersetzten sich der Analyse, und Kryptographen haben in der Regel ein gutes Verständnis dafür, warum sie sich widersetzten). Unter ihnen sind vier "für Software optimiert". Die gute Nachricht ist, dass diese neuen PRNG zwar viel sicherer als RC4 zu sein scheinen, aber auch spürbar schneller sind (wir sprechen hier von Hunderten von Megabyte pro Sekunde). Drei von ihnen sind "für jede Verwendung kostenlos" und der Quellcode wird bereitgestellt.
Aus gestalterischer Sicht verwendet PRNG einen Großteil der Elemente von Blockchiffren wieder. Die gleichen Konzepte der Lawine und der Diffusion von Bits in einen breiten internen Zustand werden verwendet. Alternativ kann ein anständiges PRNG aus einer Blockverschlüsselung erstellt werden: Verwenden Sie einfach die n- Bit-Sequenz als Schlüssel für eine Blockverschlüsselung und verschlüsseln Sie aufeinanderfolgende Werte eines Zählers (ausgedrückt als m- Bit-Sequenz, wenn die Blockverschlüsselung m - verwendet) Bitblöcke). Dies erzeugt einen pseudozufälligen Strom von Bits, der rechnerisch nicht von zufällig zu unterscheiden ist, solange die Blockverschlüsselung sicher ist und der erzeugte Strom nicht länger als m * 2 ^ (m / 2) Bits ist (für m = 128)Dies bedeutet ungefähr 300 Milliarden Gigabyte, das ist also groß genug für die meisten Zwecke. Diese Art der Verwendung wird als Counter Mode (CTR) bezeichnet .
Normalerweise ist eine Blockverschlüsselung im CTR-Modus nicht so schnell wie eine dedizierte Stream-Verschlüsselung (der Punkt der Stream-Verschlüsselung besteht darin, dass durch den Verlust der Flexibilität einer Blockverschlüsselung eine bessere Leistung erwartet wird). Wenn Sie jedoch zufällig eine der neuesten CPUs von Intel mit den AES-NI- Anweisungen haben (bei denen es sich im Grunde um eine AES-Implementierung in Hardware handelt, die in die CPU integriert ist), führt AES mit CTR-Modus zu einer unschlagbaren Geschwindigkeit (mehrere Gigabyte pro) zweite).