Cómo las computadoras generan números aleatorios
Las computadoras generan números aleatorios para todo, desde criptografía hasta videojuegos y apuestas. Los números aleatorios se dividen en dos categorías: números aleatorios «verdaderos» y números pseudoaleatorios, y la distinción entre ellos es importante para la seguridad de los sistemas criptográficos.
Una computadora puede generar números verdaderamente aleatorios al observar algunos datos externos, como el movimiento impredecible del mouse o el ruido del ventilador, y crear datos a partir de ellos. Esto se llama 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 ha sido más controvertido recientemente, y muchos cuestionan si el chip generador de números aleatorios de hardware incorporado de Intel es confiable. Para comprender por qué podría no ser confiable, primero debe comprender cómo se generan los números aleatorios y para qué se utilizan.
¿De qué sirven los números aleatorios?
Los números aleatorios se han utilizado durante miles de años. Ya sea tirando una moneda o tirando un dado, el objetivo es hacer que el resultado final suceda al azar. Los generadores de números aleatorios en las computadoras son similares: intentan obtener resultados aleatorios impredecibles.
Los generadores de números aleatorios se pueden utilizar para muchos propósitos diferentes. Además de las aplicaciones obvias, como la generación de números aleatorios para juegos de apuestas o la producción de resultados impredecibles en juegos de computadora, la aleatoriedad también es importante para la criptografía.
La criptografía requiere números que un atacante no puede adivinar. No podemos usar los mismos números una y otra vez. Queremos generar estos números de una manera muy impredecible para que un atacante no pueda adivinarlos. Estos números aleatorios son críticos para el cifrado seguro, ya sea que cifre sus propios archivos o simplemente use sitios web HTTPS en Internet.
número aleatorio verdadero
Quizás se pregunte cómo las computadoras generan números aleatorios.¿De dónde viene esta «aleatoriedad»?Si es solo una pieza de código de computadora, ¿no son predecibles los números generados por computadora?
Por lo general, dividimos los números aleatorios generados por computadora en dos tipos, dependiendo de cómo se generaron: números aleatorios «verdaderos» y números pseudoaleatorios.
Para generar números aleatorios «verdaderos», la computadora mide algún fenómeno físico que ocurre fuera de la computadora. Por ejemplo, las computadoras pueden medir la descomposición radiactiva de los átomos. De acuerdo con la teoría cuántica, no hay forma de saber cuándo ocurrirá la desintegración radiactiva, por lo que esto es esencialmente «pura aleatoriedad» del universo. Los atacantes no pueden predecir cuándo ocurrirá la desintegración radiactiva, por lo que no conocen el valor aleatorio.
Como un ejemplo más cotidiano, las computadoras pueden confiar en el ruido atmosférico, o simplemente usar la sincronización exacta de las pulsaciones de teclas en el 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 PM. Obtenga suficientes tiempos específicos asociados con esas pulsaciones de teclas y tendrá una fuente de entropía que puede usarse para generar números aleatorios «verdaderos». No eres una máquina predecible, por lo que un atacante no puede adivinar el momento exacto en que presionas esas teclas. El dispositivo /dev/random en Linux genera números aleatorios, «bloquea» y no devuelve un resultado hasta que se haya recopilado suficiente entropía para devolver un número verdaderamente aleatorio.
número pseudoaleatorio
Los números pseudoaleatorios son una alternativa a los números aleatorios «verdaderos». Las computadoras pueden usar valores iniciales y algoritmos para generar números que parecen aleatorios pero que en realidad son predecibles. La computadora no recopila ningún dato aleatorio del entorno.
Esto no es necesariamente algo malo en cualquier caso. Por ejemplo, si está jugando un videojuego, no importa si los eventos que suceden en el juego son causados por números aleatorios «verdaderos» o números pseudoaleatorios. Por otro lado, si usa cifrado, no querrá usar números pseudoaleatorios que un atacante podría adivinar.
Por ejemplo, supongamos que un atacante conoce el algoritmo y el valor inicial utilizado por el generador de números pseudoaleatorios. Supongamos que un algoritmo de cifrado toma un número pseudoaleatorio de este algoritmo y lo usa para generar una clave de cifrado sin agregar ninguna aleatoriedad adicional. Si un atacante sabe lo suficiente, puede revertir el cálculo y determinar el número pseudoaleatorio que el algoritmo de cifrado debe elegir en este caso, rompiendo así el cifrado.
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 llamado RdRand. El chip usa una fuente de entropía en el procesador y proporciona números aleatorios al software cuando lo solicita.
El problema aquí es que el generador de números aleatorios es esencialmente una caja negra y no sabemos qué sucede dentro. Si RdRand contuviera una puerta trasera de la NSA, el gobierno podría descifrar las claves de cifrado generadas utilizando solo los datos proporcionados por ese generador de números aleatorios.
Este es un problema serio. En diciembre de 2013, los desarrolladores de FreeBSD eliminaron la compatibilidad con el uso directo de RdRand como fuente de aleatoriedad, afirmando que no podían confiar en él.[ recurso ] La salida del dispositivo RdRand se alimentará a otro algoritmo que agrega entropía adicional, asegurándose de que no importen las puertas traseras en el generador de números aleatorios. Linux ya funciona de esta manera, aleatorizando aún más los datos aleatorios de RdRand para que sea impredecible incluso con una puerta trasera.[ recurso ] En un reciente AMA («Ask Me Anything») en Reddit, el CEO de Intel, Brian Krzanich, no respondió preguntas sobre estas inquietudes.[ recurso ]
Por supuesto, esto puede no ser solo un problema con los chips Intel. Los desarrolladores de FreeBSD también nombraron el chip Via. Este debate muestra por qué es tan importante generar números aleatorios verdaderamente aleatorios e impredecibles.
Para generar números aleatorios «verdaderos», un generador de números aleatorios recopila «entropía», o datos aparentemente aleatorios, del mundo físico circundante. Para números aleatorios que no necesitan ser realmente aleatorios, probablemente solo usen un algoritmo y un valor inicial.
Fuente de imagen: rekre89 en Flickr, Lisa Brewster en Flickr, Ryan Somma en Flickr, Huang Jiahui en Flickr