El algoritmo de intercambio de claves Diffie Hellman (DH) es un método para intercambiar claves criptográficas de forma segura a través de un canal de comunicación público. Las claves no se intercambian realmente, sino que se obtienen conjuntamente. Lleva el nombre de sus inventores Whitfield Diffie y Martin Hellman.
Si Alice y Bob desean comunicarse entre sí, primero acuerdan entre ellos un gran número primo p, y un generador (o base) g (donde 0 < g < p).
Alice elige un entero secreto a (su clave privada) y luego calcula g^a mod p (que es su clave pública). Bob elige su clave privada b, y calcula su clave pública de la misma manera.
Bob conoce b y g^a, por lo que puede calcular (g^a)^b mod p = g^ab mod p. Por lo tanto, tanto Alice como Bob conocen un secreto compartido g^ab mod p. Un espía Eve que estaba escuchando la comunicación conoce p, g, la clave pública de Alice (g^a mod p) y la clave pública de Bob (g^b mod p). No puede calcular el secreto compartido a partir de estos valores.
En el modo estático-estático, tanto Alice como Bob conservan sus claves privadas/públicas a lo largo de múltiples comunicaciones. Por lo tanto, el secreto compartido resultante será el mismo cada vez. En el modo efímero-estático una de las partes generará una nueva clave privada/pública cada vez, por lo que se generará un nuevo secreto compartido.
Tanto RSA como Diffie Hellman (DH) son protocolos de cifrado de clave pública utilizados para el intercambio seguro de claves. Son protocolos independientes que no dependen el uno del otro.
El Diffie-Hellman efímero utiliza claves públicas temporales. Cada instancia o ejecución del protocolo utiliza una clave pública diferente. La autenticidad de la clave temporal del servidor se puede verificar comprobando la firma de la clave. Como las claves públicas son temporales, un compromiso de la clave de firma a largo plazo del servidor no pone en peligro la privacidad de las sesiones anteriores. Esto se conoce como Perfect Forward Secrecy (PFS).
Diffie Hellman utiliza un par de claves privadas y públicas para establecer un secreto compartido, normalmente una clave simétrica. DH no es un algoritmo simétrico – es un algoritmo asimétrico utilizado para establecer un secreto compartido para un algoritmo de clave simétrica.
Los protocolos de acuerdo de claves autenticadas intercambian una clave de sesión en un protocolo de intercambio de claves que también autentifica las identidades de las partes involucradas en el intercambio de claves. El intercambio de claves anónimas (o no autenticadas), como Diffie-Hellman, no proporciona autenticación de las partes y, por lo tanto, es vulnerable a los ataques de hombre en el medio.
DH sigue utilizándose hoy en día, pero hay que tomar ciertas precauciones con respecto a sus componentes. También es necesario implementar la autenticación sobre DH para evitar las amenazas del tipo man-in-the-middle.
DH se considera seguro contra las escuchas si el grupo cíclico finito G y el generador g se eligen adecuadamente. En particular, el orden del grupo G debe ser grande, especialmente si el mismo grupo se utiliza para grandes cantidades de tráfico. Con un grupo G suficientemente grande, la resolución del problema Diffie-Hellman para obtener g^ab se considera difícil.
El intercambio Diffie-Hellman por sí mismo no proporciona autenticación de las partes que se comunican y, por tanto, es vulnerable a un ataque de hombre en el medio. Un atacante activo que ejecute el ataque de hombre en el medio puede establecer dos intercambios de claves distintos, uno con Alice y otro con Bob, haciéndose pasar por Alice ante Bob, y viceversa, permitiéndole descifrar, y luego volver a cifrar, los mensajes que pasan entre ellos.
Un gráfico de confidencialidad se utiliza para analizar quién sabe qué en cada paso de un algoritmo de intercambio de claves.