Cómo las computadoras generan números aleatorios

Cómo las computadoras generan números aleatorios

Las computadoras generan números aleatorios para todo, desde criptografía hasta videojuegos y apuestas. Hay dos categorías de números aleatorios: números aleatorios «reales» y números pseudoaleatorios, y la diferencia es importante para la seguridad de los sistemas de cifrado.

Las computadoras pueden generar números verdaderamente aleatorios al observar ciertos datos externos, como los movimientos del mouse o el ruido del ventilador, que no son predecibles, y crear datos a partir de ellos. A esto se le llama entropía. Otras veces, generan números «pseudoaleatorios» usando un algoritmo para que los resultados parezcan aleatorios, incluso si no lo son.

Este tema se ha vuelto más controvertido recientemente, y muchas personas se preguntan si el chip generador de números aleatorios de hardware integrado de Intel es confiable. Para comprender por qué podría no ser confiable, deberá comprender cómo se generan los números aleatorios en primer lugar y para qué se utilizan.

Para que sirven los números aleatorios

Los números aleatorios se han utilizado durante miles de años. Ya sea lanzando una moneda o un dado, el objetivo es dejar el resultado final al azar. Los generadores de números aleatorios en una computadora son similares: intentan obtener un resultado aleatorio impredecible.

Los generadores de números aleatorios son útiles para muchos propósitos diferentes. Además de las aplicaciones obvias, como la generación de números aleatorios para juegos o la creación de resultados impredecibles en un juego de computadora, la aleatoriedad es importante para la criptografía.

La criptografía requiere números que los atacantes no pueden adivinar. No podemos simplemente usar los mismos números una y otra vez. Queremos generar estos números de una manera muy impredecible para que los atacantes no puedan adivinarlos. Estos números aleatorios son esenciales para el cifrado seguro, ya sea que esté cifrando sus propios archivos o simplemente utilizando un sitio web HTTPS en Internet.

Verdaderos números aleatorios

Quizás se pregunte cómo una computadora puede generar un número aleatorio. ¿De dónde viene esta «oportunidad»? Si esto es solo un fragmento de código de computadora, ¿no es posible que los números generados por la computadora sean predecibles?

Generalmente agrupamos los números aleatorios generados por computadora en dos tipos, dependiendo de cómo se generen: números aleatorios «verdaderos» y números pseudoaleatorios.

Para generar un número aleatorio «real», la computadora mide algún tipo de fenómeno físico que tiene lugar fuera de la computadora. Por ejemplo, la computadora podría medir la desintegración radiactiva de un átomo. Según la teoría cuántica, no hay forma de saber con certeza cuándo ocurrirá la desintegración radiactiva, por lo que es esencialmente «pura casualidad» del universo. Un atacante no podría predecir cuándo se produciría la desintegración radiactiva, por lo que no sabría el valor aleatorio.

Para un ejemplo más cotidiano, la computadora podría depender del ruido atmosférico o simplemente usar la hora exacta en que presiona las teclas de su teclado como fuente de datos impredecibles o entropía. Por ejemplo, su computadora puede notar que presionó una tecla exactamente 0.23423523 segundos después de las 2 p.m. Ingrese suficientes tiempos específicos asociados con esas pulsaciones de teclas y tendrá una fuente de entropía que puede usar para generar un número aleatorio «real». No eres una máquina predecible, por lo que un atacante no puede adivinar el momento exacto en que presionas estas teclas. El dispositivo / dev / random en Linux, que genera números aleatorios, «cuelga» y no devuelve ningún resultado hasta que haya reunido suficiente entropía para devolver un número verdaderamente aleatorio.

Números pseudoaleatorios

Los números pseudoaleatorios son una alternativa a los números aleatorios «reales». Una computadora podría usar un valor semilla y un algoritmo para generar números que parecen aleatorios, pero que de hecho son predecibles. La computadora no recopila datos aleatorios del entorno.

Esto no es necesariamente algo malo en todas las situaciones. Por ejemplo, si está jugando un videojuego, no importa si los eventos que ocurren en ese juego son causados ​​por números aleatorios «verdaderos» o números pseudoaleatorios. Por otro lado, si está utilizando cifrado, no desea utilizar números pseudoaleatorios que un atacante podría adivinar.

Por ejemplo, digamos que un atacante conoce el algoritmo y la semilla que utiliza un generador de números pseudoaleatorios. Y digamos que un algoritmo de cifrado obtiene un número pseudoaleatorio de ese algoritmo y lo usa para generar una clave de cifrado sin agregar aleatoriedad adicional. Si un atacante sabe lo suficiente, podría trabajar hacia atrás y determinar el número pseudoaleatorio que el algoritmo de cifrado debe haber elegido en este caso, rompiendo así el cifrado.

El generador de números aleatorios de hardware de NSA e Intel

Para facilitar las cosas a los desarrolladores y ayudar a generar números aleatorios seguros, los chips Intel incluyen un generador de números aleatorios basado en hardware llamado RdRand. Este chip utiliza una fuente de entropía en el procesador y proporciona números aleatorios al software cuando el software los solicita.

El problema aquí es que el generador de números aleatorios es básicamente una caja negra y no sabemos qué está pasando dentro. Si RdRand contuviera una puerta trasera de la NSA, el gobierno podría romper las claves de cifrado que se generaron solo con los datos proporcionados por este generador de números aleatorios.

Es un problema grave. En diciembre de 2013, los desarrolladores de FreeBSD eliminaron el soporte para usar RdRand directamente como fuente aleatoria, alegando que no podían confiar en él. [Source] La salida del dispositivo RdRand se introduciría en otro algoritmo que agregaría entropía adicional, asegurando que las puertas traseras del generador de números aleatorios no importarían. Linux ya funcionaba de esta manera, aleatorizando aún más los datos aleatorios provenientes de RdRand para que no fueran predecibles incluso si hubiera una puerta trasera. [Source] En una reciente AMA («Pregúntame cualquier cosa») en Reddit, el director ejecutivo de Intel, Brian Krzanich, no respondió a las preguntas sobre estas preocupaciones. [Source]

Por supuesto, eso probablemente no sea solo un problema con los chips Intel. Los desarrolladores de FreeBSD también se refirieron a los chips Via por su nombre. Esta controversia muestra por qué es tan importante generar números aleatorios que sean verdaderamente aleatorios y que no sean predecibles.

Para generar números aleatorios «reales», los generadores de números aleatorios recopilan «entropía» o datos aparentemente aleatorios del mundo físico que los rodea. Para números aleatorios que realmente no necesitan ser aleatorios, solo pueden usar un algoritmo y un valor inicial.

Credito de imagen: rekre89 en Flickr, Lisa Brewster en Flickr, Ryan Somma en Flickr, Huangjiahui en Flickr

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Experto Geek - Tu Guía en Tendencias Tecnológicas