Are there universal, consensus definitions for the following terms?
- Cryptographically secure pseudo-random number generator ("CSPRNG")
- Deterministic random bit generator ("DRBG")
- Stream cipher
This is primarily a question about the terminology rather than the concepts (although I do not master the concepts by any means either). My confusion arises because:
- I recall seeing some reference (that I can't find again now) which equated CSPRNGs and stream ciphers, due to the fact that expanding a finite key to a long, secure keystream is basically the same problem as generating a long cryptographically-secure pseudo-random sequence from a short seed. So correspondingly, stream ciphers are sometimes used as PRNGs, as in for example Rust's
ChaChaRng
. - The term "DRBG" appears to be mostly used by NIST in connection with their SP 800-90A algorithms, and which stresses safety against adversaries who can observe the state at one point in time. The key concepts here, as I understand them, are forward secrecy and periodic reseeding from external entropy sources.
- The term "CSPRNG" apparently gets used in both senses (see for example the answers to this question).