¿Qué es un generador de números pseudoaleatorios?

Autor: | Última modificación: 25 de julio de 2022 | Tiempo de Lectura: 3 minutos

¿Sabes qué es un generador de números 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 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 utiliza un PRNG 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 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?

En criptografía, los PRNG se pueden 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.

🔴 ¿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 semana

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!

[email protected]

¿Sabías que hay más de 24.000 vacantes para especialistas en Ciberseguridad sin cubrir en España? 

En KeepCoding llevamos desde 2012 guiando personas como tú a áreas de alta empleabilidad y alto potencial de crecimiento en IT con formación de máxima calidad.

 

Porque creemos que un buen trabajo es fuente de libertad, independencia, crecimiento y eso ¡cambia historias de vida!


¡Da el primer paso!