Como otros han señalado, solo podemos hablar de un generador de bits aleatorio (perfectamente).
Ahora considere cualquier secuencia producida por el generador en el que vea todos los bits de salida, excepto uno de los bits. Es perfectamente aleatorio si para cualquier secuencia de este tipo no existe un algoritmo que pueda producir una conjetura en un bit desconocido con una probabilidad mayor de 50/50 de adivinar correctamente.
La idea es que no importa qué cantidad de secuencia se le dé y cuánto tiempo y recursos se le den para estudiar la salida, no hay forma de mejorar sus posibilidades de que ocurra algo desconocido. Y esto tiene que aplicarse a cada secuencia que produce el generador.
- ¿Cuáles son algunos de los mejores libros de matemáticas discretas para programadores?
- ¿Existe un algoritmo generalizado para convertir una malla de superficie triangular 3D en una malla de volumen tetraédrico?
- ¿Cuáles son las aplicaciones prácticas de las colas con doble terminación?
- ¿Qué utilizamos en una calculadora científica, microcontrolador o microprocesador?
- Cómo interpretar 'lift' y 'odds ratio' en las reglas de asociación
Es posible producir tales cosas, pero tienden a no ser capaces de producir suficiente producción lo suficientemente rápido para algunos propósitos. Y a veces queremos poder reproducir una secuencia si se le da la misma clave o semilla.
Afortunadamente, no necesitamos generadores verdaderamente aleatorios para la mayoría de las cosas. Podemos usar generadores de números pseudoaleatorios criptográficamente seguros. La definición es la misma que di para generadores perfectos, excepto que en lugar de decir “no hay ningún algoritmo que pueda mejorar su suposición”, decimos que no hay un algoritmo eficiente que pueda mejorar su suposición.
La idea es que deberíamos ser capaces de construir CSPRNG de manera que, si se siembran adecuadamente, produzcan resultados que no se pueden distinguir de forma aleatoria por ningún algoritmo que pueda ejecutarse, digamos, en el tiempo de vida del universo.