Zufall oder Berechenbar?

3 Antworten

Häufig wird Pseudo-Zufall genutzt. Dabei nutzt man einen Seed, der bspw. basierend auf der aktuellen Zeit generiert wird. Dieser ist aber dadurch vorhersagbar, da sich bestimmte Muster ergeben und der Seed ggf. bekannt ist. Deswegen sollte man solchen Pseudo-Zufall nicht für Kryptographie nutzen.

Echter Zufall ist nicht zu erreichen, außer vielleicht eine annäherung durch Quantencomputer.

Es gibt in der Programmierung für fast jede moderne Sprache eine Umsetzung eines Kryptographisch sicheren Zufalls. Dabei wird statt bspw. die Zeit als Seed etwas genommen, was nicht so einfach vorhersagbar ist.

Cloudflare nutzt zum Beispiel zur generierung Aufnahmen von Lavalampen:

https://www.youtube.com/watch?v=1cUUfMeOijg

Mehr zum Zufall:

https://www.youtube.com/watch?v=aEJB8IAMMpA&t=18s

Mann unterscheidet zwischen PRNG und RNG. Beim Pseudo-RNG wird der Eindruck von Zufälligkeit erweckt. Da ein Nachfolger algorithmisch bestimmt wird kannst du ihn bei Kenntnis des inneren Zustandes natürlich vorhersehen.

Wenn ich den PRNG zu einem bestimmten Zustand mit einer zufälligen Seed initialisiere und Du den inneren Zustand nicht mehr kennst, dann fällt Dir die Vorhersage schwer, es sei denn Du kannst aus einer Teilfolge den inneren Zustand rekonstruieren (weil Du dann weißt, wo in der Periode sich der PRNG befindet).

Wo bekomme ich also eine Seed für den PRNG her? Von einem RNG, bzw. aus Dingen, die mehr oder minder zufällg sind. Diese Quelle kann ich natürlich immer auch direkt nutzen - das Problem ist, daß mit der "Qualität" des Zufalls die Verfügbarkeit sinkt - also, je besser der Zufall sein soll, umso weniger Zufallsbits je Zeiteinheit stehen zur Verfügung.

Wie bekomme ich nun aber einen RNG? Indem ich beispielsweise einen Widerstand habe und desssen thermisches Rauschen nutze. Ohne entsprechende Hardware kann ich sowas wie IRQ-Timings, IO-Events, o.ä. verwenden.

Ja, die Ergebnisse der üblichen "Zufallsgeneratoren" (eigentlich Pseudozufallsgeneratoren) sind tatsächlich vorhersehbar. Die erzeugen aus einem vorgegebenen Startwert eine feste Folge von Zahlen.

Wenn man immer denselben Startwert (z.B. Null) benutzt, ergibt sich immer dieselbe Folge von Zahlen. Daher leitet man den Startwert z.B. aus der Uhrzeit (oder der Zeit seit dem Einschalten des Gerätes) ab. Dann ensteht immer eine andere Zahlenfolge.

Man kann auch einen physikalischen, zufällig ablaufenden Vorgang als Ausgangspunkt benutzen, z.B. elektronisches Rauschen oder (etwas aufwendiger) radioaktiven Zerfall (da kann man z.B. die Zeit zwischen zwei Zerfällen messen, die ist zufällig).

Eine weitere Möglichkeit wäre, Bedienhandlungen des Benutzers einzubeziehen, z.B. Mausbewegungen oder diee Zeitdauer von/zwischen Tastendrücken.

Oder die Veränderung des Bildes einer Livekamera. Eine solche Kamera kann auch auf eine größere Anzahl von Lavalampen gerichtet sein:

https://flowingdata.com/2021/01/15/random-number-generation-with-lava-lamps/