"Los generadores seudoaleatorios son rápidos pero predecibles": bueno, eso es cierto solo en un sentido etéreo y matemático. En la práctica, si su PRNG es criptográficamente seguro y sembrado con una aleatoriedad inicial de suficiente entropía suficiente (128 bits son suficientes), entonces no será predecible. Sin embargo, si se trata de un PRNG, esto no es cierto "One-Time Pad" sino un simple "cifrado de flujo".
OTP es un buen juguete teórico, pero no tiene ninguna ventaja práctica sobre un cifrado de flujo utilizado correctamente. Por alguna razón, muchas personas tienen fantasías de que la OTP es la respuesta definitiva para el mundo real, y esto lleva a muchos diseños equivocados.
El principal problema práctico de OTP es que la clave debe ser tan grande como el mensaje, lo cual es un inconveniente: por lo general, utilizamos la criptografía para reducir problemas: aplicamos el cifrado para reducir el problema de asegurar la confidencialidad de un archivo de 10 GB frente al problema de garantizar la confidencialidad de una clave de 16 bytes, que puede gestionarse mucho más fácilmente (incluso puede ser recordado y escrito por un humano). Si la clave es tan grande como los datos, entonces no se ha producido ninguna reducción. En el mejor de los casos, OTP puede aportar una ventaja basada en el tiempo: intercambie la clave de antemano , cuando las condiciones lo permitan, lo que permitirá una transmisión segura más adelante. Así es como funcionó el teléfono rojo : cintas llenas de bits aleatorios intercambiados semanalmente (por especial planos), para que la comunicación segura inmediata se pueda realizar en cualquier momento sin latencia.
Por supuesto, OTP confía en que el flujo de claves sea secreto . No tiene sentido usar datos públicos como flujo clave. Toda la seguridad de OTP se basa en el secreto de la clave.
Sin embargo, hay un un protocolo de intercambio de claves genérico que funciona con un público Fuente de datos similar a sus "estaciones numéricas".
Funciona así:
- Alice y Bob escuchan las estaciones numéricas y escriben, a intervalos aleatorios, algunos de los números y el "índice" de estos números. Por ejemplo, Alice recuerda "el número 171 era 40; el número 236 era 91; el número 406 era 38; ...", mientras que Bob hace lo mismo con otros números elegidos al azar en la secuencia pública.
- Al final del día, Alice le envía a Bob la lista de índices que recordaba ("Tengo los números 171, 236, 406 ...") y Bob responde con su propia lista de índices. Con alta probabilidad, tienen algunos índices en común, por lo que usarán los números correspondientes como clave compartida.
Sin embargo, un oyente oculto tendría que recordar todos , o al menos la mayoría de los números, para recordar también los mismos números. Si la "estación numérica es lo suficientemente alta (por ejemplo, genera un valor de 1 terabyte de datos por segundo, y Alice y Bob reúnen números seleccionados al azar durante un día entero), entonces el requisito de almacenamiento para el atacante puede volverse prohibitivo.
El protocolo Cachin-Maurer es un buen ejemplo de un algoritmo criptográfico teóricamente seguro pero sumamente impráctico. Al igual que OTP.