Kryptografisch sichere Zufallsbits haben die Eigenschaft, dass ein Angreifer auch in Kenntnis von beliebig vielen vorherigen Bits das nächste Bit nicht effizient vorhersagen kann.
Es sei p eine starke Primzahl und g ein erzeugendes Element der Gruppe ℤp*.
Es wird nun ein Startwert x0 ∈ {2, ..., p-2} gewählt. Ausgehend vom Startwert x0 wird eine Folge von xi für i ∈ ℕ nach folgender Iterationsformel berechnet:
xi = gxi-1 mod p
Von der erzeugten Zahl xi wird nur ein Bit verwendet. Hierfür gibt es unterschiedliche Möglichkeiten. Es kann ein bestimmtes Bit der Zahl verwendet werden (z.B. das letzte oder das drittletzte) oder es kann das Exklusiv-Oder von mehreren bestimmten Bits genommen werden oder es kann die Position von xi im Intervall [1, p-1] herangezogen werden (Position in der unteren Hälfte: 0, in der oberen Hälfte: 1). Die letztere Möglichkeit wird in der folgenden Implementierung gewählt.
Die Erzeugung von Zufallsbits ist als Generatorfunktion in der Programmiersprache Python implementiert.
In der Generatorfunktion randomBits wird zunächst eine Primzahl p der Länge k Bits und ein erzeugendes Element g zufällig gewählt. Mit der Funktion randint wird ein Startwert für x gewählt. Anschließend wird x iteriert; die Yield-Anweisung liefert eine 1, wenn x > p/2 ist, sonst eine 0.
Mit dem folgenden Programmstück werden 20 Zufallsbits auf Basis einer 50 Bit langen Primzahl p erzeugt und auf dem Bildschirm ausgegeben.
[BM 84] M. Blum, S. Micali: How to Generate Cryptographically Strong Sequences of Pseudorandom Bits. SIAM Journal on Computing 13, 4, 850-864 (1984)
[Lan 18] H.W. Lang: Kryptografie für Dummies. Wiley (2018)
Weiter mit: [Blum-Blum-Shub-Zufallsbits] oder [up]