A veces pasa que vuelves a leer algo después de un tiempo y te sorprende como la primera vez. Me ha pasado con la explicación del algoritmo de Diffie-Hellman, utilizado aún hoy (es de 1976) como punto de partida de muchos protocolos de seguridad.
Esto lo escribí hace unos años, para una memoria.
El algoritmo de Diffie-Hellman (en honor a sus creadores, Whitfield Diffie y Martin Hellman) permite acordar una clave secreta entre dos máquinas, a través de un canal inseguro y enviando únicamente dos mensajes. La clave secreta resultante no puede ser descubierta por un atacante, aunque éste obtenga los dos mensajes enviados por el protocolo. La principal aplicación de este protocolo es acordar una clave simétrica con la que posteriormente cifrar las comunicaciones entre dos máquinas.
El protocolo de Diffie-Hellman fue publicado en 1976. Actualmente se conoce que es vulnerable a ataques de hombre en medio (MitM): un atacante podría situarse entre ambas máquinas y acordar una clave simétrica con cada una de las partes, haciéndose pasar por el host A de cara al host B y viceversa. Una vez establecidas las 2 claves simétricas, el atacante haría de puente entre los 2 hosts, descifrando toda la comunicación y volviéndola a cifrar para enviársela al otro host.
Para corregir la vulnerabilidad del protocolo, éste debe ser utilizado conjuntamente con algún sistema que autentique los mensajes. Esto ocurre, por ejemplo, durante el establecimiento de la asociación HIP, donde los paquetes R1 e I2, además de contener los mensajes de Diffie-Hellman, están firmados digitalmente.
En la figura siguiente se muestra un ejemplo de funcionamiento del protocolo Diffie-Hellman.
Los valores de “p” y “g” son públicos y cualquier atacante puede conocerlos, pero esto no supone una vulnerabilidad. Aunque un atacante conociese dichos valores y capturara los dos mensajes enviados entre las máquinas A y B, no sería capaz de averiguar la clave secreta. A continuación se muestra la información capturada por un atacante en el escenario de la Figura 46:
(ga mod p) = 8 → (5a mod 23) = 8
(gb mod p) = 19 → (5b mod 23) = 19A partir de las ecuaciones anteriores, intentar calcular los valores de “a” y “b” es lo que se conoce como el problema del algoritmo discreto, un problema que se cree computacionalmente intratable y cuya notación es la siguiente:
a = log discg (ga mod p) = log disc 5 (8)
b = log discg (gb mod p) = log disc 5 (19)Con los valores del ejemplo sí que es posible encontrar la solución, ya que se ha escogido un número primo “p” muy pequeño (p = 23), y se sabe que “a” y “b” son menores que “p”. Por lo tanto, para obtener los valores secretos en este ejemplo, un atacante tendría que probar sólo 22 posibles valores.
Por suerte, las implementaciones actuales del protocolo Diffie-Hellman utilizan números primos muy grandes, lo que impide a un atacante calcular los valores de “a” y “b”. El valor “g” no necesita ser grande, y en la práctica su valor es 2 ó 5. En el RFC 3526 aparecen publicados los números primos que deben utilizarse. A modo de ejemplo, se facilita aquí el número primo de 1024 bytes propuesto. El valor “g” utilizado es 2:
p = 28192 – 28128 – 1 + 264 x ((28062 pi) + 4743158)
si la explicacion esta muy bien pero si tengo por decir un p=1999 y a=34, 35, 36 ò 37 como averiguo g? o que debo hacer eso no lo entiendo
esta muy buena esta explicación. Gracias por ayudarme a resolver mis dudas.
BUENAS TARDES ME DEJARON ESTA INVESTIGACION: PORQUE SE DEBE SASTIFACER LA SIGUIENTE CONDICION 2<INFINUTO<P-2 Y QUE PASA BAJO ESTA CONDICION EN EL ALGORITMO DE DIFFIE-HELLMAN, GRACIAS ESPERO CONTAR CON SU APOYO E INFORMACION, UNA DISCULPA POR NO PONER MI NOMBRE
muy interesante!!!
Buena explicación!
[…] http://www.javiercampos.es/blog/2011/07/22/el-algoritmo-de-diffie-hellman/ […]
exelente articulo
Interesante explicación del algoritmo. Quisiera consultar si nos puedes permitir la reproducción de este artículo en nuestra página? Si gustas puedes contactarme por correo. Saludos
Hola tocayo 🙂
Una errata tipográfica: donde dice «problema del algoritmo discreto», debería decir «problema del logaritmo discreto».
Saludos y felicidades por tu blog.
[…] su algoritmo (ojo, hay una errata en esa página; cuando en un párrafo de la parte final habla del “problema del algoritmo discreto”, debería decir el “problema del logaritmo discreto”) […]
Excelente aporte y muy sencillo de explicar.
[…] Y construimos los parámetros de Diffie-Hellman. […]
[…] El protocolo de Diffie-Hellman fue publicado en 1976. Actualmente se conoce que es vulnerable a ataques de hombre en medio (MitM): un atacante podría situarse entre ambas máquinas y acordar una clave simétrica con cada una de las partes, haciéndose pasar por el host A de cara al host B y viceversa. Una vez establecidas las 2 claves simétricas, el atacante haría de puente entre los 2 hosts, descifrando toda la comunicación y volviéndola a cifrar para enviársela al otro host. [Ref: Javier Campos] […]
Muy buena explicación. Gracias y Felicidades
[…] Cuando en 1970 Diffie consigue que le presten una casa en la Costa Oeste y se entrevista con un joven profesor neoyorquino de segunda fila que se había negado a trabajar para la NSA, nace la nueva comunidad criptográfica. De momento son dos personas Wihtfield y Marty. El nombre de un algoritmo: Diffie-Hellman. […]