Un generador de números pseudoaleatorios criptográficamente seguro (CSPRNG, del inglés «Cryptographically Secure PseudoRandom Number Generator») es un Generador de números pseudoaleatorios (PRNG) con características que lo hacen adecuado para su uso en criptografía.
Muchos aspectos de la criptografía requieren números aleatorios, por ejemplo:
La «calidad» de aleatoriedad requerida por estas aplicaciones varía. Por ejemplo, crear una nonce en algunos protocolos necesita que solo sea única. En el otro extremo, la generación de una clave maestra requiere tanto una mayor calidad, como una mayor entropía. Y en el caso de Libretas de un solo uso, la garantía teórica del secreto perfecto sólo vale si el material para la clave es obtenido de una fuente realmente aleatoria con alta entropía.
Idealmente, la generación de números aleatorios en un CSPRNG usa entropía obtenida de un fuente de alta calidad, que puede ser un generador de números pseudoaleatorios en hardware o incluso procesos de sistemas impredecibles —aunque se han encontrado correlaciones inesperadas en varios procesos ostensiblemente independientes. Desde un punto de vista teórico, la cantidad de aleatoriedad y la entropía que puede ser generada es igual a la entropía provista por el sistema. Pero, algunas veces —en situaciones prácticas— es necesario mayor cantidad de números aleatorios que la entropía disponible. También, en la práctica, los procesos que extraen aleatoriedad del sistema en marcha son lentos. En tales instancias, un CSPRNG puede ser usado. Un CSPRNG puede «alargar» la entropía disponible sobre más bits.
Cuando toda la entropía que se dispone está disponible antes que la ejecución del algoritmo comience, realmente tenemos un cifrador de flujo. Sin embargo, algunos diseños de criptosistemas permiten el ingreso de entropía durante la ejecución, en cuyo caso no es realmente un cifrador de flujo y por ende no puede ser usado como tal. Por lo tanto, el diseño de CSPRNG y cifradores de flujo están estrechamente relacionados.
Los requerimientos de un CSPRNG ordinario también satisfacen los de un PRNG, pero no al contrario. Los requerimientos de un CSPRNG caen en dos grupos: primero, que sus propiedades estadísticas sean buenas (pasar pruebas estadísticas de aleatoriedad); y segundo, que puedan salir airosos bajo ataques severos, incluso si parte de su estado inicial o actual estado está disponible a un atacante.
La mayoría de los PRNGs no son aptos para ser usados como CSPRNG y pueden fallar en ambos ámbitos. Primero, mientras que la mayoría de las salidas de los PRNG parecen ser aleatorias ante pruebas estadísticas clasificadas, no son capaces de resistir ciertos tipos de ingeniería reversa. Pueden encontrarse pruebas estadísticas especializadas —diseñadas específicamente para un cierto PRNG— que evidencian la poca o nula aleatoriedad de los números generados. Segundo, para la mayoría de los PRNG —cuando su estado ha sido revelado— todos los números aleatorios generados anteriormente pueden ser obtenidos, permitiendo a un atacante leer todos los mensajes pasados, como también los futuros.
Los CSPRNG están diseñados explícitamente para resistir este tipo de Criptoanálisis.
Santha y Vazirani probaron que varios flujos de bit con aleatoriedad débil pueden ser combinados para producir un flujo de bits quasi-aleatorios de mejor calidad.John von Neumann probó que un algoritmo simple puede remover una cantidad considerable de sesgo de cualquier flujo de bits que debería ser aplicado a cada flujo de bits antes de usar cualquier variación del diseño de Santha-Vazirani. El campo fue llamado extracción de entropía y es objeto de investigación activa (ej., N Nisan, S Safra, R Shaltiel, A Ta-Shma, C Umans, D Zuckerman).
Incluso antes,En la discusión de esta sección, los diseños de los CSPRNG son divididos en tres clases:
Un diseño de este tipo de clase está incluido en el estándar ANSI X9.17 (Financial Institution Key Management (wholesale), en español Manejo de Claves de Instituciones Financieras (mayorista)), y también ha sido adoptado como un estándar FIPS. Trabaja de la siguiente forma:
cada vez que un número aleatorio es requerido:
Se ha sugerido que este algoritmo podría ser improvisado usando AES en vez de DES (Young and Yung, op cit, secc 3.5.1)
Hay un número de PRNG prácticas que han sido diseñadas para ser criptográficamente seguras, incluyendo:
Varios CSPRNG han sido estandarizados. Por ejemplo:
Una buena referencia (en inglés) es mantenida por el NIST.
También hay estándares para pruebas estadísticas de nuevos diseños de CSPRNG:
Escribe un comentario o lo que quieras sobre CSPRNG (directo, no tienes que registrarte)
Comentarios
(de más nuevos a más antiguos)