En mi caminata al trabajo de hoy, pensé en el siguiente algoritmo de encriptación y no pude determinar la falla. Utiliza una vez las almohadillas que no necesitan ser compartidas y tiene un sabor de intercambio de clave Diffie-Hellman:
-
Digamos que Alice quiere enviar un mensaje M a Bob para que genere un azar una vez el pad A y envía M '= (M xor A) a Bob.
-
Bob también genera un pad B de una sola vez y envía M '' = (M 'xor B) de vuelta a Alice.
-
Luego, Alice vuelve a usar su teclado de una sola vez y envía M '' '= (M' 'xor A) de vuelta a Bob.
-
Bob simplemente recupera el mensaje original que es (M '' ' xor B).
El código enviado en el paso 1 es (M xor A). El envío cifrado en el paso 2 es (M xor A xor B). El remitente cifrado en el paso 3 es (M xor A xor B xor A) = (M xor B). Bob puede descifrar el mensaje final M = (M xor B xor B). Todos los intrusos solo ven mensajes cifrados con una combinación segura de las claves A y B. Aunque Bob puede determinar el único teclado A de Alice en el paso 3, nunca hubo necesidad de compartir claves. p>
Aquí hay un ejemplo simple de 32 bits (^ = xor):
M = 1234ABCD secret message
A = 4A3109AD Alice's key
B = F499803C Bob'e key
M = 1234ABCD
M^A = 5805A260
M^A^B = AC9C225C
M^A^B^A = E6AD2BF1
M^A^B^A^B = 1234ABCD
¿Por qué esto no es perfectamente seguro? (P.S., estoy ignorando los problemas de confianza y los asuntos de intermediarios, que pueden estar donde está el problema).