Cómo las computadoras generan números aleatorios
Las computadoras generan un número aleatorio para todo, desde la criptografía hasta los videojuegos y los juegos de azar. Hay dos categorías de números aleatorios: números “verdaderos” y números pseudoaleatorios, y la diferencia es importante para la seguridad de los sistemas de encriptación..
Las computadoras pueden generar números verdaderamente aleatorios al observar algunos datos externos, como los movimientos del mouse o el ruido del ventilador, lo que no es predecible, y crear datos a partir de ellos. Esto se conoce como entropía. Otras veces, generan números "pseudoaleatorios" mediante el uso de un algoritmo para que los resultados parezcan aleatorios, aunque no lo sean..
Este tema se ha vuelto más controvertido recientemente, ya que 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, en primer lugar, deberá comprender cómo se generan los números aleatorios y para qué se usan..
Para que se usan los números aleatorios
Los números aleatorios se han utilizado durante muchos miles de años. Ya sea lanzar una moneda o tirar un dado, el objetivo es dejar el resultado final al azar. Los generadores de números aleatorios en una computadora son similares: son un intento de lograr un resultado aleatorio e impredecible.
Los generadores de números aleatorios son útiles para muchos propósitos diferentes. Aparte de las aplicaciones obvias como la generación de números aleatorios para los juegos de azar 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 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 esté utilizando un sitio web HTTPS en Internet..
Números Aleatorios Verdaderos
Quizás se esté preguntando cómo una computadora puede generar un número aleatorio. ¿De dónde viene esta "aleatoriedad"? Si es solo un código de computadora, ¿no es posible que los números que genera la computadora puedan ser predecibles??
En general, agrupamos los números aleatorios que generan las computadoras en dos tipos, según cómo se generen: números aleatorios "verdaderos" y números pseudoaleatorios.
Para generar un número aleatorio "verdadero", la computadora mide algún tipo de fenómeno físico que ocurre fuera de la computadora. Por ejemplo, la computadora podría medir la descomposición radioactiva de un átomo. De acuerdo con la teoría cuántica, no hay manera de saber con certeza cuándo ocurrirá la desintegración radioactiva, por lo que esto es esencialmente "pura aleatoriedad" del universo. Un atacante no podría predecir cuándo se produciría una descomposición radioactiva, por lo que no sabrían el valor aleatorio.
Para un ejemplo más cotidiano, la computadora podría confiar en el ruido atmosférico o simplemente usar la hora exacta en que presiona las teclas del teclado como fuente de datos impredecibles o entropía. Por ejemplo, su computadora puede notar que presionó una tecla exactamente a 0.23423523 segundos después de las 2 pm ... Tome suficientes horas específicas asociadas con estas pulsaciones de teclas y tendrá una fuente de entropía que puede usar para generar un "verdadero" aleatorio número. No eres una máquina predecible, por lo que un atacante no puede adivinar el momento preciso en que presionas estas teclas. El dispositivo / dev / random en Linux, que genera números aleatorios, “bloquea” y no devuelve un resultado hasta que reúne 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 "verdaderos". Una computadora podría usar un valor semilla y un algoritmo para generar números que parecen ser aleatorios, pero que de hecho son predecibles. El ordenador no recopila datos aleatorios del entorno..
Esto no es necesariamente algo malo en cada situación. Por ejemplo, si está jugando un videojuego, no importa si los eventos que ocurren en ese juego están compuestos por números aleatorios "verdaderos" o números pseudoaleatorios. Por otro lado, si está utilizando encriptación, no desea usar números pseudoaleatorios que un atacante pueda adivinar.
Por ejemplo, digamos que un atacante conoce el algoritmo y el valor de semilla que utiliza un generador de números pseudoaleatorios. Y digamos que un algoritmo de cifrado obtiene un número pseudoaleatorio de este algoritmo y lo utiliza 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 encriptación debe haber elegido en ese caso, rompiendo la encriptación..
La NSA y el generador de números aleatorios de hardware de 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 conocido como 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 esencialmente una caja negra y no sabemos qué sucede dentro de él. Si RdRand contuviera una puerta trasera NSA, el gobierno podría romper las claves de cifrado que se generaron con solo los datos proporcionados por ese generador de números aleatorios.
Esta es una seria preocupación. En diciembre de 2013, los desarrolladores de FreeBSD eliminaron el soporte para usar RdRand directamente como una fuente de aleatoriedad, diciendo que no podían confiar en ello. [Fuente] La salida del dispositivo RdRand se alimentaría a otro algoritmo que agrega entropía adicional, asegurando que cualquier puerta trasera en el generador de números aleatorios no importaría. Linux ya funcionaba de esta manera, aleatorizando aún más los datos aleatorios provenientes de RdRand para que no fuera predecible incluso si hubiera una puerta trasera. [Fuente] En una reciente AMA ("Ask Me Anything") en Reddit, el CEO de Intel, Brian Krzanich, no respondió preguntas sobre estas inquietudes. [Fuente]
Por supuesto, esto probablemente no sea solo un problema con los chips Intel. Los desarrolladores de FreeBSD también llamaron a los chips de Via por su nombre. Esta controversia muestra por qué es tan importante generar números aleatorios que sean verdaderamente aleatorios y no predecibles.
Para generar números aleatorios "verdaderos", 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 no De Verdad necesitan ser aleatorios, solo pueden usar un algoritmo y un valor semilla.
Crédito de la imagen: rekre89 en Flickr, Lisa Brewster en Flickr, Ryan Somma en Flickr, huangjiahui en Flickr