Generador de números pseudoaleatorios criptográficamente seguro


Un generador de números pseudoaleatorios criptográficamente seguro ( CSPRNG ) o un generador de números pseudoaleatorios criptográficos ( CPRNG ) [1] es un generador de números pseudoaleatorios (PRNG) con propiedades que lo hacen adecuado para su uso en criptografía . También se conoce libremente como un generador criptográfico de números aleatorios ( CRNG ) (consulte Generación de números aleatorios § "Verdadero" frente a números pseudoaleatorios ). [2] [3]

La "calidad" de la aleatoriedad requerida para estas aplicaciones varía. Por ejemplo, crear un nonce en algunos protocolos solo necesita unicidad. Por otro lado, la generación de una clave maestra requiere una calidad superior, como más entropía . Y en el caso de los blocs de notas de una sola vez , la garantía de la teoría de la información de un secreto perfecto solo se mantiene si el material clave proviene de una verdadera fuente aleatoria con alta entropía y, por lo tanto, cualquier tipo de generador de números pseudoaleatorios es insuficiente.

Idealmente, la generación de números aleatorios en CSPRNGs usa entropía obtenida de una fuente de alta calidad, generalmente la API de aleatoriedad del sistema operativo. Sin embargo, se han encontrado correlaciones inesperadas en varios de estos procesos aparentemente independientes. Desde un punto de vista de la teoría de la información, la cantidad de aleatoriedad, la entropía que se puede generar, es igual a la entropía proporcionada por el sistema. Pero a veces, en situaciones prácticas, se necesitan más números aleatorios de la entropía disponible. Además, los procesos para extraer la aleatoriedad de un sistema en ejecución son lentos en la práctica. En tales casos, a veces se puede utilizar un CSPRNG. Un CSPRNG puede "estirar" la entropía disponible en más bits.

Los requisitos de un PRNG ordinario también se satisfacen mediante un PRNG criptográficamente seguro, pero lo contrario no es cierto. Los requisitos de CSPRNG se dividen en dos grupos: primero, que pasan las pruebas estadísticas de aleatoriedad ; y en segundo lugar, que aguantan bien los ataques graves, incluso cuando parte de su estado inicial o de ejecución está disponible para un atacante. [ cita requerida ]

La mayoría de los PRNG no son adecuados para su uso como CSPRNG y fallarán en ambos aspectos. Primero, mientras que la mayoría de los resultados de PRNG parecen aleatorios para una variedad de pruebas estadísticas, no resisten la ingeniería inversa determinada. Se pueden encontrar pruebas estadísticas especializadas especialmente ajustadas a un PRNG que muestra que los números aleatorios no son realmente aleatorios. En segundo lugar, para la mayoría de los PRNG, cuando se ha revelado su estado, todos los números aleatorios pasados ​​se pueden volver a predecir, lo que permite que un atacante lea todos los mensajes pasados, así como los futuros.

En el escenario asintótico , una familia de funciones calculables en tiempo polinomial determinista para algún polinomio p , es un generador de números pseudoaleatorios ( PRNG , o PRG en algunas referencias), si extiende la longitud de su entrada ( para cualquier k ), y si es la salida es computacionalmente indistinguible de la verdadera aleatoriedad, es decir, para cualquier algoritmo de tiempo polinomial probabilístico A , que genera 1 o 0 como distintivo,