Los sistemas operativos proporcionan uno, con una semilla obtenida de la entropía del hardware: getrandom(2) y /dev/urandom en Linux, getentropy y arc4random en macOS y los BSD, BCryptGenRandom en Windows. Las API de los lenguajes los envuelven: crypto.getRandomValues() en los navegadores (como máximo 65.536 bytes por llamada), crypto.randomBytes en Node.js, secrets en Python, crypto/rand en Go, SecureRandom en Java. Math.random(), random de Python y otros generadores de uso general son predecibles y nunca deben generar secretos.
NIST SP 800-90A Rev. 1 especifica los generadores deterministas aprobados (Hash_DRBG, HMAC_DRBG y CTR_DRBG), SP 800-90B las fuentes de entropía y SP 800-90C cómo combinarlos; los módulos FIPS 140-3 deben usarlos. Dual_EC_DRBG, ya retirado, es el ejemplo clásico de un generador con una presunta puerta trasera.
La mayoría de los fallos reales de los RNG tienen que ver con la semilla, no con los algoritmos: dispositivos embebidos que generan claves antes de disponer de suficiente entropía, máquinas virtuales clonadas que se reanudan con el mismo estado y procesos bifurcados (fork) que comparten un generador. ECDSA es especialmente sensible porque un nonce predecible expone la clave; los nonces deterministas o reforzados con aleatoriedad (hedged) eliminan esa dependencia.