La seguridad de este esquema depende en gran medida de cuán buena sea su generación de claves. Si un atacante observa dos intercambios de claves, puede calcular el xor de las dos claves no ocultas:
Los valores k a y k b son dos claves no ofuscadas. k A y k B son las claves ofuscadas asociadas. o es la clave de ofuscación estática.
k A = k a ^ o
k B = k b ^ o
k A ^ k B = k a ^ o ^ k b ^ < em> o
Las dos instancias de o se cancelan, dándonos k a ^ k b . Esto funciona con cualquiera de las dos claves de sesión elegidas.
Esto podría permitir que un atacante aproveche las debilidades en su generador de números aleatorios, al eliminar los estados internos que no pueden producir salidas consecutivas que exhiban tal patrón.
Por supuesto, si un atacante descubre el valor no oculto de una clave, por cualquier medio, puede simplemente xor la clave ofuscada con la clave no ofuscada para encontrar o , y por lo tanto romper Todas las comunicaciones futuras.
En realidad, esta es una mala manera de hacerlo, porque es probable que un atacante tenga acceso a su aplicación. Mediante la ingeniería inversa de su binario, el atacante puede descubrir esta clave codificada y romper todas las comunicaciones. Confías en la oscuridad para tu seguridad, que va en contra del Principio de Kerckhoff , es decir, "el enemigo sabe el sistema ".
Hace poco hice algo similar con una aplicación que tomó casi exactamente la misma ruta, y solo me tomó una hora romper completamente su criptografía e ingeniería inversa en su formato de paquete interno. Desde allí escribí un script de Python que descifra automáticamente la sesión completa de un archivo de captura de paquetes pcap.
Si está buscando la seguridad adecuada de las comunicaciones de extremo a extremo, elija algo como SSL. La mayoría de los idiomas tienen bibliotecas para implementarlo, por lo que no debería ser demasiado difícil.
Si no tiene SSL, tendrá que manejar lo siguiente:
- Generación de claves de fuerza criptográfica.
- Intercambio de claves (por ejemplo, Diffie-Hellman o clave pública RSA codificada)
- Cifrado y descifrado 3DES con un modo de operación apropiado e intercambio IV.
- Autenticación y verificación de integridad, por ejemplo, a través de HMAC.
- Defensa contra ataques de tiempo y otros ataques de canal lateral.
- Manejo adecuado de errores.