Module rand::prng [] [src]

Pseudo random number generators are algorithms to produce apparently random numbers deterministically, and usually fairly quickly.

So long as the algorithm is computationally secure, is initialised with sufficient entropy (i.e. unknown by an attacker), and its internal state is also protected (unknown to an attacker), the output will also be computationally secure. Computationally Secure Pseudo Random Number Generators (CSPRNGs) are thus suitable sources of random numbers for cryptography. There are a couple of gotchas here, however. First, the seed used for initialisation must be unknown. Usually this should be provided by the operating system and should usually be secure, however this may not always be the case (especially soon after startup). Second, user-space memory may be vulnerable, for example when written to swap space, and after forking a child process should reinitialise any user-space PRNGs. For this reason it may be preferable to source random numbers directly from the OS for cryptographic applications.

PRNGs are also widely used for non-cryptographic uses: randomised algorithms, simulations, games. In these applications it is usually not important for numbers to be cryptographically unguessable, but even distribution and independence from other samples (from the point of view of someone unaware of the algorithm used, at least) may still be important. Good PRNGs should satisfy these properties, but do not take them for granted; Wikipedia's article on Pseudorandom number generators provides some background on this topic.

Care should be taken when seeding (initialising) PRNGs. Some PRNGs have short periods for some seeds. If one PRNG is seeded from another using the same algorithm, it is possible that both will yield the same sequence of values (with some lag).

Re-exports

pub use self::chacha::ChaChaRng;
pub use self::hc128::Hc128Rng;

Modules

chacha

The ChaCha random number generator.

hc128

The HC-128 random number generator.

Structs

Isaac64Rng

A random number generator that uses ISAAC-64, the 64-bit variant of the ISAAC algorithm.

IsaacRng

A random number generator that uses the ISAAC algorithm.

XorShiftRng

An Xorshift[1] random number generator.