Liste von Zufallszahlengeneratoren
# Liste von Zufallszahlengeneratoren

## Pseudozufallszahlengeneratoren

Pseudozufallgeneratoren sind Deterministische Zufallszahlengeneratoren, die Pseudozufallszahlen erzeugen (engl. pseudo random number generator). Die von ihnen erzeugten Zahlenfolgen erscheinen zufällig, obwohl sie durch einen deterministischen Algorithmus errechnet werden.

### Zuverlässige Generatoren

Diese nachfolgenden Pseudozufallszahlengeneratoren bestehen alle BigCrush-Tests der TestU01-Software-Suite, d. h. die generierte pseudozufällige Zahlenfolge ist von einer echt zufälligen mit diesen Tests nicht zu unterscheiden.

Der Begriff zuverlässig ist hier im stochastischen Sinn gemeint, es bedeutet nicht automatisch, dass eine generierte Sequenz auch kryptographisch sicher ist. An kryptographisch sichere Zufallszahlengeneratoren werden besondere Anforderungen gestellt.

| Name | $log_2$ k |
| - | - |
| Marsaglias KISS | > 124 |
| Marsaglias LFIB4 | 287 |
| ran1 (Numerical Recipes 3) | ? |
| CMWC 4096 | 131086 |
| Xorshift+ 128 | 128 |
| AES (CTR) | – |
| AES (OFB) | – |
| SHA-1 (CTR) | – |
| SHA-1 (OFB) | – |
| Whirlpool (CTR) | – |
| MRG32k3a | 191 |
| ACORN | 30, 60, 90, 120, … 30t hängt von den Anfangsparametern ab |

$log_2$ ist in den Tabellen der Zweierlogarithmus der Periodenlänge k. Die Angabe „> 124“ bedeutet also, dass die Periode des Generators länger als $2^{124}$ ist, d. h. erst nach mehr als $2^{124}$ erzeugten Zahlen beginnt er sich zu wiederholen.

### Beschränkt zuverlässige Generatoren

Diese Pseudozufallszahlengeneratoren bestehen alle BigCrush-Tests außer denen auf lineare Abhängigkeit. Sie sind für praktische und nicht-kryptologische Zwecke einsetzbar. Es bedeutet jedoch, dass unter Umständen lineare Abhängigkeiten auftreten, falls größere Mengen solcher Zufallszahlen verwendet werden.

| Name | $log_2$ k | Fehlgeschlagene Tests |
| - | - | - |
| Mersenne-Twister | 19937 | 2: LinearComp |
| WELL 512 | 512 | 7 |
| WELL 1024 | 1024 | 5: MatrixRank, LinearComp, HammingIndep |
| WELL 19937 | 19937 | 2: LinearComp |
| WELL 44497 | 44497 | 2: LinearComp |

### Wenig bis nicht zuverlässige Generatoren

Diese Pseudozufallszahlengeneratoren bestehen einen Großteil der Tests nicht. Sie sollten nur verwendet werden, wenn beträchtliche stochastische Mängel der generierten Zahlenfolgen in Kauf genommen werden können.

| Name | $log_2$ k | Fehlgeschlagene Tests | Bemerkung |
| - | - | - | - |
| TT800 | 800 | 17 |
| Xorshift (32/64/128) | 32/64/128 | fast alle/7/16 |
| Alle linearen Rekurrenzgeneratoren | | fast alle | klassischer Generator in Standardbibliotheken, z. B. rand (aus stdlib.h oder PHP) bzw. drand48, Java.util.Random, … |

### Weitere

* Blum-Blum-Shub-Generator
* Dual EC DRBG
* Inverser Kongruenzgenerator
* Kongruenzgeneratoren
   * Fibonacci-Generator
   * Verzögerter Fibonacci-Generator
* Maximum Length Sequence
* Multiply-with-carry

## Echte Zufallszahlengeneratoren

Echte Zufallszahlengeneratoren sind Nichtdeterministische Zufallszahlengeneratoren, die echt zufällige Zahlenfolgen erzeugen (engl. random number generator). Ihre erzeugten Zahlenfolgen sind nicht reproduzierbar, so wie die Ziehung der Lottozahlen, und aperiodisch. Diese echten Zufallszahlengeneratoren erzeugen Zufallszahlen mit Hilfe physikalischer Prozesse. Sie sind meistens erheblich langsamer als Pseudozufallszahlengeneratoren, liefern also echte Zufallszahlen in (relativ) geringer Frequenz.

### Zufallszahlen-Server

Zufallszahlen-Server verbinden die Erzeugung echter Zufallszahlenfolgen mit Hilfe nichtdeterministischer Zufallszahlengeneratoren und deren Darstellung über eine Webschnittstelle und Onlinedienste. Es können Angaben zur gewünschten Zahlenfolge gemacht werden, z. B. fünf zufällige Zahlen aus 50 Zahlen, wie beim Eurojackpot.

* random.org – basierend auf atmosphärischem Rauschen als Radioquelle
* qrng.physik.hu-berlin.de – basierend auf Quanten-Zufälligkeit von Photonen-Ankunftszeiten als Entropie-Quelle.

### Hardware

Auf diese Weise erzeugte echte Zufallszahlen hoher Güte lassen sich als Startwert für deterministische Pseudozufallszahlengeneratoren verwenden.

* Intels RdRand-Befehl

### Externe Entropie

Auf diese Weise erzeugte echte Zufallszahlen geringer Güte lassen sich als Startwert für deterministische Pseudozufallszahlengeneratoren verwenden.

* CryptGenRandom, Microsoft Windows, Cryptography API
* die virtuelle Gerätdatei /dev/random unter Linux und anderen unixoiden Betriebssystemen.
