El intercambio de claves Diffie-Hellman es un protocolo criptográfico que permite que dos partes establezcan un secreto compartido en un canal público inseguro — sin jamás transmitir el secreto en sí.
TL;DR Diffie-Hellman (DH) resuelve un problema fundamental: ¿cómo pueden dos personas acordar una clave secreta cuando todo lo que envían puede ser leído por cualquiera? DH usa propiedades matemáticas de la aritmética modular para que dos partes puedan contribuir con valores públicos, realizar cálculos locales y llegar al mismo secreto compartido — mientras que un observador que ve todos los valores intercambiados todavía no puede calcular el secreto. DH es el mecanismo detrás del Secreto Perfecto Hacia Adelante en TLS. TLS 1.3 exige ECDHE (Elliptic Curve Diffie-Hellman Ephemeral) para todas las conexiones, reemplazando completamente el intercambio de claves RSA.
¿Qué problema resuelve Diffie-Hellman?
Antes de Diffie-Hellman (publicado por Whitfield Diffie y Martin Hellman en 1976), la comunicación segura requería que ambas partes ya compartieran una clave secreta — lo que significaba que la clave tenía que intercambiarse a través de un canal seguro separado primero. Este era el problema de distribución de claves: necesitas seguridad para intercambiar la clave, pero necesitas la clave para tener seguridad.
Diffie-Hellman fue la primera solución práctica. Permite que dos partes que nunca se han comunicado antes establezcan un secreto compartido a través de un canal público inseguro — sin ningún secreto compartido previo y sin que el secreto jamás sea transmitido.
Cómo funciona Diffie-Hellman
La analogía de la mezcla de colores
La explicación estándar usa la mezcla de pinturas, porque mezclar colores de pintura es fácil en una dirección pero imposible de revertir:
- Alice y Bob acuerdan públicamente un color común (digamos, amarillo). Cualquiera puede saber esto.
- Alice elige un color secreto (rojo) y lo mezcla con amarillo → obtiene naranja. Envía naranja a Bob.
- Bob elige un color secreto (azul) y lo mezcla con amarillo → obtiene verde. Envía verde a Alice.
- Alice toma el verde de Bob y mezcla su rojo secreto → obtiene una mezcla marrón.
- Bob toma el naranja de Alice y mezcla su azul secreto → obtiene la misma mezcla marrón.
Ambos llegan al mismo marrón. Un espía solo ve amarillo, naranja y verde — no puede determinar el marrón final sin conocer ninguno de los colores secretos, y revertir la mezcla de pinturas es computacionalmente inviable.
La realidad matemática
DH usa exponenciación modular en lugar de colores de pintura. Las propiedades son:
- Fácil de calcular:
g^a mod p(una dirección) - Computacionalmente inviable de revertir: encontrar
adadog^a mod pes el problema del logaritmo discreto
Protocolo:
- Alice y Bob acuerdan públicamente el primo
py el generadorg. - Alice elige el valor privado
a, calculaA = g^a mod p, envíaAa Bob. - Bob elige el valor privado
b, calculaB = g^b mod p, envíaBa Alice. - Alice calcula:
s = B^a mod p = (g^b)^a mod p = g^(ab) mod p - Bob calcula:
s = A^b mod p = (g^a)^b mod p = g^(ab) mod p
Ambos llegan a g^(ab) mod p — el secreto compartido. Un espía ve p, g, A y B, pero calcular g^(ab) a partir de estos requiere resolver el problema del logaritmo discreto, que es computacionalmente inviable para valores suficientemente grandes.
DHE vs ECDHE
| DHE (Diffie-Hellman Efímero) | ECDHE (Curva Elíptica DH Efímero) | |
|---|---|---|
| Matemática | Exponenciación modular | Multiplicación de puntos en curva elíptica |
| Tamaño de clave para seguridad equivalente | 2048–4096 bits | 256–384 bits |
| Rendimiento | Más lento | Significativamente más rápido |
| Soporte en TLS 1.3 | Sí | Sí (preferido) |
| Usado en la práctica | Menos común ahora | Estándar en TLS 1.3 |
ECDHE logra el mismo nivel de seguridad que DHE con tamaños de clave mucho más pequeños porque el problema del logaritmo discreto en curvas elípticas es más difícil de resolver que en enteros. Una clave ECDHE de 256 bits proporciona aproximadamente la misma seguridad que una clave DHE de 3072 bits — con mucho menos cálculo.
Diffie-Hellman y el Secreto Perfecto Hacia Adelante
El Secreto Perfecto Hacia Adelante (PFS) significa que si la clave privada a largo plazo de un servidor se ve comprometida en el futuro, las sesiones grabadas anteriormente no pueden descifrarse.
Sin PFS (intercambio de claves RSA en TLS antiguo): la clave privada del servidor cifra (o ayuda a derivar) la clave de sesión para cada sesión. Un atacante que graba tráfico cifrado hoy y obtiene la clave privada del servidor años después puede descifrar todas esas sesiones históricas.
Con DH Efímero (DHE o ECDHE): se genera un nuevo par de claves temporal para cada sesión TLS. La clave de sesión se deriva de este par efímero. Después de que termina la sesión, la clave privada efímera se elimina. Incluso si la clave privada del certificado a largo plazo del servidor se compromete posteriormente, las claves de sesión anteriores no pueden reconstruirse — nunca se derivaron de la clave a largo plazo.
TLS 1.3 exige el intercambio de claves efímero (ECDHE) para todas las conexiones y elimina completamente el intercambio de claves RSA estático. Esto significa que TLS 1.3 proporciona Secreto Perfecto Hacia Adelante por diseño.
Diffie-Hellman en el handshake TLS
En TLS 1.3, el intercambio DH ocurre en el primer viaje de ida y vuelta:
- ClientHello — El cliente envía su compartición de clave pública ECDHE (extensión key_share).
- ServerHello — El servidor selecciona la curva, genera su propio par de claves ECDHE, envía su compartición de clave pública.
- Ambos lados calculan el secreto compartido de forma independiente usando DH.
- El secreto compartido se usa para derivar las claves de cifrado para la sesión.
No se necesita ningún mensaje explícito de “intercambio de claves” — las comparticiones de clave pública en ClientHello y ServerHello son suficientes. Esta es una de las razones por las que TLS 1.3 logra 1-RTT (un viaje de ida y vuelta).
Limitaciones y ataques
| Problema | Descripción | Mitigación |
|---|---|---|
| Ataque Logjam | El atacante degrada DH a parámetros de exportación de 512 bits que pueden romperse | Usa grupos DH ≥ 2048 bits; prefiere ECDHE |
| Ataques de subgrupo pequeño | El atacante envía valores DH especialmente construidos | Valida los parámetros DH; usa primos seguros |
| Sin autenticación | DH solo no verifica con quién estás hablando — MITM es posible | Combina DH con autenticación de certificado (como en TLS) |
| Amenaza de computación cuántica | Computadoras cuánticas grandes podrían resolver el problema del logaritmo discreto | Algoritmos poscuánticos (ej.: Kyber/ML-KEM) se están estandarizando para reemplazar DH |
Preguntas frecuentes
¿Qué es el intercambio de claves Diffie-Hellman en términos simples? Diffie-Hellman permite que dos personas acuerden un secreto mientras se comunican en público. Usando matemáticas que son fáciles de calcular en una dirección pero imposibles de revertir, ambas partes intercambian valores públicos y cada una calcula de forma independiente el mismo secreto compartido — sin jamás enviar el secreto en sí.
¿Se usa Diffie-Hellman en TLS? Sí. ECDHE (Elliptic Curve Diffie-Hellman Ephemeral) es obligatorio en TLS 1.3. Reemplazó el intercambio de claves RSA, que no proporcionaba Secreto Perfecto Hacia Adelante. Cada conexión TLS 1.3 usa ECDHE para derivar las claves de cifrado de sesión.
¿Qué es el Secreto Perfecto Hacia Adelante y cómo lo habilita DH? El Secreto Perfecto Hacia Adelante (PFS) significa que las sesiones anteriores no pueden descifrarse incluso si la clave a largo plazo del servidor se compromete posteriormente. DH habilita PFS a través de claves efímeras — se genera un nuevo par de claves DH temporal para cada sesión y se elimina después. Las sesiones anteriores usaron claves diferentes que ya no existen en ningún lugar.
¿Cuál es la diferencia entre DH y RSA? DH es un protocolo de intercambio de claves — establece un secreto compartido entre dos partes. RSA es un algoritmo de clave pública que puede usarse para cifrado, firmas digitales e intercambio de claves. En TLS antiguo, RSA se usaba para cifrar la clave de sesión; no proporcionaba PFS. TLS 1.3 eliminó el intercambio de claves RSA y usa DH (ECDHE) exclusivamente.
¿Qué es ECDHE? ECDHE (Elliptic Curve Diffie-Hellman Ephemeral) es la variante de curva elíptica de DH. Proporciona la misma seguridad matemática con tamaños de clave mucho más pequeños — 256 bits en ECDHE proporciona aproximadamente la misma seguridad que 3072 bits en DH clásico. “Efímero” significa que se genera un nuevo par de claves por sesión, habilitando el Secreto Perfecto Hacia Adelante.
¿Pueden las computadoras cuánticas romper Diffie-Hellman? Una computadora cuántica suficientemente poderosa podría resolver el problema del logaritmo discreto usando el algoritmo de Shor, rompiendo DH. Por eso se están desarrollando estándares de criptografía poscuántica (PQC). NIST estandarizó ML-KEM (anteriormente Kyber) en 2024 como un mecanismo de encapsulamiento de claves resistente a cuánticos para eventualmente reemplazar DH en protocolos como TLS.
¿Qué es el ataque Logjam? Logjam (2015) fue un ataque que explotó parámetros DH débiles de 512 bits que quedaban de la criptografía de exportación de los años 90. Los atacantes podían interceptar conexiones y degradarlas a estos parámetros débiles, luego romper el intercambio de claves. La solución: siempre usa grupos DH de al menos 2048 bits y prefiere ECDHE.
¿Diffie-Hellman autentica a la otra parte? No. DH establece un secreto compartido pero no verifica la identidad de la otra parte. Un atacante man-in-the-middle podría realizar dos intercambios DH separados — uno con Alice fingiendo ser Bob, uno con Bob fingiendo ser Alice. TLS combina DH con autenticación basada en certificados para evitar esto.