Recent from talks
Nothing was collected or created yet.
Cryptographically secure pseudorandom number generator
View on WikipediaA cryptographically secure pseudorandom number generator (CSPRNG) or cryptographic pseudorandom number generator (CPRNG) is a pseudorandom number generator (PRNG) with properties that make it suitable for use in cryptography. It is also referred to as a cryptographic random number generator (CRNG).
Background
[edit]Most cryptographic applications require random numbers, for example:
- key generation
- initialization vectors
- nonces
- salts in certain signature schemes, including ECDSA and RSASSA-PSS
- token generation
The "quality" of the randomness required for these applications varies. For example, creating a nonce in some protocols needs only uniqueness. On the other hand, the generation of a master key requires a higher quality, such as more entropy. And in the case of one-time pads, the information-theoretic guarantee of perfect secrecy only holds if the key material comes from a true random source with high entropy, and thus just any kind of pseudorandom number generator is insufficient.
Ideally, the generation of random numbers in CSPRNGs uses entropy obtained from a high-quality source, generally the operating system's randomness API. However, unexpected correlations have been found in several such ostensibly independent processes. From an information-theoretic point of view, the amount of randomness, the entropy that can be generated, is equal to the entropy provided by the system. But sometimes, in practical situations, numbers are needed with more randomness than the available entropy can provide. Also, the processes to extract randomness from a running system are slow in actual practice. In such instances, a CSPRNG can sometimes be used. A CSPRNG can "stretch" the available entropy over more bits.
Requirements
[edit]The requirements of an ordinary PRNG are also satisfied by a cryptographically secure PRNG, but the reverse is not true. CSPRNG requirements fall into two groups:
- They pass statistical randomness tests:
- Every CSPRNG should satisfy the next-bit test. That is, given the first k bits of a random sequence, there is no polynomial-time algorithm that can predict the (k+1)th bit with probability of success non-negligibly better than 50%.[1]
- Andrew Yao proved in 1982 that a generator passing the next-bit test will pass all other polynomial-time statistical tests for randomness. In other words, no polynomial-time algorithm would be able to distinguish the output of the RNG from true randomness.[2]
- Instead of polynomial-time complexity, another metric considered in practice is the absolute number of operations required for a distinguisher to tell the output from true randomness. From the number of operations one can also define a security level (bits of security) for a particular CSPRNG against distinguishing attacks.[3][4]
- They hold up well under serious attack, even when part of their initial or running state becomes available to an attacker:[5]
- Every CSPRNG should withstand "state compromise extension attacks".[5]: 4 In the event that part or all of its state has been revealed (or guessed correctly), it should be impossible to reconstruct the stream of random numbers prior to the revelation. Additionally, if there is an entropy input while running, it should be infeasible to use knowledge of the input's state to predict future conditions of the CSPRNG state.
- For instance, if the PRNG under consideration produces output by computing bits of pi in sequence, starting from some unknown point in the binary expansion, it may well satisfy the next-bit test and thus be statistically random, as pi is conjectured to be a normal number. However, this algorithm is not cryptographically secure; an attacker who determines which bit of pi is currently in use (i.e. the state of the algorithm) will be able to calculate all preceding bits as well.
Most PRNGs are not suitable for use as CSPRNGs and will fail on both counts:
- While most PRNGs' outputs appear random to assorted statistical tests, they do not resist determined reverse engineering. Specialized statistical tests may be found specially tuned to such a PRNG that shows the random numbers not to be truly random. At the same time, because CSPRNGs are designed to resist all statistical tests (and are believed to be secure on this front until such a test has been found), a CSPRNG can replace any true random number generator in any non-cryptographic application as well.
- For most PRNGs, when their state has been revealed, all past random numbers can be retrodicted, allowing an attacker to read all past messages, as well as future ones. CSPRNGs are designed explicitly to resist this type of cryptanalysis.
Definitions
[edit]In the asymptotic setting, a family of deterministic polynomial time computable functions for some polynomial p, is a pseudorandom number generator (PRNG, or PRG in some references), if it stretches the length of its input ( for any k), and if its output is computationally indistinguishable from true randomness, i.e. for any probabilistic polynomial time algorithm A, which outputs 1 or 0 as a distinguisher,
for some negligible function .[6] (The notation means that x is chosen uniformly at random from the set X.)
There is an equivalent characterization: For any function family , G is a PRNG if and only if the next output bit of G cannot be predicted by a polynomial time algorithm.[7]
A forward-secure PRNG with block length is a PRNG , where the input string with length k is the current state at period i, and the output (, ) consists of the next state and the pseudorandom output block of period i, that withstands state compromise extensions in the following sense. If the initial state is chosen uniformly at random from , then for any i, the sequence must be computationally indistinguishable from , in which the are chosen uniformly at random from .[8]
Any PRNG can be turned into a forward secure PRNG with block length by splitting its output into the next state and the actual output. This is done by setting , in which and ; then G is a forward secure PRNG with as the next state and as the pseudorandom output block of the current period.
Entropy extraction
[edit]Santha and Vazirani proved that several bit streams with weak randomness can be combined to produce a higher-quality, quasi-random bit stream.[9] Even earlier, John von Neumann proved that a simple algorithm can remove a considerable amount of the bias in any bit stream,[10] which should be applied to each bit stream before using any variation of the Santha–Vazirani design.
Designs
[edit]CSPRNG designs are divided into two classes:
- Designs based on cryptographic primitives such as ciphers and cryptographic hashes
- Designs based on mathematical problems thought to be hard
Designs based on cryptographic primitives
[edit]- A secure block cipher can be converted into a CSPRNG by running it in counter mode using, for example, a special construct that the NIST in SP 800-90A calls CTR DRBG. CTR_DBRG typically uses Advanced Encryption Standard (AES).
- AES-CTR_DRBG is often used as a random number generator in systems that use AES encryption.[11][12]
- The NIST CTR_DRBG scheme erases the key after the requested randomness is output by running additional cycles. This is wasteful from a performance perspective, but does not immediately cause issues with forward secrecy. However, realizing the performance implications, the NIST recommends an "extended AES-CTR-DRBG interface" for its Post-Quantum Cryptography Project submissions. This interface allows multiple sets of randomness to be generated without intervening erasure, only erasing when the user explicitly signals the end of requests. As a result, the key could remain in memory for an extended time if the "extended interface" is misused. Newer "fast-key-erasure" RNGs erase the key with randomness as soon as randomness is requested.[13]
- A stream cipher can be converted into a CSPRNG. This has been done with RC4, ISAAC, and ChaCha20, to name a few.
- A cryptographically secure hash might also be a base of a good CSPRNG, using, for example, a construct that NIST calls Hash DRBG.
- An HMAC primitive can be used as a base of a CSPRNG, for example, as part of the construct that NIST calls HMAC DRBG.
Number-theoretic designs
[edit]- The Blum Blum Shub algorithm has a security proof based on the difficulty of the quadratic residuosity problem. Since the only known way to solve that problem is to factor the modulus, it is generally regarded that the difficulty of integer factorization provides a conditional security proof for the Blum Blum Shub algorithm. However the algorithm is very inefficient and therefore impractical unless extreme security is needed.
- The Blum–Micali algorithm has a security proof based on the difficulty of the discrete logarithm problem but is also very inefficient.
- Daniel Brown of Certicom wrote a 2006 security proof for Dual EC DRBG, based on the assumed hardness of the Decisional Diffie–Hellman assumption, the x-logarithm problem, and the truncated point problem. The 2006 proof explicitly assumes a lower outlen (amount of bits provided per iteration) than in the Dual_EC_DRBG standard, and that the P and Q in the Dual_EC_DRBG standard (which were revealed in 2013 to be probably backdoored by NSA) are replaced with non-backdoored values.
Practical schemes
[edit]"Practical" CSPRNG schemes not only include an CSPRNG algorithm, but also a way to initialize ("seed") it while keeping the seed secret. A number of such schemes have been defined, including:
- Implementations of /dev/random in Unix-like systems.
- Yarrow, which attempts to evaluate the entropic quality of its seeding inputs, and uses SHA-1 and 3DES internally. Yarrow was used in macOS and other Apple OS' up until about December 2019, after which it switched to Fortuna.
- Fortuna, the successor to Yarrow, which does not attempt to evaluate the entropic quality of its inputs; it uses SHA-256 and "any good block cipher". Fortuna is used in FreeBSD. Apple changed to Fortuna for most or all Apple OSs beginning around Dec. 2019.
- The Linux kernel CSPRNG, which uses ChaCha20 to generate data,[14] and BLAKE2s to ingest entropy.[15]
- arc4random, a CSPRNG in Unix-like systems that seeds from /dev/random. It originally is based on RC4, but all main implementations now use ChaCha20.[16][17][18]
- CryptGenRandom, part of Microsoft's CryptoAPI, offered on Windows. Different versions of Windows use different implementations.
- ANSI X9.17 standard (Financial Institution Key Management (wholesale)), which has been adopted as a FIPS standard as well. It takes as input a TDEA (keying option 2) key bundle k and (the initial value of) a 64-bit random seed s.[19] Each time a random number is required, it executes the following steps:
- Obtain the current date/time D to the maximum resolution possible.
- Compute a temporary value t = TDEAk(D).
- Compute the random value x = TDEAk(s ⊕ t), where ⊕ denotes bitwise exclusive or.
- Update the seed s = TDEAk(x ⊕ t).
Obviously, the technique is easily generalized to any block cipher; AES has been suggested.[20] If the key k is leaked, the entire X9.17 stream can be predicted; this weakness is cited as a reason for creating Yarrow.[21]
All these above-mentioned schemes, save for X9.17, also mix the state of a CSPRNG with an additional source of entropy. They are therefore not "pure" pseudorandom number generators, in the sense that the output is not completely determined by their initial state. This addition aims to prevent attacks even if the initial state is compromised.[a]
Standards
[edit]Several CSPRNGs have been standardized. For example:
- FIPS 186-4[23]
- NIST SP 800-90A
The third PRNG in this standard, CTR DRBG, is based on a block cipher running in counter mode. It has an uncontroversial design but has been proven to be weaker in terms of distinguishing attack, than the security level of the underlying block cipher when the number of bits output from this PRNG is greater than two to the power of the underlying block cipher's block size in bits.[26]
When the maximum number of bits output from this PRNG is equal to the 2blocksize, the resulting output delivers the mathematically expected security level that the key size would be expected to generate, but the output is shown to not be indistinguishable from a true random number generator.[26] When the maximum number of bits output from this PRNG is less than it, the expected security level is delivered and the output appears to be indistinguishable from a true random number generator.[26]
It is noted in the next revision that the claimed security strength for CTR_DRBG depends on limiting the total number of generate requests and the bits provided per generate request.
The fourth and final PRNG in this standard is named Dual EC DRBG. It has been shown to not be cryptographically secure and is believed to have a kleptographic NSA backdoor.[27]
- NIST SP 800-90A Rev.1
- ANSI X9.17-1985 Appendix C
- ANSI X9.31-1998 Appendix A.2.4
- ANSI X9.62-1998 Annex A.4, obsoleted by ANSI X9.62-2005, Annex D (HMAC_DRBG)
A good reference is maintained by NIST.[28]
There are also standards for statistical testing of new CSPRNG designs:
- A Statistical Test Suite for Random and Pseudorandom Number Generators, NIST Special Publication 800-22.[29]
Security flaws
[edit]NSA kleptographic backdoor in the Dual_EC_DRBG PRNG
[edit]The Guardian and The New York Times reported in 2013 that the National Security Agency (NSA) inserted a backdoor into a pseudorandom number generator (PRNG) of NIST SP 800-90A, which allows the NSA to readily decrypt material that was encrypted with the aid of Dual EC DRBG. Both papers reported[30][31] that, as independent security experts long suspected,[32] the NSA had been introducing weaknesses into CSPRNG standard 800-90; this being confirmed for the first time by one of the top-secret documents leaked to The Guardian by Edward Snowden. The NSA worked covertly to get its own version of the NIST draft security standard approved for worldwide use in 2006. The leaked document states that "eventually, NSA became the sole editor". In spite of the known potential for a kleptographic backdoor and other known significant deficiencies with Dual_EC_DRBG, several companies such as RSA Security continued using Dual_EC_DRBG until the backdoor was confirmed in 2013.[33] RSA Security received a $10 million payment from the NSA to do so.[34]
DUHK attack
[edit]On October 23, 2017, Shaanan Cohney, Matthew Green, and Nadia Heninger, cryptographers at the University of Pennsylvania and Johns Hopkins University, released details of the DUHK (Don't Use Hard-coded Keys) attack on WPA2 where hardware vendors use a hardcoded seed key for the ANSI X9.31 RNG algorithm, stating "an attacker can brute-force encrypted data to discover the rest of the encryption parameters and deduce the master encryption key used to encrypt web sessions or virtual private network (VPN) connections."[35][36]
Japanese PURPLE cipher machine
[edit]During World War II, Japan used a cipher machine for diplomatic communications; the United States was able to crack it and read its messages, mostly because the "key values" used were insufficiently random.[37]
References
[edit]- ^ The use of entropy-mixing after CSPRNG initialization has been question by Daniel J. Bernstein.[22]
- ^ Katz, Jonathan; Lindell, Yehuda (2008). Introduction to Modern Cryptography. CRC press. p. 70. ISBN 978-1584885511.
- ^ Andrew Chi-Chih Yao. Theory and applications of trapdoor functions. In Proceedings of the 23rd IEEE Symposium on Foundations of Computer Science, 1982.
- ^ Stankovski, Paul (2010). "Greedy Distinguishers and Nonrandomness Detectors". Progress in Cryptology - INDOCRYPT 2010. 6498: 210–226. doi:10.1007/978-3-642-17401-8_16.
- ^ Aumasson, Jean-Philippe (veorq) (Nov 12, 2015). "Comment on: change Siphash to use one of the faster variants of the algorithm (Siphash13, Highwayhash) · Issue #29754 · rust-lang/rust". GitHub. Retrieved 28 February 2024.
SipHash designer here, haven't changed my opinion about SipHash-1-3 :-) [...] There's a "distinguisher" on 4 rounds[...], or in simplest terms a statistical bias that shows up given a specific difference pattern in the input of the 4-round sequence. But you can't inject that pattern in SipHash-1-3 because you don't control all the state. And even if you could inject that pattern the bias wouldn't be exploitable anyway.
- ^ a b Kelsey, John; Schneier, Bruce; Wagner, David; Hall, Chris (1998). "Cryptanalytic Attacks on Pseudorandom Number Generators". Fast Software Encryption (PDF). Berlin, Heidelberg: Springer Berlin Heidelberg. doi:10.1007/3-540-69710-1_12. ISBN 978-3-540-64265-7. ISSN 0302-9743.
- ^ Goldreich, Oded (2001), Foundations of cryptography I: Basic Tools, Cambridge: Cambridge University Press, ISBN 978-0-511-54689-1, def 3.3.1.
- ^ Goldreich, Oded (2001), Foundations of cryptography I: Basic Tools, Cambridge: Cambridge University Press, ISBN 978-0-511-54689-1, Theorem 3.3.7.
- ^ Dodis, Yevgeniy, Lecture 5 Notes of Introduction to Cryptography (PDF), retrieved 3 January 2016, def 4.
- ^ Miklos Santha, Umesh V. Vazirani (1984-10-24). "Generating quasi-random sequences from slightly-random sources" (PDF). Proceedings of the 25th IEEE Symposium on Foundations of Computer Science. University of California. pp. 434–440. ISBN 0-8186-0591-X. Retrieved 2006-11-29.
- ^
John von Neumann (1963-03-01). "Various techniques for use in connection with random digits". The Collected Works of John von Neumann. Pergamon Press. pp. 768–770. ISBN 0-08-009566-6.
{{cite book}}: ISBN / Date incompatibility (help) - ^ Kleidermacher, David; Kleidermacher, Mike (2012). Embedded Systems Security: Practical Methods for Safe and Secure Software and Systems Development. Elsevier. p. 256. ISBN 9780123868862.
- ^ Cox, George; Dike, Charles; Johnston, DJ (2011). "Intel's Digital Random Number Generator (DRNG)" (PDF).
- ^ Bernstein, Daniel J. "2017.07.23: Fast-key-erasure random-number generators: An effort to clean up several messes simultaneously. #rng #forwardsecrecy #urandom #cascade #hmac #rekeying #proofs".
- ^ "Github commit of random.c". Github. July 2, 2016.
- ^ "Linux 5.17 Random Number Generator Seeing Speed-Ups, Switching From SHA1 To BLAKE2s - Phoronix". www.phoronix.com.
- ^ "CVS log of arc4random.c". CVS. October 1, 2013.
- ^ "CVS log of arc4random.c". CVS. November 16, 2014.
- ^ "FreeBSD 12.0-RELEASE Release Notes: Runtime Libraries and API". FreeBSD.org. 5 March 2019. Retrieved 24 August 2019.
- ^ Menezes, Alfred; van Oorschot, Paul; Vanstone, Scott (1996). "Chapter 5: Pseudorandom Bits and Sequences" (PDF). Handbook of Applied Cryptography. CRC Press.
- ^ Young, Adam; Yung, Moti (2004-02-01). Malicious Cryptography: Exposing Cryptovirology. John Wiley & Sons. sect 3.5.1. ISBN 978-0-7645-4975-5.
- ^ Kelsey, John; Schneier, Bruce; Ferguson, Niels (August 1999). "Yarrow-160: Notes on the Design and Analysis of the Yarrow Cryptographic Pseudorandom Number Generator" (PDF). Sixth Annual Workshop on Selected Areas in Cryptography. Lecture Notes in Computer Science. Vol. 1758. pp. 13–33. doi:10.1007/3-540-46513-8_2. ISBN 978-3-540-67185-5.
- ^ Daniel J. Bernstein (2014-02-05). "cr.yp.to: 2014.02.05: Entropy Attacks!".
Is there any serious argument that adding new entropy all the time is a good thing? The Linux /dev/urandom manual page claims that without new entropy the user is "theoretically vulnerable to a cryptographic attack", but (as I've mentioned in various venues) this is a ludicrous argument
- ^ "FIPS 186-4" (PDF).
- ^ Kan, Wilson (September 4, 2007). "Analysis of Underlying Assumptions in NIST DRBGs" (PDF). Retrieved November 19, 2016.
- ^ Ye, Katherine Qinru (April 2016). "The Notorious PRG: Formal verification of the HMAC-DRBG pseudorandom number generator" (PDF). Retrieved November 19, 2016.
- ^ a b c Campagna, Matthew J. (November 1, 2006). "Security Bounds for the NIST Codebook-based Deterministic Random Bit Generator" (PDF). Retrieved November 19, 2016.
- ^ Perlroth, Nicole (September 10, 2013). "Government Announces Steps to Restore Confidence on Encryption Standards". The New York Times. Retrieved November 19, 2016.
- ^ Computer Security Division, Information Technology Laboratory (24 May 2016). "Random Number". CSRC | NIST.
- ^ Rukhin, Andrew; Soto, Juan; Nechvatal, James; Smid, Miles; Barker, Elaine; Leigh, Stefan; Levenson, Mark; Vangel, Mark; Banks, David; Heckert, N.; Dray, James; Vo, San; Bassham, Lawrence (April 30, 2010). "A Statistical Test Suite for Random and Pseudorandom Number Generators for Cryptographic Applications". NIST. doi:10.6028/NIST.SP.800-22r1a – via csrc.nist.gov.
- ^ Borger, James; Greenwald, Glenn (6 September 2013). "Revealed: how US and UK spy agencies defeat internet privacy and security". The Guardian. Retrieved 7 September 2013.
- ^ Perlroth, Nicole (5 September 2013). "N.S.A. Able to Foil Basic Safeguards of Privacy on Web". The New York Times. Retrieved 7 September 2013.
- ^ Schneier, Bruce (15 November 2007). "Did NSA Put a Secret Backdoor in New Encryption Standard?". Wired. Retrieved 7 September 2013.
- ^ Green, Matthew (20 September 2013). "RSA warns developers not to use RSA products". A Few Thoughts on Cryptographic Engineering.
- ^ Menn, Joseph (20 December 2013). "Exclusive: Secret contract tied NSA and security industry pioneer". Reuters.
- ^ Shaanan Cohney; Matthew D. Green; Nadia Heninger. "Practical state recovery attacks against legacy RNG implementations" (PDF). duhkattack.com.
- ^ "DUHK Crypto Attack Recovers Encryption Keys, Exposes VPN Connections". slashdot.org. 25 October 2017. Retrieved 25 October 2017.
- ^ Balciunas, Marijus (2004-03-18). "Japan's Purple Machine" (PDF). DePaul University. Archived from the original (PDF) on 2025-03-30. Retrieved 2025-10-07.
External links
[edit]- RFC 4086, Randomness Requirements for Security
- Java "entropy pool" for cryptographically secure unpredictable random numbers. Archived 2008-12-02 at the Wayback Machine
- Java standard class providing a cryptographically strong pseudo-random number generator (PRNG).
- Cryptographically Secure Random number on Windows without using CryptoAPI
- Conjectured Security of the ANSI-NIST Elliptic Curve RNG, Daniel R. L. Brown, IACR ePrint 2006/117.
- A Security Analysis of the NIST SP 800-90 Elliptic Curve Random Number Generator, Daniel R. L. Brown and Kristian Gjosteen, IACR ePrint 2007/048. To appear in CRYPTO 2007.
- Cryptanalysis of the Dual Elliptic Curve Pseudorandom Generator, Berry Schoenmakers and Andrey Sidorenko, IACR ePrint 2006/190.
- Efficient Pseudorandom Generators Based on the DDH Assumption, Reza Rezaeian Farashahi and Berry Schoenmakers and Andrey Sidorenko, IACR ePrint 2006/321.
- Analysis of the Linux Random Number Generator, Zvi Gutterman and Benny Pinkas and Tzachy Reinman.
- NIST Statistical Test Suite documentation and software download.
Cryptographically secure pseudorandom number generator
View on GrokipediaFundamentals
Definitions and Core Concepts
A pseudorandom number generator (PRNG) is a deterministic algorithm that accepts an initial seed value and produces an output sequence exhibiting statistical properties approximating those of independent, uniformly distributed random bits.[1] This output is generated through mathematical transformations that expand or iterate on the seed, ensuring reproducibility under identical starting conditions. PRNGs differ fundamentally from true random number generators (TRNGs), which derive bits from physical entropy sources, as PRNGs rely solely on computational processes without inherent unpredictability beyond the seed. A cryptographically secure pseudorandom number generator (CSPRNG), also termed a deterministic random bit generator (DRBG) in standards such as NIST SP 800-90A, is a PRNG designed for cryptographic applications where security against adversarial prediction is paramount. It must produce output that is computationally indistinguishable from uniformly random bits, assuming the seed possesses sufficient entropy, such that no polynomial-time distinguisher algorithm succeeds beyond negligible advantage.[2] Core to this security is forward unpredictability: given any prefix of the output sequence, no efficient adversary can predict subsequent bits with success probability exceeding 1/2 plus a negligible function.[6] Additionally, CSPRNGs incorporate backtracking resistance, preventing reconstruction of prior internal states from observed outputs, thereby protecting against attempts to infer the seed or earlier bits.[7] In cryptographic theory, CSPRNGs align with the concept of a secure pseudorandom generator (PRG), formalized as a function where stretches a short, random seed into a longer pseudorandom string, secure under the assumption that distinguishing from random requires superpolynomial resources for random seed .[8] Practical CSPRNGs often employ cryptographic primitives like block ciphers or hash functions in modes such as counter or hash-based DRBGs, ensuring diffusion and confusion properties that thwart state recovery. These generators typically require periodic reseeding from high-entropy sources to maintain security over extended outputs, as deterministic expansion alone cannot indefinitely resist exhaustive search without fresh randomness.[7]Security Requirements
The fundamental security requirement for a cryptographically secure pseudorandom number generator (CSPRNG) is that its output, derived from a short uniform random seed, must be computationally indistinguishable from a truly random bit string of equal length by any probabilistic polynomial-time adversary. This means that for a security parameter , if maps a -bit seed to a -bit output with , the advantage of distinguishing from (where denotes the uniform distribution over bits) is negligible in .[9] Such indistinguishability ensures that no efficient algorithm can exploit the pseudorandom output for cryptographic purposes in a manner that compromises security. Equivalence holds between this property and passing the next-bit test: given any prefix of the output sequence, predicting the subsequent bit succeeds with probability at most plus a negligible function of the security parameter, for all PPT predictors.[10] This test captures the unpredictability essential for applications like key generation, where any bias or predictability could enable attacks such as distinguishing ciphertexts from random strings or forging signatures. The next-bit test implies resistance to all polynomial-time statistical tests, confirming the output's suitability as a substitute for true randomness in computational settings.[10] Beyond basic expansion, CSPRNGs require that the seed or internal state remains computationally infeasible to recover from any polynomially many output bits, preventing reconstruction attacks that could enable prediction of unreleased portions.[11] In deterministic random bit generator (DRBG) constructions standardized for cryptographic use, such as those in NIST SP 800-90A, outputs must remain unpredictable even given knowledge of prior outputs and the algorithm, with security strength defined up to 256 bits against state determination or seed inference.[12] For iterative generators, additional properties like backtracking resistance—ensuring current state compromise does not reveal past outputs—and forward security via reseeding with fresh entropy are often mandated to mitigate persistent threats from state exposure.[11] These requirements collectively ensure the CSPRNG withstands adversarial efforts to exploit deterministic structure, grounding its reliability in the hardness of underlying computational assumptions like one-way functions.
Differences from Conventional PRNGs
Conventional pseudorandom number generators (PRNGs) produce sequences that pass statistical tests for randomness but lack guarantees against computational adversaries who may observe outputs or partial state information.[13] In contrast, cryptographically secure PRNGs (CSPRNGs) must satisfy stringent security properties, including computational indistinguishability from true random sources, where no polynomial-time algorithm can distinguish the output from uniform randomness with non-negligible advantage.[2] This requires basing CSPRNG designs on well-studied cryptographic primitives, such as block ciphers in counter mode, ensuring resistance to prediction even if an adversary knows prior outputs.[14] A key distinction lies in unpredictability: for CSPRNGs, given any sequence of prior bits, no efficient algorithm can predict the next bit with probability significantly exceeding 1/2.[2] Conventional PRNGs, such as the Mersenne Twister, often fail this, as their internal state—typically recoverable from a small number of consecutive outputs (e.g., 624 32-bit words for MT19937)—allows full sequence reconstruction and prediction.[15] CSPRNGs additionally provide backtracking resistance, preventing computation of prior states or outputs from the current state, a property absent in linear-feedback shift register-based or congruential conventional PRNGs.[16] CSPRNGs incorporate mechanisms for entropy reseeding to maintain security over long outputs, countering state compromise that could propagate in deterministic conventional PRNGs without such input.[17] While conventional PRNGs prioritize speed and long periods for non-adversarial uses like Monte Carlo simulations, CSPRNGs trade performance for cryptographic strength, often running orders of magnitude slower due to reliance on one-way functions.[18] This renders conventional PRNGs unsuitable for applications like key generation, where predictability could enable attacks, as evidenced by historical vulnerabilities in systems using them for cryptographic purposes.[14]Historical Context
Origins and Early Theoretical Foundations
The theoretical foundations of cryptographically secure pseudorandom number generators (CSPRNGs) emerged in the early 1980s amid the development of modern cryptography, driven by the need to expand short, truly random seeds into longer sequences indistinguishable from uniform randomness by computationally bounded adversaries. Prior to this, pseudorandom number generators existed for statistical simulations, such as von Neumann's 1946 middle-square method, but lacked cryptographic security guarantees against prediction or inversion by efficient algorithms.[19] The key challenge was formalizing "pseudorandomness" in a way that resisted polynomial-time attacks, rooted in the assumption that certain computational problems, like factoring or discrete logarithms, are intractable. In 1982, Andrew Yao established the core theoretical framework by defining pseudorandom sequences as those computationally indistinguishable from truly random ones by any probabilistic polynomial-time distinguisher.[20] Yao proved that this indistinguishability is equivalent to passing the "next-bit test": no efficient algorithm can predict the next bit of the sequence with success probability significantly better than 1/2, given all prior bits.[21] This equivalence demonstrated that a single predictive test suffices to validate security against all polynomial-time statistical tests, providing a foundational criterion for CSPRNGs without requiring exhaustive verification. Yao's work implied that such generators exist if one-way functions do, though unconditional constructions awaited later results; it shifted focus from statistical to computational notions of randomness, enabling practical cryptographic applications like key generation and encryption padding.[22] Building directly on Yao's definitions, Manuel Blum and Silvio Micali proposed the first concrete CSPRNG construction in 1984, using a one-way permutation to iteratively compute hardcore bits—those unpredictable even given surrounding outputs.[21] Their generator starts with a random seed in a domain where computing discrete logarithms or quadratic residuosity is hard, then outputs the least significant bit of for successive , where is a generator and a safe prime. Security relies on the intractability of predicting these bits, provably stretching the seed exponentially while satisfying Yao's next-bit criterion.[23] This paradigm influenced subsequent designs, emphasizing provable reductions to assumed-hard problems rather than ad hoc heuristics. Early limitations included efficiency concerns and reliance on specific number-theoretic assumptions, but it marked the transition from theory to constructible primitives. The formal model of a PRG as a family of functions with , secure if no efficient adversary distinguishes from , encapsulates these foundations.[22]Evolution Through Key Publications and Implementations
The foundational theoretical framework for cryptographically secure pseudorandom number generators (CSPRNGs) emerged in the early 1980s amid efforts to construct sequences indistinguishable from true randomness under computational constraints. In November 1982, Manuel Blum and Silvio Micali presented a construction relying on one-way permutations, where security hinges on the unpredictability of the next output bit given prior bits, assuming the underlying function's hardness (such as discrete exponentiation).[24] This work formalized CSPRNGs as expanders from short seeds to longer pseudorandom strings, resistant to polynomial-time prediction attacks. Concurrently, Andrew Chi-Chih Yao established that passing the next-bit unpredictability test suffices for security against all polynomial-time statistical distinguishers, linking pseudorandomness to one-way functions and enabling reductions from cryptographic assumptions. Building on these ideas, Lenore Blum, Manuel Blum, and Michael Shub introduced the Blum-Blum-Shub (BBS) generator in 1986, a simple iterative scheme based on the quadratic residuosity assumption modulo a Blum integer (product of two large primes congruent to 3 mod 4). Starting from a quadratic residue seed , each state yields a pseudorandom bit via the least significant bit (or parity), proven secure against next-bit predictors if factoring is hard.[25] While theoretically sound, BBS's quadratic expansion and large modulus requirements limited early practicality, influencing subsequent designs prioritizing efficiency alongside provable security. Practical implementations gained traction in the late 1990s, addressing real-world entropy integration and reseeding to mitigate state compromise. In 1999, John Kelsey, Bruce Schneier, and Niels Ferguson proposed Yarrow, a family of CSPRNGs separating entropy collection (via pooling from diverse sources like hardware interrupts) from generation (using a block cipher in counter mode for expansion), with automatic reseeding after fixed output volumes to bound forward security risks.[26] This design emphasized resilience to poor entropy estimation, influencing system-level RNGs in operating systems. Refining Yarrow's approach, Ferguson and Schneier detailed Fortuna in 2003, partitioning entropy sources into pools for staggered reseeding based on pool maturity, eschewing explicit estimation to avoid underestimation vulnerabilities while supporting incremental entropy addition.[27] Standardization efforts culminated in NIST Special Publication 800-90 (2006), specifying deterministic random bit generators (DRBGs) including Hash_DRBG (SHA-based), HMAC_DRBG, CTR_DRBG (block cipher counter mode), and Dual_EC_DRBG (elliptic curve point generation). However, Dual_EC_DRBG drew scrutiny in 2007 when Dan Shumow and Niels Ferguson demonstrated that NSA-chosen curve parameters enabled efficient prediction with a 32-byte secret, raising backdoor concerns due to non-standard point selection and excessive output dependence on seeds.[28] NIST revised SP 800-90A in 2011, removing Dual_EC_DRBG amid these issues and emphasizing provable security for approved mechanisms, with further updates in 2015 incorporating strengthened instantiation requirements.[11] These developments underscored the tension between theoretical ideals and deployable, auditable designs resistant to institutional influence.Entropy Management
Sources of True Randomness
True random number sources, essential for seeding cryptographically secure pseudorandom number generators (CSPRNGs), rely on inherently unpredictable physical phenomena or stochastic processes to furnish high-quality entropy, typically measured in min-entropy bits per sample. These sources must undergo rigorous validation, such as the statistical tests outlined in NIST SP 800-90B, which include assessments for independence, uniformity, and entropy estimation via methods like histogram analysis, permutation testing, and compression estimators, to confirm their suitability for cryptographic use. Entropy from such sources ensures the CSPRNG's initial state resists prediction, as even a single predictable seed can compromise the entire output stream's security.[29] Hardware-based entropy sources predominate in cryptographic applications due to their direct coupling with physical randomness, often yielding rates from kilobits to megabits per second. Thermal noise, arising from random electron movements in resistors or diodes at finite temperatures (governed by Johnson-Nyquist noise with variance proportional to temperature and bandwidth), serves as a foundational source in many integrated circuits; for instance, implementations amplify and digitize this noise after amplification and conditioning to extract bits. Shot noise from discrete charge carrier flows in semiconductors or vacuum tubes provides another classical source, exhibiting Poisson statistics that yield near-ideal randomness when properly sampled. Radioactive decay processes, such as alpha particle emissions from isotopes like Americium-241 (half-life of 432.2 years), offer timing unpredictability, though practical devices like the HotBits service have historically generated bits from decay counts at rates around 1 per second per detector.[30][31] Quantum mechanical sources leverage fundamental indeterminacy for superior entropy purity, often validated under NIST frameworks. Photonic quantum random number generators (QRNGs), which measure photon arrival times or polarizations in attenuated laser beams split by beam splitters (exploiting single-photon detection with dark count rates below 100 Hz), achieve entropy rates exceeding 1 Gbps in commercial modules; Quside's implementations, certified compliant with SP 800-90B as of 2023, use integrated photonics for tamper-resistant operation. Vacuum fluctuations or spontaneous parametric down-conversion in nonlinear crystals generate entangled photon pairs, with detection asymmetries providing bits immune to classical correlations. These outperform classical sources in resisting environmental biases but require post-processing like von Neumann debiasing to mitigate detector inefficiencies.[32][33] System-level software aggregation of entropy, while convenient, draws from indirect observables that approximate true randomness through high variance and low predictability. Operating systems like Linux's /dev/random pool entropy from hardware interrupts (e.g., timer ticks varying by microseconds due to jitter), disk seek times, inter-packet arrival delays in network traffic, and user inputs such as keystroke latencies (typically 10-100 ms with sub-ms resolution limits). These sources, hashed into an entropy pool (often 256-4096 bits), provide seeds but demand conditioning to address potential depletion or correlation; for example, Intel's RDRAND instruction, integrated since 2012 Ivy Bridge processors, internally seeds from thermal and jitter-based hardware entropy before outputting conditioned bits. Validation per SP 800-90B remains critical, as unvetted aggregation can yield min-entropy below 0.5 bits per sample under adversarial conditions like virtualized environments.[29][34]Extraction and Conditioning Methods
Conditioning components process outputs from noise sources to mitigate bias, correlations, and other imperfections, thereby increasing the entropy rate and producing bits suitable for seeding cryptographically secure pseudorandom number generators (CSPRNGs). These methods ensure that the resulting randomness meets cryptographic security requirements, such as indistinguishability from uniform randomness under computational bounded adversaries, by leveraging primitives resistant to known attacks. Inadequate conditioning can propagate weaknesses, leading to predictable CSPRNG outputs if an adversary exploits source predictability.[29] Non-cryptographic extractors, such as the von Neumann debiaser introduced in 1951, provide a simple baseline for handling biased Bernoulli sources. It pairs consecutive bits, outputting 0 for a 01 pair, 1 for a 10 pair, and discarding 00 or 11 pairs; the output bits are unbiased (probability 0.5 each) regardless of input bias , with extraction rate , which equals the binary entropy . This method extracts entropy without assuming uniformity but suffers from inefficiency—e.g., rate 0.11 bits per input bit at —and vulnerability to structured non-i.i.d. biases, rendering it unsuitable for cryptographic use without augmentation. Iterated variants, like Peres' multiple-pass extractor from 1992, improve efficiency by recursively applying von Neumann to discarded pairs, achieving rates approaching full input entropy for mildly biased sources.[35][36] For cryptographic security, standards mandate vetted conditioning using primitives that preserve or amplify min-entropy while resisting forgery or inversion attacks. NIST SP 800-90B, published January 2018, approves specific components for entropy sources feeding random bit generators, allowing full-entropy claims (up to output length) if input min-entropy exceeds a threshold (e.g., via the formula Output_Entropy = min(n_out, h_in * (n_in / n_w))), where is the narrowest input width. These functions process fixed-length inputs, often concatenated noise samples with nonces, to produce uniform-like outputs. Truncation may follow, proportionally reducing claimed entropy. Non-vetted methods cap entropy at 0.999 times output length to account for unquantified risks.[29] Approved conditioning functions per NIST SP 800-90B include:| Function | Type | Keyed/Unkeyed | Block Size / Output Length | Primitive Basis |
|---|---|---|---|---|
| HMAC | Deterministic | Keyed | Hash output size | Approved hash (e.g., SHA-256 per FIPS 180-4) |
| CMAC | Deterministic | Keyed | 128 bits | AES (FIPS 197) per SP 800-38B |
| CBC-MAC | Deterministic | Keyed | 128 bits | AES, restricted to RBG use (Appendix F) |
| Hash | Deterministic | Unkeyed | Hash output size | Approved hash (FIPS 180/202) |
| Hash_df | Deterministic | Unkeyed | Hash output size | Approved hash per SP 800-90A |
| Block_Cipher_df | Deterministic | Unkeyed | AES key size (128/256 bits) | AES per SP 800-90A |
