¿Sabes qué es un generador de números pseudoaleatorios? ¿Alguna vez has pensado en como generar numeros pseudoaleatorios ? La aleatoriedad es un concepto que se utiliza comúnmente en varios campos de la ciencia. En el caso de la informática, por ejemplo, no encontramos la excepción. En este post, hablaremos acerca de una herramienta que se relaciona con el concepto de aleatoriedad y cómo puede aplicarse al campo de la criptografía. A continuación, te explicaremos qué es, cómo funciona y para qué se puede usar un generador de números pseudoaleatorios (PRNG).
¿Qué es un generador de números pseudoaleatorios?
Los generadores de números pseudoaleatorios (PRNG) son algoritmos deterministas (es decir, que con un solo input se genera siempre el mismo output) que son capaces de generar patrones a partir de una semilla (o seed, en inglés). Se puede utilizar el output de un prng stream como keystream (Ks) en un algoritmo de stream. Sin embargo, para esto se requiere que el PRNG sea criptográficamente seguro y que nunca utilice la misma semilla más de una vez.
Los generadores de números pseudoaleatorios se utilizan, por ejemplo, en estudios de data science. Cuando se necesita probar un conjunto de datos aleatorios y, luego, poder replicar dichos resultados, se utilizan generadores de números pseudoaleatorios y, así, se pueden obtener utilizando una simple semilla de información. En ocasiones, la semilla es el código de tiempo generado automáticamente por el ordenador, pero, a continuación, veremos que hay PRNG seguros e inseguros que se pueden usar en criptografía.
Marsenne Twister PRNG (MT19937)
El MT19931 es el generador de números pseudoaleatorios que utilizan lenguajes de programación como Python y C++ por defecto. Es uno de los algoritmos PRNG más populares, pero no se considera criptográficamente seguro. Sus características son las siguientes:
- Usa un estado interno de 624 integers de 32 bits, que se generan inicialmente a partir de la semilla. Cada 624 outputs, se realiza una permutación en el estado interno. Su periodo es de 219937, un número que fue calculado especialmente para el funcionamiento del algoritmo.
- Para cada output, se genera un integer de 32 bits y lo somete a una función, que es reversible.
- Dados 624 outputs de MT19937, se puede replicar el estado interno y, por eso, se pueden predecir cuáles son los futuros outputs por medio de un ataque de fuerza bruta.
¿Cómo se eligen semillas seguras para un PRNG?
Incluso si el generador de números pseudoaleatorios está desarrollado de forma segura para la criptografía, la semilla debe generarse de manera secreta y confidencial, en aras de que no pueda romperse el algoritmo. Para ello, se deben seguir las siguientes recomendaciones a la hora de escoge un número del uno al dos o escoger la semilla de un PRNG:
- NO se deben generar semillas a partir de los códigos de tiempo generados automáticamente por el ordenador. Los timestamps no son una fuente segura de aleatoriedad, ya que, si se conoce el tiempo en el que se creó la semilla, entonces es fácil encontrarla por medio de un ataque de fuerza bruta.
- Nunca se debe reutilizar una semilla si se quiere usar para la generación de un keystream para criptografía.
- Siempre se debe usar una fuente de aleatoriedad real y segura, a partir de métodos como los que te explicaremos a continuación.
Aleatoriedad real
Para obtener una fuente real y segura de aleatoriedad, se debe lograr sin hacer uso de un algoritmo determinista. Para ello, se usan métodos basados en:
- Fuentes de entropía, como el movimiento del ratón, el comportamiento de ciertos drivers, etc.
- Información de los dispositivos de hardware. Es decir, el uso de variables físicas como el ruido generado por un micrófono, el ruido digital de una fotografía, pequeños cambios de temperatura, etc.
¿Para qué se utilizan los PRNG?
🔴 ¿Quieres entrar de lleno a la Ciberseguridad? 🔴
Descubre el Ciberseguridad Full Stack Bootcamp de KeepCoding. La formación más completa del mercado y con empleabilidad garantizada
👉 Prueba gratis el Bootcamp en Ciberseguridad por una semanaEn criptografía, un generador de números pseudoaleatorios se puede utilizar para la generación de keystreams seguros. Algunos modelos criptográficos, como el de stream, requieren de estas claves infinitas, las cuales se generan a partir de números pseudoaleatorios. Para la criptografía de stream, por ejemplo, se requiere que un keystream cuente con las siguientes características:
- Debe parecer aleatorio a simple vista, pero no serlo y estar generado por una clave pequeña.
- La clave no se debe poder encontrar a partir del criptoanlálisis del keystream.
- Se debe generar un keystream nuevo cada vez que vaya a utilizarse en un algoritmo.
Por eso, se aconseja el uso de un generador de números pseudoaleatorios criptográficamente seguro para la generación de estos keystreams o flujos de claves.
¿Cómo aprender más?
Ahora ya sabes qué es un generador de números pseudoaleatorios y cómo se utiliza en criptografía. Sin embargo, el mundo de la ciberseguridad es mucho más amplio y, si quieres convertirte en un experto en la materia, aún debes continuar aprendiendo sobre el tema. Ha llegado la hora de dar un paso adelante y tomar las riendas de tu formación; por ello, no puedes perderte nuestro Ciberseguridad Full Stack Bootcamp, donde te especializarás en menos de 7 meses. ¡Inscríbete ya!