Christian Seiler: Zufallszahl in PHP / C++

Beitrag lesen

Hallo,

Es ist ist _unmöglich_ auf einem Computer Zufallszahlen zu erzeugen (das ist die harte Wahrheit)

Nein, das stimmt so nicht ganz. Bestimmte physikalische Phänomene sind tatsächlich quantenmechanischen Zufallsprozessen unterworfen und bieten somit eine Quelle echten Zufalls. Es gibt da eigentlich drei praktikable Möglichkeiten: Radioaktiver Zerfall, Polarisation von Photonen und elektronisches Rauschen. All diese Dinge kann man zur Erzeugung von Zufallszahlen erzeugen. Es gibt z.B. spezielle Crypto-Beschleunigerkarten für Server, die auf der Photonenpolarisation basieren (die Radioaktivitätsvariante hat sich aus psychologischen Gründen nicht verkauft). Und auf einigen Mainboards (auch im Consumer-Bereich!) wird von einem Chip elektronisches Rauschen ausgewertet, was aber nicht ganz so ideal ist, weil das Rauschen teilweise auch durch zumindest vom Prinzip vorhersehbare Prozesse beeinflusst wird und außerdem lange nicht so hohe Datenraten liefert.

Rein *algorithmisch* kann man natürlich sowas nicht erzeugen - man braucht immer eine Schnittstelle zu bestimmter Hardware dafür.

Was jedoch auch auf Rechnern ohne derartige Hardware gemacht werden kann, ist folgendes: Das Timing diverser Ereignisse (Netzwerkinput, Tastatureingaben, etc.) enthält zwangsweise Abweichungen, die einfach nicht vorhersehbar sind. Natürlich muss man da sehr vorsichtig sein, wie man das genau auswertet (weil da sehr viele nicht-zufällige Elemente dabei sind), aber das liefert durchaus Ergebnisse, die selbst für kryptographischen Einsatz brauchbar genug sind. Ist halt relativ langsam weil man gerade wegen der nicht-zufälligen Elemente nur wenig Informationen über einen langen Zeitraum extrahieren kann. Unter Linux macht das der Systemkern teilweise (man kann ihn durch ein Programm namens "Entropy Gathering Daemon" auch unterstützen) und stellt unter /dev/random Zufallszahlen zur Verfügung - wenn man daraus liest, erhält man Zahlen, die nach kryptographischen Standards zufällig genug sind. Es gibt auch /dev/urandom, was für die allermeisten Anwendungsfälle gut genug ist, wo aber ein mit /dev/random geseedeter Pseudozufallszahlalgorithmus dahinter steckt. Unter Windows gibt's irgend eine API-Funktion, um sich vom Systemkern Entropie zu besorgen.

Viele Grüße,
Christian