Closed
Description
Non-exhaustive list of possible candidates:
- operating system (i.e.
/dev/urandom
orGenCryptRandom
) - eSTREAM family
- ChaCha family
- Salsa20
Important considerations:
- performance
- statistical/cryptographic strength
- how far into the realm of cryptography do we want to go? (Not very far, but implementing an PRNG isn't as hard to get correct/test as other areas of cryptography, since (a) its output can be compared byte-for-byte with a known-correct implementation and (b) RNGs (for the most part) lacks some subtle constraints like constant time equality and other side channel attacks that other cryptographic algorithms require.)
The ISAAC Rng currently implemented in std::rand
has some known weaknesses, but is generally accepted as cryptographically secure (although it has not received a huge amount of scrutiny).