¿Cómo generan las computadoras salidas completamente aleatorias?

Esa es una gran pregunta que literalmente determina si el mundo está volado por armas nucleares antes de que te vayas a la cama esta noche.

Lo interesante de los números aleatorios es que le permiten cifrar datos. Le permiten realizar operaciones matemáticas que son muy fáciles en una dirección pero muy difíciles en otra. Pero el problema es que si sus números no son aleatorios, cualquier atacante antiguo puede adivinar cuál es su secuencia de números y entrar en su sistema.

Ahora, hasta donde yo sé, los números aleatorios se obtienen principalmente de generadores de números pseudoaleatorios. Estas son funciones matemáticas que saltan muy rápido y dan lo que estadísticamente parece ser un número aleatorio y se ven así.

Observe cómo a veces tiene grupos, eso está bien porque los grupos son más probables que el diseño casi perfectamente uniforme que las personas asocian con números aleatorios. Sin embargo, estos generadores vienen con problemas. Si sigues la secuencia de números desde cero cada vez obtendrás exactamente el mismo patrón, es decir, los malos saben cuál es tu secuencia.

La solución general es evitar esto, comenzar desde un lugar diferente cada vez que esto se puede hacer con lo que se conoce como siembra. Usted le dice al generador que comience en este punto, excepto que si usa un número específico, obtendrá la misma secuencia.

Entonces, los genios de la computadora decidieron usar números que son externos al generador y al programa que lo ejecuta. Comprobarían los tiempos de ping a los dispositivos de red o utilizarían el movimiento de su mouse. Si alguna vez le han dicho que mueva las cargas de su mouse cuando está encriptando un archivo, ahora sabe por qué, para obtener buenos números aleatorios.

Pero aquí está lo que algunas de estas funciones matemáticas a pesar de ser sembradas al azar se repetirán después de decir un millón de números y comenzarán de nuevo. La mayoría de las veces esto está bien, excepto si está usando más de un millón de números aleatorios en su programa de lo que está en un aprieto. Por lo tanto, a la gente se le ocurrieron tasas de repetición cada vez mayores para el generador y usar nuevos y elegantes números de siembra para que todo su trabajo duro no se desperdicie.

Lavarand, mi favorito, es Wikipedia, que en realidad llega al extremo de tomar fotografías de conjuntos de lámparas de lava y convertir los valores de píxeles aleatorios en números semilla para un generador de números aleatorios. La belleza detrás de esto es que no solo las lámparas de lava son aleatorias, sino que también lo son las condiciones de iluminación y la temperatura del aire y la presión y cada pequeño detalle hace que sea más difícil para los atacantes adivinar qué número está utilizando para sembrar su generador. Se vuelve tan difícil que podrían intentar entrar en su computadora usando el ataque de fuerza bruta – Wikipedia, pero esa es una conversación para otro momento. Por ahora mira la bonita foto.

No lo hacen, y no pueden. No estoy seguro de por qué las respuestas a este efecto se están colapsando. Esa es la verdad simple y honesta. Los algoritmos generadores de números “aleatorios” en las computadoras se denominan “pseudoaleatorios”. Diferentes algoritmos pueden acercarse mejor a la aleatoriedad ‘verdadera’ y reducir la tasa de “ciclos”, generando el mismo número dos veces.

La entropía debe recolectarse desde entradas externas, como un humano o algún sensor. Una fuente común en Linux son las interrupciones de hardware. Esto es realmente un gran problema en las máquinas virtuales, donde las fuentes de entropía ‘pseudoaleatorias’ comúnmente utilizadas son en realidad más predecibles o mucho menos frecuentes. Existen protocolos para intercambiar información de entropía desde un servidor con más interrupciones de hardware a diferentes PC clientes (generalmente máquinas virtuales en grandes nubes) que necesitan datos aleatorios.

Completamente aleatorio tiene una definición muy estricta (asociada con la criptografía), si desea comprenderla mejor, le sugiero que lea sobre PRNG.

Dicho esto, aquí hay algunos ejemplos de salidas de aspecto aleatorio (es decir, alta entropía):

  1. El número de tics de tu CPU
  2. La cantidad de veces que moviste el mouse
  3. Agregación de contadores de controlador de red
  4. Agregación de contadores de tarjetas de sonido.

Por supuesto, siempre puedes mezclar y combinar dos o más de los anteriores

Las CPU Intel / AMD más nuevas tienen un generador de números aleatorios incorporado (basado en un efecto físico, por ejemplo, ruido térmico), al que puede acceder el software utilizando la instrucción RdRand (tenga en cuenta que en el caso de AMD, “más nuevo” significa Ryzen, un chip que literalmente salió este año).

También hay chips de propósito especial que puede agregar a algún dispositivo cuando la aleatoriedad verdadera es importante (por ejemplo, http://ieeexplore.ieee.org/stamp … (PDF)).

De lo contrario, debe confiar en fuentes externas como interrupciones de hardware para obtener algo mejor que la seudoaleatoriedad que puede hacer en el software.

Por su cuenta, no lo hacen. Necesitan una semilla para generar un número aleatorio y esa semilla debe ser aleatoria. Había oído hablar del tiempo utilizado y de rarezas como el ruido atmosférico y otros generadores de ruido blanco. Otras fuentes de casi aleatoriedad son los clics del mouse y las pulsaciones de teclas. Pero cualquier cosa que genere un número aleatorio computacionalmente no es realmente aleatorio. Todo lo que una computadora puede hacer es determinista.

Ellos no.

Las computadoras solo pueden ‘pensar’ lógicamente. Esto los hace incapaces de generar un número completamente aleatorio. El funcionamiento de los generadores de números aleatorios / funciones aleatorias es que tienen una ‘semilla’ que es una lista de números del número que se extrae. Ver generador de números pseudoaleatorios – Wikipedia.

Tienen un poco de radio y un detective. Ahora, cuando el radio se descompone, el detector se activa, hace una señal eléctrica y pasa a través de las caras internas y puede leerse en función de JavaSCript

Las computadoras no pueden generar salidas completamente aleatorias porque sigue el mismo algoritmo para obtener un número cada vez. La salida puede parecer aleatoria, no lo es.