Pseudo Random Number Generator (PRNG) 29.08.2018, 09:55 Uhr

Zufallszahlen in .NET

Zufallszahlen in .NET sind nicht wirklich zufällig, man kann sie vorhersagen – zumindest wenn sie nicht mit einem kryptografischen Zufallsgenerator erzeugt worden sind.
Prinzipiell gibt es zwei Arten von Zufallsgeneratoren: die non-cryptographic PRNGs (PRNG = Pseudo Random Number Generator) und die cryptographic PRNGs. Die nicht kryptografischen PRNGs, dazu gehört beispielsweise der Zufallszahlengenerator im Namensraum System.Random, kümmern sich nur darum, dass die generierten Zufallszahlen im angegebenen Zahlenbereich gleich verteilt sind, schert sich aber nicht um deren Vorhersehbarkeit. Nutzt man dabei denselben Startwert (seed) zwei Mal, so resultiert das in der selben Folge von "Zufallszahlen".
Nur die kryptografischen PRNGs, wozu beispielsweise die Klasse RNGCryptoServiceProvider gehört, produzieren nicht vorhersehbare Folgen zufälliger Zahlen im angegebenen Zahlenbereich.
Das .NET Framework unter Windows nutzt die Funktion CryptGenRandom, während .NET Core unter Windows die Funktion BCryptGenRandom – sie ist Teil des Kryptografik-APIs Next Generation – und unter Linux die Funktion RAND_bytes aus der Bibliothek OpenSSL. RNGCryptoServiceProvider ist ganz allgemein die bessere, weil sicherere Wahl beim Erzeugen von Zufallszahlen.
Wer im Detail nachlesen möchte, wie in .NET Zufallszahlen erzeugt werden, kann das unter anderem in diesem Beitrag von Sebastian Solnica im Blog lowleveldesign.org tun.


Das könnte Sie auch interessieren