482 / 691CSPRNG

CSPRNG

Generador de números pseudoaleatorios criptográficamente seguro

Un CSPRNG genera valores a partir de un estado secreto para que conocer unos no permita predecir otros de forma práctica. También importan la entropía inicial, la recuperación del estado y el uso correcto de la interfaz.

Un CSPRNG es un generador determinista para uso criptográfico. Pseudoaleatorio no significa débil: importa la resistencia frente a un adversario bajo las condiciones indicadas. El algoritmo, la fuente de entropía y el código consumidor se evalúan por separado.

RFC 4086 distingue las secuencias criptográficamente fuertes de los generadores de simulación. Conocer parte de la salida no debe permitir adivinar el resto. Las pruebas estadísticas no bastan; una semilla predecible puede debilitar incluso una salida de aspecto complejo. [RFC 4086 — Cryptographically strong sequences]

NIST SP 800-90A Rev. 1 especifica Hash_DRBG, HMAC_DRBG y CTR_DRBG. La etiqueta CSPRNG no certifica cualquier implementación. Hay que identificar el mecanismo, sus parámetros y la obtención de entropía, no solo el nombre de una función hash. [NIST SP 800-90A Rev. 1 — DRBG mechanisms and compromise resistance]

Backtracking resistance protege salidas anteriores tras revelarse el estado actual. Prediction resistance afecta a las futuras; NIST SP 800-90A la vincula a incorporar eficazmente entropía nueva. Ninguna implica automáticamente la otra ni recuperación por una llamada más. [NIST SP 800-90A Rev. 1 — DRBG mechanisms and compromise resistance]

OpenSSL 3.5 documenta para RAND_bytes() y RAND_priv_bytes() 1 si hay éxito, 0 ante otros fallos y -1 si el método no se admite. Puede rechazar la generación si falla la fuente de entropía. La aplicación debe comprobar el resultado, no usar un búfer sin verificar. [OpenSSL 3.5 — RAND_bytes return values and errors]

libsodium randombytes_buf_deterministic() produce la misma secuencia con la misma semilla, útil para pruebas. Restaurar una instantánea de una máquina virtual puede repetir estado y salida. La reproducibilidad de pruebas no garantiza secretos independientes entre copias. [libsodium — Random data and deterministic testing]

libsodium randombytes_uniform() selecciona uniformemente por debajo de un límite superior sin el sesgo de un simple resto de división. Buenos bytes de entrada no garantizan un mapeo correcto al rango objetivo. Las claves también deben respetar las reglas de su algoritmo. [libsodium — Random data and deterministic testing]

RFC 8439 exige no repetir un nonce con la misma clave; parecer aleatorio no demuestra unicidad. RFC 6979 describe en cambio la creación determinista del valor k de firma. Un CSPRNG no sustituye universalmente las reglas del protocolo. [RFC 8439 — Nonce uniqueness] [RFC 6979 — Deterministic signing]

Registre versión de biblioteca, mecanismo, inicialización, errores y comportamiento al restaurar o clonar el estado. OpenSSL y libsodium documentan sus funciones concretas, no la seguridad de cualquier cartera. Una buena generación tampoco impide una filtración posterior de la copia de seguridad. [OpenSSL 3.5 — RAND_bytes return values and errors] [libsodium — Random data and deterministic testing]

Para obtener la imagen más completa, lee esta entrada junto con Cryptographic Entropy, Random Number Generator, Deterministic RNG, Seed Generation. También enlazan con esta entrada Dice Roll Entropy, Cryptographic Entropy, Random Number Generator, Deterministic RNG.

DOC · 001RFC 4086 — Cryptographically strong sequencesEspecificación ↗DOC · 002NIST SP 800-90A Rev. 1 — DRBG mechanisms and compromise resistanceEspecificación ↗DOC · 003OpenSSL 3.5 — RAND_bytes return values and errorsDocumentación ↗DOC · 004libsodium — Random data and deterministic testingDocumentación ↗DOC · 005RFC 8439 — Nonce uniquenessEspecificación ↗DOC · 006RFC 6979 — Deterministic signingEspecificación ↗
Fuentes primero · No es asesoramiento financiero