Cuando hablamos de programas informáticos y computación, siempre se trata de sistemas deterministas. A nivel filosófico, muchos aseguran que el universo en general, la física y la química, también son deterministas, es decir, no existe la aleatoriedad.
No vamos a entrar a un debate tan profundo, pero sobre este tema hay algo claro: en computación no existe la aleatoriedad. Un ordenador es un sistema organizado y consistente, debe dar los mismos resultados en base a unos inputs concretos. Sin embargo, hay librerías, métodos de encriptación y videojuegos en los que se ve continuamente la generación de números aleatorios (RNG).
Cómo se generan resultados aleatorios en computación
En la práctica todos los métodos que existen son pseudo-aleatorios, basándose en un input muy difícil o prácticamente imposible de predecir. Este input de base se conoce como semilla (seed) que debe ser determinado por factores externos para ser caótico e impredecible.
Estos serían algunos de los ejemplos más destacables para generar semillas:
LavaRand
CloudFlare es una de las principales redes de distribución de contenido del mundo, y además de ofrecer soporte de servidores también deben garantizar el buen funcionamiento de los protocolos de seguridad. Para la criptografía usan una serie de métodos bastante llamativos por su originalidad.
La idea es sencilla, grabar continuamente objetos que se muevan y cambien continuamente la imagen captada por la cámara. Entre eso y las variaciones ambientales de cada situación, las imágenes que se capturan son ideales para generar hashes realmente caóticos e impredecibles.
- Lámparas de lava: en sus oficinas de San Francisco tienen una habitación con lámparas de lava, la cera de dentro está moviéndose y cambiando de forma continuamente.
- Péndulos dobles: en el caso de Londres tienen otra habitación con péndulos que pueden moverse durante mucho tiempo de manera inconsistente. Además en este caso la iluminación también ayuda a generar entropía dado que proyectan sombras que también influyen en la imagen.
- Móviles arcoíris: en las oficinas de Austin cuentan con un despliegue de móviles de colores y translúcidos a la entrada. La luz, la brisa o el abrir y cerrar de las puertas influye en los movimientos impredecibles de estos objetos.
Inputs humanos
Si alguna vez has tenido que recurrir a protocolos Secure Shell (SSH) a través de programas como PuTTY seguramente ya habrás visto un método para generar claves aleatorias. Concretamente el del movimiento de ratón, dado que en la pantalla el cursor tiene unos datos registrados de coordenadas, al moverse por input humano estas varían de manera bastante caótica.
También el teclado puede jugar un papel importante para generar entropía real, el tiempo que pasa entre que se pulsa cada tecla da variaciones muy impredecibles. Muchas webs a la hora de generar un hash para almacenar las cookies se aprovechan de estos datos.
Smartphones
Los dispositivos modernos tienen una serie de sensores y medidores para distintas funciones. Desde acelerómetros, GPS, sensores de orientación, magnetómetros; todos dan una serie de datos fácilmente variables. Usar estos datos en conjunto puede dar buenos resultados impredecibles.
Esto es algo que no tiene muchos casos prácticos, más bien ha sido objeto de estudio por su potencial para crear sistemas de generación de entropía en masa.
Ruido atmosférico
Los fenómenos atmosféricos –principalmente los rayos– generan ondas radioeléctricas que son detectables por transistores comunes de radio. Estas ondas son caóticas e inconsistentes, es decir, ruido real y de calidad para la generación de números aleatorios.
La web RANDOM.ORG es un sitio en el que se ofrecen distintos tipos de generadores, todos basados en este tipo de ruido. Aquí tenemos un ejemplo incrustado directamente desde la web.
Reloj
El uso de las cifras del reloj es uno de los más clásicos y evidentes. Cualquier fórmula algoritmo se puede programas para que use una variable como los milisegundos del reloj de cualquier sistema, un número permanentemente cambiante.
Ahora bien, cierto es que aunque sea muy difícil de predecir, el tiempo avanza de manera lineal, por lo tanto esas cifras son menos caóticas. Esto hace que este método sea menos conveniente para conseguir aleatoriedad segura a nivel de criptografía, pero sigue siendo útil para otros casos.