La Red de Conocimientos Pedagógicos - Conocimientos históricos - ¿Por qué se dice que las computadoras (computadoras) no pueden generar números verdaderamente aleatorios?

¿Por qué se dice que las computadoras (computadoras) no pueden generar números verdaderamente aleatorios?

En primer lugar, "verdadera aleatoriedad" también tiene diferentes significados. Si desea "verdadera aleatoriedad", solo puede confiar en la mecánica cuántica para la inspección visual. La llamada aleatoriedad verdadera generalmente no se refiere a esto, sino que se refiere a la aleatoriedad en un sentido estadístico, es decir, tiene incertidumbre y puede usarse de manera segura en finanzas y otros campos.

La respuesta es que los sistemas informáticos pueden generar números aleatorios estadísticamente verdaderos.

Los números aleatorios en la mayoría de los programas y lenguajes (como los de C, MATLAB) son, de hecho, simplemente pseudoaleatorios. Es un número pseudoaleatorio generado por una función determinable (congruencia lineal de uso común) a través de una semilla (reloj de uso común). Esto significa que si se conoce la semilla, o el número aleatorio que se ha generado, es posible obtener información sobre la siguiente secuencia de números aleatorios (predictibilidad).

Intuitivamente, una computadora es un dispositivo determinable y predecible. Obviamente es imposible generar aleatoriedad verdadera por sí misma mediante un código determinista línea por línea. Sin embargo, es posible que podamos tomar un desvío...

El método de implementación es simplemente una combinación de software y hardware, o la introducción de variables fuera del sistema (imagine software, código y algoritmos como un todo). sistema cerrado).

Un ejemplo típico es el generador de números aleatorios (/dev/random) en el kernel UNIX, que teóricamente puede generar aleatoriedad verdadera. Es decir, la generación de este número aleatorio es independiente de la función de generación. En este momento, decimos que el generador no es determinista.

Específicamente, UNIX mantiene un grupo de entropía y recopila continuamente eventos de dispositivo no deterministas, es decir, ruido de hardware generado en el entorno operativo de la máquina como semillas.

Por ejemplo: reloj, tiempo de respuesta de solicitudes de IO, intervalo de tiempo de interrupciones de hardware específicas, velocidad de pulsación del teclado, cambios de posición del mouse, incluso ondas electromagnéticas circundantes, etc... Intuitivamente, cada vez que presionas Señales como como el teclado, los movimientos del mouse, los cambios en la intensidad de la señal Wi-Fi de los vecinos, la velocidad de escritura en el disco, etc., se pueden usar para generar números aleatorios.

Más específicamente, el kernel proporciona una interfaz para llenar datos en el grupo de entropía:

Por ejemplo, para el mouse,

void add_mouse_randomness(__u32 mouse_data)

El subsistema del núcleo y el controlador llaman a esta función para llenar el grupo de entropía con la posición del mouse y el intervalo de interrupción como fuentes de ruido.

Entonces, la conclusión es que los programas y algoritmos por sí solos no pueden producir aleatoriedad verdadera, pero el sistema informático en su conjunto puede producir aleatoriedad verdadera en un sentido estadístico de manera indirecta.