Digamos que Alice y Peter tienen una memoria flash USB de 4GB. Se encuentran y guardan en ambos sticks dos archivos llamados alice_to_peter.key
(2GB) y peter_to_alice.key
(2GB) que contienen bits generados aleatoriamente. Nunca se vuelven a encontrar, pero se comunican electrónicamente. Alice también mantiene una variable llamada alice_pointer
y Peter mantiene una variable llamada peter_pointer
, las cuales se establecen inicialmente en cero.
Cuando Alice necesita enviar un mensaje a Peter, lo hace (donde n
está el enésimo byte del mensaje):
encrypted_message_to_peter[n] = message_to_peter[n] XOR alice_to_peter.key[alice_pointer + n]
encrypted_payload_to_peter = alice_pointer + encrypted_message_to_peter
alice_pointer += length(encrypted_message_to_peter)
(y para máxima seguridad, la parte usada de la clave se puede borrar)
Peter recibe encrypted_payload_to_peter
, lee alice_pointer
almacenado al comienzo del mensaje y hace:
message_to_peter[n] = encrypted_message_to_peter[n] XOR alice_to_peter.key[alice_pointer + n]
Y para la máxima seguridad, después de leer el mensaje también borre la parte utilizada de la clave.
- EDITAR: de hecho, este paso con este algoritmo simple (sin verificación de integridad y autenticación) disminuye la seguridad, vea la publicación de Paŭlo Ebermann a continuación.
Cuando Peter necesita enviar un mensaje a Alice, hacen lo contrario, esta vez con peter_to_alice.key
y peter_pointer
.
Con este esquema trivial, pueden enviar cada día durante los próximos 50 años 2GB / (50 * 365) = ~ 115kB de datos cifrados en ambas direcciones. Si necesitan más datos para enviar, podrían usar claves más grandes, por ejemplo, con los discos duros de 2TB actuales (claves de 1TB) ¡sería posible intercambiar 60MB / día durante los próximos 50 años! Esa es una gran cantidad de datos en la práctica; por ejemplo, usar compresión es más de una hora de comunicación de voz de alta calidad.
Me parece que no hay forma de que un atacante lea los mensajes cifrados sin las claves, porque incluso si tienen una computadora infinitamente rápida, con fuerza bruta pueden obtener todos los mensajes posibles por debajo del límite, pero este es un número astronómico de mensajes y el atacante no sabe cuál de ellos es el mensaje real.
Estoy en lo cierto? ¿Es este esquema de comunicación realmente absolutamente seguro? Y si es seguro, ¿tiene su propio nombre? El cifrado XOR es bien conocido, pero estoy buscando el nombre de esta aplicación práctica concreta que utiliza claves grandes en ambos lados. Humildemente espero que esta aplicación haya sido inventada por alguien antes que yo. :-)
Nota: Si es absolutamente seguro, entonces es sorprendente, porque con los dispositivos de almacenamiento grandes de bajo costo de hoy en día, sería mucho más barato hacer una comunicación segura que con una criptografía cuántica costosa, ¡y esto tiene una seguridad equivalente!
EDITAR:
Creo que esto será más práctico en el futuro a medida que disminuyan los costos de almacenamiento.Puede resolver la comunicación segura para siempre.Hoy no tiene certeza si alguien ataca con éxito los cifrados existentes incluso un año después y hace que sus implementaciones a menudo costosas sean inseguras. En muchos casos, antes de que se produzca la comunicación, cuando ambas partes se encuentran personalmente, es el momento de generar las claves. Creo que es perfecto para la comunicación militar, por ejemplo, entre submarinos que pueden tener HD con teclas grandes, y la central militar puede tener un HD para cada submarino. También podría ser práctico en la vida cotidiana, por ejemplo, controlar su cuenta bancaria, porque cuando crea su cuenta se reúne con el banco, etc.