Opción cuadrada 4

Bit by Bit es una columna semanal que se centra en los avances técnicos todas las semanas en varios espacios. Mi nombre es Adam Conway y he estado cubriendo temas tecnológicos y siguiendo las últimas novedades durante una década. Si hay algo que te interesa y te gustaría que se cubra, puedes contactarme en[email protected].

Cuando piensas en aleatoriedad, es posible que te imagines el lanzamiento de un dado o la mezcla de una baraja de cartas: resultados reales e impredecibles que nadie puede prever. Sin embargo,como desarrollador, ha habido muchas ocasiones en las que he tenido que hacer uso de la aleatoriedad. Puede resultar sorprendente que, a pesar de la potencia que tienen nuestros ordenadores, no puedan lograr una aleatoriedad real. De hecho, se basan en algoritmos matemáticos complejos para simular la aleatoriedad, creando lo que se conoce comopseudoaleatoriedad.

Banner_Adam_Conway

¿Por qué las computadoras no pueden ser verdaderamente aleatorias?

Todo es cuestión de máquinas deterministas

Ejecutar Minecraft en un servidor Pterodactyl autoalojado

Las computadoras, por diseño, son máquinas deterministas. Cada operación que realizan sigue un conjunto de instrucciones específicas, lo que lleva a resultados predecibles y reproducibles. Esta previsibilidad, si bien es esencial para la confiabilidad y la consistencia, también es lo que hace que la aleatoriedad real sea difícil de lograr para las computadoras. Esencialmente, la aleatoriedad implica una falta de patrón o previsibilidad, pero las computadoras están estructuradas para ejecutar algoritmos lógicos y precisos que dejan poco espacio para la imprevisibilidad.

Los algoritmos que utilizan las computadoras para la aleatoriedad se conocen comogeneradores de números pseudoaleatorios. Se basan en valores de entrada iniciales o "semillas", y si alguna vez has jugado a un juego comoMinecraft, habrás oído hablar de las semillas. Dada la misma semilla, un generador de números pseudoaleatorios siempre producirá exactamente la misma secuencia de números. Para aplicaciones en las que la previsibilidad podría ser un problema, como en la criptografía, incluso una pequeña cantidad de previsibilidad puede ser riesgosa. Simulan la aleatoriedad lo suficientemente bien para las aplicaciones cotidianas, pero la aleatoriedad verdadera suele ser necesaria en campos que requieren alta seguridad, donde lo que está en juego es mucho mayor.

Para aproximarse a la aleatoriedad, las computadoras a veces incorporan fuentes externas “ruidosas” (como fluctuaciones térmicas o ruido electrónico en los circuitos) que están influenciadas por el mundo físico y, por lo tanto, son menos predecibles. Esto combina la entropía derivada del hardware con algoritmos, básicamente utilizando el mundo real como semilla. Sin embargo, esas fuentes de aleatoriedad puedennoser lo suficientemente aleatorias y, a veces, pueden requerir posprocesamiento y otros cambios para hacerlas lo más aleatorias posible.

Cómo se calcula la aleatoriedad a pesar de las limitaciones

Desde los juegos hasta la seguridad, ¿cómo se hace?

Cómo jugar a Pokémon Amarillo en una Nintendo 3DS pirateada

Hay algunas formas de generar aleatoriedad en el ámbito informático, y la más básica es un generador congruencial lineal o LCG. Por ejemplo,Pokémon Stadium,Pokémon Stadium 2, los juegos de la serie principal de Generación III y Generación IV yPokémon Colosseumutilizan un generador congruencial lineal de 32 bits. Esta fórmula hace que, con el tiempo, la secuencia se repita si la semilla y las constantes son las mismas. Esto no es bueno para la seguridad, pero funciona perfectamente bien para aplicaciones simples como los juegos.

En la quinta generación, Pokémon también utiliza un Mersenne Twister, capaz de generar secuencias más largas con una mejor aleatoriedad estadística. Funciona almacenando una matriz de números que se desplazan y combinan repetidamente para producir nuevos valores en la secuencia. Sigue funcionando para contextos más simples, pero cuando se trata de seguridad y usos criptográficos, utilizamos ungenerador de números pseudoaleatorios criptográficamente seguro, que utiliza algoritmos significativamente más complejos para producir un resultado.

Para introducir una capa más fuerte de imprevisibilidad, estosgeneradores criptográficamente segurosa menudo recurren a datos impredecibles del mundo real, y esto es lo que llamamos entropía. La entropía puede provenir de fuentes como movimientos del ratón, tiempos del teclado o dispositivos de hardware especializados que capturan ruido electrónico. Esta entropía se combina luego con la salida del algoritmo para hacerlo menos predecible, logrando lo que se conoce como unverdadero generador de números aleatorios. Sin embargo, la aleatoriedad verdadera es difícil de capturar, incluso con métodos basados ​​en la entropía, ya que aún requieren procesamiento para garantizar la calidad y la consistencia.

Si alguna vez generó una clave RSA en su computadora con un programa como PuttyGen, es posible que le haya pedido que mueva el mouse para generarla. Esto genera entropía que luego puede usar para producir el par de claves pública y privada de manera segura.

Todo esto quiere decir que, si juegas con regularidad, lo más probable es que los eventos "aleatorios" a los que te enfrentas no sean realmente aleatorios, sino que simplemente seanperceptiblementealeatorios. Esto plantea un desafío para los desarrolladores que necesitan resultados aleatorios, y la solución es crear algoritmos que lo hagan parecer así. Nunca podrías notar la diferencia, pero si quieres manipular algo "aleatorio", ¡por eso es posible!