Hace unos años un amigo tenía un conocido en el casino, era el que tiraba la bola en la ruleta, mejor conocido cómo crupier.

Hay miles de historias de crupiers. Siempre hay un fanático de la rula que cuenta historias sobre crupiers que son amigos y ante una seña le avisan que van a tirarle a tal o cual zona (si no conocen la ruleta, los números están puestos de manera muy desorganizada adrede) entonces el jugador sabría a qué números jugar. Y luego, después de 20 o 30 tiros, el jugador obtiene una ganancia ya que el crupier de manera consciente intentaba que la bolita caiga en determinada zona.

Esto no es algo perfecto, obviamente (de hecho, para eso están los metalcitos que hacen que la bolita rebote) pero en una gran cantidad de largadas las posibilidades (que son 1 en 36) se achican y mucho si el crupier tiene «mano». Obviamente todo esto en estos últimos años se ha ido diluyendo ya que los casinos están cada vez más monitorizados y quienes están «en las cámaras» se conocen todas estas artimañas. Por eso también existen las historias de los que «reventaron banca» y fueron expulsados de por vida. No todos tienen pura suerte.

Ahora, ¿qué sucede con las computadoras? Porque desde que existen los casinos online afortunadamente para estos no hay crupiers amigos del usuario, pero a la vez (y para ser serios y confiables) necesitan tener la mayor aleatoriedad posible cuando jugamos por ejemplo a la ruleta. O al menos eso sería lo ideal… Ahí es donde entran los generadores de números aleatorios.

Esto es un concepto muy estudiado desde los inicios de la informática… ¿cómo podemos hacer que una computadora, que está diseñada para dar el mismo resultado a partir de los mismos datos de entrada, dé cualquier resultado? Es algo que parece muy sencillo en teoría, pero en la práctica siempre ha sido un dolor de cabeza.

Y es que, los primeros generadores de números aleatorios nunca fueron tan aleatorios. Hay muchísimos ejemplos de esto, uno de los más recordados fue el botón shuffle de los primeros iPods que no era para nada aleatorio.

Cómo funcionan los generadores de números aleatorios

Un generador de números aleatorios funciona así: se usa un algoritmo, el cual elige un valor inicial (llamado semilla o feed) y con él se realizan un montón de operaciones matemáticas, de las cuales surge un resultado. El problema en este caso es que dependemos de la presición de esta semilla, ya que si, por ejemplo, se una un «numero entre 0 y 65535» tenemos 65536 valores posibles y luego tendremos repeticiones.

Es por eso que se usan otros factores para agregar complejidad al asunto. Por ejemplo movimientos del mouse o variables cómo la hora, entre tantos ootros. La aleatoriedad mejora, sí, pero en cierto sentido también se está limitado a situaciones cómo la presición de los movimientos del mouse o que también la presición de la variable «tiempo» no sea los suficientemente compleja. Es por eso que  estos algoritmos tuvieron humildemente que cambiar de nombre y técnicamente se denominan generadores de números pseudo-aleatorios. No son aleatorios, pero podría decirse que están muy bien.

¿Cómo se prueba la aleatoriedad?

Si bien no existe la prueba de aleatoriedad perfecta, para probar estos generadores se usan pruebas estadísticas. Esto conlleva tiempo y análisis, claro, una de las más sencillas es apilar los resultados y mostrarlos gráficamente. El resultado debería ser algo bastante plano, sin «picos» de resultados (ahí es donde habría un problema).

Una forma que encontraron los matemáticos de comprobar con precisión todo esto es utilizando softwares que usen números cada vez más complejos y testeen los generadores. Lo que buscan estos testers es que la entropía y aleatoriedad sea tal que parezca lo más natural posible, y créanme, no es algo sencillo.

Han habido graves problemas por usar generadores de números aleatorios no tan fiables. Por ejemplo entre 2006 y 2008 el generador de números aleatorios de la distribución de GNU/Linux Debian funcionaba de manera errónea debido a un cambio que hizo un desarrollador y no había sido revisado. Lo mismo en 2013 con una función de Java que limitaba la aleatoriedad.

La famosa distrubución de GNU/Linux Debian tuvo problemas con el generador de números aleatorios que incorporaba.

Una de los problemas más recordades fue hace mucho, alrededor del año 2000, con el sitio de apuestas Planet Poker, donde usaron un generador tan malo que no podía generar todas las mezclas de cartas, algo que fue estudiado y explotado por jugadores profesionales. Por suerte, este Casino Online Argentina utiliza un generador realmente fiable, primero porque le conviene y segundo porque no quieren tener problemas con sus usuarios.

Los generadores modernos, cerca de la perfección

En la actualidad – por suerte – es casi imposible que un generador de números aleatorios no sea, prácticamente, perfecto. Una de las mejoras que se han agregado es el ingreso de variables realmente aleatorias que son sacadas de la naturaleza. Una de las populares es utilizar el ruido atmosférico (o ruido de fondo) de varias estaciones de radio y con ello generar un número. O sistemas de detección de carga electroestática.

Este tipo de variables son consideradas realmente impredecibles e irrepetibles, lo que lleva la calidad de estos generadores aleatorios a niveles de extrema confianza. También se usan otros procesos que se consideran impredecibles y son normalmente subatómicos cómo desintegración radioactiva o ruido térmico.

Los generadores en la informática

La historia de los generadores de números aleatorios se remonta a la mitad de la década de 1940. Por entonces, RAND Corporation creó una máquina generadora de números aleatorios por pulso. Por primera vez, una buena secuencia larga de números aleatorios de alta calidad se ponía a disposición de cualquiera que la necesitara: científicos, investigadores, matemáticos.

Computadora RAND.

Del otro lado del Atlántico, una máquina similar, ERNIE, diseñada por aquel famoso equipo de descifrado de códigos de la Segunda Guerra Mundial se usó para generar números aleatorios para la lotería del Reino Unido.

Computadora ERNIE (UK)

En 1951, se agregó por primera vez un generador de números aleatorios a una computadora de uso general, la Ferranti Mark 1. La Mark 1 se envió con una instrucción de números aleatorios incorporada que podía generar 20 bits aleatorios a la vez, utilizando ruido eléctrico. La función fue diseñada por un señor bastante conocido por nosotros, los Nerds, Alan Turing.

La evolución fue constante, hasta que llegamos casi a la perfección.

Hoy, tu PC tiene un generador de números aleatorios por hardware y es realmente bueno. Por dar un ejemplo, ese chip que tanto hemos relajado porque era el apuntado a la hora de actualizar Windows 11, el TPM, trae un HRNM (hardware random number generator). Cómo hemos hablado anteriormente, estos chips sirven para dar una capa extra de seguridad en cada dispositivo y es esencial que tengan un generador de números aleatorio.

¿Cómo funciona un HRNM? Entre tanto que he buscado, me gustó la explicación que da Wikipedia sobre el generador de números aleatorios por Hardware que venía en los procesadores VIA C3. Estos, en lugar de utilizar ruido térmico, los bits sin procesar se generaban mediante el uso de cuatro osciladores de funcionamiento libre que estaban diseñados para funcionar a diferentes velocidades. La salida de dos se sometía a XOR para controlar la polarización en un tercer oscilador, cuya salida sincroniza la salida del cuarto oscilador para producir el bit sin procesar. Las variaciones menores en la temperatura, las características del silicio y las condiciones eléctricas locales provocaban variaciones continuas de la velocidad del oscilador y, por lo tanto, producpian la entropía de los bits en bruto.

Para garantizar aún más la aleatoriedad, en realidad había dos RNG de este tipo en cada chip, cada uno colocado en diferentes entornos y girado sobre el silicio. El resultado final era una mezcla de estos dos generadores. La tasa de salida sin procesar es de decenas a cientos de megabits por segundo, y la tasa blanqueada es de unos pocos megabits por segundo. El software del usuario puede acceder al flujo de bits aleatorio generado utilizando nuevas instrucciones de lenguaje de máquina sin privilegios.

4 COMENTARIOS

  1. Esperaba mencion al » Lavarand » la pared de lamparas de lava que creo Silicon Valley para generar numeros

  2. eVer

    Data nerd pura y dura y con chivo justificado. Más no se puede pedir, gracias Guille

Dejá una respuesta

Por favor ingrese su comentario!
Por favor ingrese su nombre aquí