List of random number generators
Random number generators are important in many kinds of technical applications, including physics, engineering or mathematical computer studies (e.g., Monte Carlo simulations), cryptography and gambling (on game servers).
This list includes many common types, regardless of quality or applicability to a given use case.
Pseudorandom number generators (PRNGs)
The following algorithms are pseudorandom number generators.
Cryptographic algorithms
Cipher algorithms and cryptographic hashes can be used as very high-quality pseudorandom number generators. However, generally they are considerably slower (typically by a factor 2–10) than fast, non-cryptographic random number generators.
These include:
- Stream ciphers. Popular choices are Salsa20 or ChaCha (often with the number of rounds reduced to 8 for speed), ISAAC, HC-128 and RC4.
- Block ciphers in counter mode. Common choices are AES (which is very fast on systems supporting it in hardware), TwoFish, Serpent and Camellia.
- Cryptographic hash functions
A few cryptographically secure pseudorandom number generators do not rely on cipher algorithms but try to link mathematically the difficulty of distinguishing their output from a `true' random stream to a computationally difficult problem. These approaches are theoretically important but are too slow to be practical in most applications. They include:
- Blum–Micali algorithm (1984)
- Blum Blum Shub (1986)
- Naor–Reingold pseudorandom function (1997)
Random number generators that use external entropy
These approaches combine a pseudo-random number generator (often in the form of a block or stream cipher) with an external source of randomness (e.g., mouse movements, delay between keyboard presses etc.).
/dev/random
– Unix-like systems- CryptGenRandom – Microsoft Windows
- Fortuna
- RDRAND instructions (called Intel Secure Key by Intel), available in Intel x86 CPUs since 2012. They use the AES generator built into the CPU, reseeding it periodically.
- True Random Number Generator using Corona Discharge.
- Yarrow
- RANDOM.org
See also
- Diceware
- Diehard tests – statistical test suite for random number generators
- Non-uniform random variate generation
- Hardware random number generator
- Random number generator attack
- Randomness
- TestU01 – statistical test suite for random number generators
References
External links
- SP800-90 series on Random Number Generation, NIST
- Random Number Generation in the GNU Scientific Library Reference Manual
- Random Number Generation Routines in the NAG Numerical Library
- Chris Lomont's overview of PRNGs, including a good implementation of the WELL512 algorithm
- Source code to read data from a TrueRNG V2 hardware TRNG