Zufällige Zahlen in Java generieren mit der Random Klasse
Das sind Zahlen, die weder vorhersagbar noch reproduzierbar sind. Wer den Algorithmus kennt und Zugriff auf den Seed hat, kann jede „zufällige“ Zahl voraussagen. Ein Klassiker unter diesen Generatoren ist der lineare Kongruenzgenerator. Mathematisch schlicht, dafür nicht sonderlich zuverlässig. Besser ist der Mersenne Twister, ein echter Marathonläufer unter den PRNGs mit einer unfassbar langen Periodenlänge. Und wenn’s besonders sicher sein muss, greift man zu Hybriden.
Im java.util Paket werden drei Klassen für das Generieren von Zufällen zur Verfügung gestellt. Im folgenden Beispiel wird ein einzelner unsigned Integer erzeugt, dessen Adresse &tmp als Puffer zum Speichern von Zufallsbits übergeben wird, und die Größe wird mit dem sizeof-Operator berechnet. Die Zufallsquelle, von der getrandom die Bits abruft, kann in seltenen Szenarien nicht initialisiert sein. Der Aufruf der Funktion getrandom blockiert dann die Programmausführung. Daher wird die Makrodefinition GRND_NONBLOCK als drittes Argument für die Funktion übergeben, um in diesen Fällen sofort den Fehlerwert -1 zurückzugeben.
- In einem Fall konnte der Zufallsgenerator nur 256 verschiedene Zufallszahlen erzeugen, wodurch die NSA in der Lage war zufallsgenerierte Schlüssel zu rekonstruieren.
- Bei einem PC ist das nicht so das Problem, weil hier der Nutzer zeitnah für Benutzereingaben durch Maus- und Tastatur sorgt.
- Immer wieder gibt es Meldungen über fehlerhafte Implementierungen von Zufallsgeneratoren.
Die Random Klasse und Math.random()
Aber gerade wenn es um Bereiche geht, in denen Sicherheit gefragt ist, müssen echte Zufallsquellen her. Fest steht dabei aber, dass ein Zufall nicht wirklich ein solcher ist. Vielmehr handelt es sich um das Ergebnis ausgeklügelter Mathematik und Ingenieurskunst, wodurch Zufallszahlengeneratoren so interessant sind. Man könnte meinen, Zufallszahlengeneratoren seien ein Nischenthema. Sie sind der unsichtbare Motor hinter vielen Technologien, die täglich genutzt werden. Diese Eigenschaft der Reproduzierbarkeit ist bedeutsam für die Anerkennung wissenschaftlicher Experimente.
Nicht-periodischer/unendlicher Generator
Auch in der Kryptographie spielen Zufallszahlen eine Schlüsselrolle. Ob beim Online-Banking, bei verschlüsselten Chats oder digitalen Signaturen – die Sicherheit steht und fällt mit der Qualität der zufälligen Schlüssel. Hier kommen die nv casino bereits erwähnten CSPRNGs zum Einsatz, die speziell für solche Hochsicherheitsanforderungen entwickelt wurden.
RNG verstehen: Wie funktioniert der programmierte Zufall?
Möglichkeiten sind dafür zufällige Benutzeraktionen oder Hardware-Rauschen, um nur einige Optionen zu nennen. Besonders offensichtlich wird ihr Einsatz im Online-Glücksspiel. Damit Spiele fair ablaufen, dürfen weder die Spieler noch die Betreiber selbst wissen, was als nächstes auf den virtuellen Spieltischen oder an den Slots passiert. Wo die Walzen landen, steht schon fest, sobald der Spieler auf den Knopf drückt.