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.
fuente
Respuestas:
Sí, esta es una almohadilla única . Si el material clave nunca se reutiliza, es teóricamente seguro.
Las desventajas son que necesitaría una clave por par de directores de comunicación y necesitaría una forma segura de intercambiar el material clave antes de comunicarse.
fuente
Como indica la respuesta de Vatine , su algoritmo es básicamente una plataforma de una sola vez.
Sin embargo, para comentar una de sus notas:
Mi respuesta es no, no es sorprendente. El diablo siempre está en los detalles, y el diablo aquí está en el intercambio de llaves. Su método depende de un intercambio de claves cara a cara impecable. No puedo permitirme enviar a James Bond con un disco flash de 4GB para mí a todos los comerciantes en Internet cada vez que quiera comprar algo o tener otras conexiones seguras.
Y, por último, el aspecto XOR de su algoritmo no es importante. Un cifrado de sustitución simple está bien con un OTP. La fortaleza de la OTP es que la clave nunca se reutiliza, y supone que James Bond está intercambiando las claves sin problemas para ambas partes (es decir, el intercambio de claves seguro previo)
fuente
Si bien la plataforma única tiene una garantía de privacidad incondicional (probada matemáticamente) contra un atacante que solo puede leer mensajes, tiene algunas debilidades.
Un atacante interceptor que adivine correctamente el texto sin formato puede manipular el texto cifrado a lo que quiera (con la misma longitud).
Si un atacante inserta o elimina algún mensaje (o parte del mismo), los punteros de Alice y Bob se desincronizan y cada comunicación futura se interrumpe.
Actualización: Esto supone que ambas partes realizan un seguimiento de ambos punteros. Si envía el valor actual del puntero, es vulnerable a los ataques de dos tiempos (si permite que se use el mismo rango de clave más de una vez) o ataques de DOS (si no permite el mismo rango de clave para usarse más de una vez, por ejemplo, eliminándolos).
Ambos problemas son causados por la falta de integridad y protección de autenticación: tiene un cifrado perfecto, pero no MAC.
Agregue un MAC a su protocolo de plataforma única para que sea realmente seguro. Cada mensaje debe obtener una "suma de verificación" que garantice que realmente fue enviado por el supuesto remitente y que no fue modificado en el medio. Además, debe enviar algún número de secuencia para que el receptor sepa qué parte de la clave usar cuando se pierde un mensaje anterior (o rechazar el mensaje si está duplicado). Incluya esto en el cálculo de la suma de verificación.
Aquí funcionaría un algoritmo MAC habitual, pero supongo que es posible que desee utilizar un MAC polinomial único para tener una seguridad coincidente con su plataforma única. (Tome la clave MAC de los bits antes o después de su clave de cifrado, es decir, no reutilice una clave para ambos objetivos).
fuente
En realidad no es del todo seguro. Lo que pierde su protocolo es la LONGITUD del mensaje comunicado.
Por ejemplo, si el espía sabe que responderá con "sí" o "no" y ve la longitud = 2, puede deducir que es "no".
En realidad, es sorprendente cuánto se puede deducir solo de longitudes conocidas si se puede adivinar el contexto.
fuente