¿Cómo una computadora genera un número aleatorio?

Con los lenguajes de desarrollo que tienen un nivel cada vez más alto, a veces ya no nos preguntamos cómo funciona exactamente debajo del capó. Por ejemplo, ¿cómo logra que una computadora genere un número aleatorio, que es en esencia lo contrario de lo que hace una máquina?

Este artículo se basa en una discusión entre colegas. Con nuestros problemas de desarrollo, nos preocupamos por nuestros algoritmos, cómo implementar lo que se espera. Pero estamos en un nivel que ahora está muy lejos de la máquina. Llegamos a no hacernos más la pregunta de cómo funciona a un nivel muy bajo.

Los números aleatorios son un muy buen ejemplo. Para el desarrollador, nada podría ser más sencillo. Una función rand() o random() dependiendo del idioma utilizado y eso es todo. Pero cuando miramos el tema, nos decimos que el azar en la computación no existe. Nada es más determinista y racional. La aleatoriedad no existe, solo puede haber pseudoaleatoriedad basada en cosas que son lo suficientemente impredecibles como para dar la impresión de aleatoriedad. Hay varias posibilidades para esto.

Oportunidad en eventos físicos

Uno de los mejores métodos es confiar en eventos físicos: ruido electromagnético, ruido térmico, radiactividad… con un generador de hardware. La idea es amplificar este evento físico suficientemente impredecible, medirlo y convertirlo en un número, a menudo entre 0 y 1.

método cuántico

Un método muy fiable, pero aún en desarrollo, se basa en las propiedades cuánticas de los fotones. De hecho, los fenómenos cuánticos son por naturaleza indeterminados y, por lo tanto, impredecibles. Los métodos existentes a menudo usan la forma en que se comportan los fotones frente a un espejo. El fotón puede reflejarse o atravesar el espejo. Este fenómeno es puramente aleatorio y, por lo tanto, se puede utilizar para generar una serie de 0 y 1 en función de este fenómeno.

método algorítmico

Finalmente, existen métodos algorítmicos para generar números pseudoaleatorios, como los generadores lineales congruentes  o Mersenne-Twister .

 

Porque si la aleatoriedad se puede usar para jugar (videojuegos, por ejemplo), también es muy importante en términos de seguridad y criptología. En este contexto, es fundamental no poder adivinar los elementos que se utilizaron para la generación. Porque con esto último, es posible deducir el resto.

Deja una respuesta