Saltar al contenido
ecdsa.com

CSPRNG (generador aleatorio criptográficamente seguro)

Un generador de números aleatorios cuya salida no se puede predecir ni distinguir de la aleatoriedad real, ni siquiera por un atacante que haya visto salidas anteriores; es imprescindible para claves, nonces, sales y tokens.
También se escribeCSPRNGrandom number generatorDRBGgetRandomValues/dev/urandom

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.

Estándares y referencias

Todos los términos