Dos desconocidos acuerdan una clave secreta mientras cualquiera oye cada palabra. ¿Cómo es posible y dónde está la trampa?
Alicia y Bob nunca se han visto. Solo pueden hablar de una manera en la que Eva oye cada palabra. ¿Pueden ahora mismo, delante de ella, acordar una contraseña que Eva no llegue a conocer?
La intuición responde con un «no» rotundo. Todo lo que sabe Bob le ha llegado por el canal común, así que Eva también lo sabe. ¿De dónde sacaría Bob algo que ella no tenga?
Durante miles de años fue exactamente así. Cualquier cifrado, del de César a DES, exigía entregar la clave de antemano a ambas partes por una vía segura: un mensajero, la valija diplomática, en mano. Incluso la línea directa Moscú–Washington, abierta en 1963, funcionaba con cintas de clave de un solo uso que las dos partes se intercambiaban a través de sus embajadas. Cuanta más gente necesitaba hablar en secreto, más pesada se volvía esa logística.
Primero, qué es exactamente. Diffie–Hellman no es un cifrado, sino un protocolo de acuerdo de claves. No cifra nada: solo da a Alicia y Bob la misma clave secreta. Después, los mensajes se cifran con esa clave mediante un cifrado normal, por ejemplo AES.
Todo el protocolo se apoya en una sola cosa: una operación fácil de hacer y difícil de deshacer. Lo más sencillo es imaginarla primero con pinturas.
Hay una pintura común que conocen todos. Alicia y Bob le añaden cada uno su pintura secreta y se intercambian las mezclas a la vista. Después cada uno añade su pintura secreta a la mezcla del otro. En los dos botes acaba el mismo color, y Eva, que ve las dos mezclas, no puede sacar de ellas las pinturas secretas.
Una simplificación: una mezcla real de pinturas sí puede separarse en un laboratorio. Por eso el protocolo usa números en lugar de pinturas.
En el protocolo real, «mezclar» significa exponenciación modular: elevar un número a una potencia, dividir el resultado entre el módulo p y quedarse solo con el resto. Por ejemplo, 30 mod 23 = 7, porque 30 = 1 · 23 + 7. A continuación, cada paso aparece primero en forma general y luego con un ejemplo pequeño que se calcula de cabeza. El juego usa los mismos números por defecto, y allí se pueden cambiar.
Alicia y Bob acuerdan abiertamente dos números. p es el módulo, un número primo grande: en los sistemas reales mide 2048 bits o más, es decir, tiene al menos 617 cifras decimales. g es la base que se elevará a potencias. Se elige de modo que las potencias de g den el mayor número posible de restos distintos (más detalles en «Para los curiosos»). Los pares de p y g suelen tomarse ya hechos de las normas. Los conocen todos, Eva incluida: no es una filtración, está pensado así.
Ejemplo: p = 23, g = 5.
Cada uno elige un número secreto al azar: Alicia, a; Bob, b. En el protocolo real son números de cientos de bits, y se eligen de nuevo para cada conexión. Los números secretos no se envían a ninguna parte: son las «pinturas secretas».
Ejemplo: a = 2, b = 3.
Alicia calcula A = ga mod p, Bob calcula B = gb mod p. Esto es «mezclar tu pintura con la común». A y B viajan por el canal a la vista, y Eva los ve.
Ejemplo: A = 5² mod 23: 5² = 25 = 1 · 23 + 2, así que A = 2. B = 5³ mod 23: primero la potencia entera, 5³ = 125, y luego la división con resto, 125 = 5 · 23 + 10, así que B = 10.
Alicia eleva la B recibida a su potencia secreta: s = Ba mod p. Bob hace lo mismo con A: s = Ab mod p. Los números coinciden, aunque la clave nunca pasó por el canal. En los sistemas reales s es tan largo como p, y de él se deriva luego la clave para un cifrado simétrico.
Ejemplo: Alicia obtiene 10² = 100 = 4 · 23 + 8, Bob obtiene 2³ = 8 (menor que 23, no hay nada que dividir). Los dos tienen s = 8.
B es gb, así que Alicia obtiene Ba = gb·a, y Bob obtiene Ab = ga·b. El orden de los factores no altera el producto, igual que una mezcla de pinturas no depende del orden en que se mezcla. Y el resto de dividir entre p se puede tomar en cualquier momento sin cambiar el resultado. La fórmula general: s = Ba = Ab = gab mod p.
En noviembre de 1976, Whitfield Diffie y Martin Hellman, de Stanford, publicaron el artículo «New Directions in Cryptography». Empezaba con las palabras «Estamos hoy al borde de una revolución en la criptografía». El momento era el adecuado: los ordenadores empezaban a conectarse en redes, y enviar mensajeros con claves a todo el que quisiera hablar con cualquier otro se había vuelto imposible. En la idea influyó el trabajo de Ralph Merkle, que buscaba por su cuenta una manera de acordar una clave a la vista. Más tarde Hellman propuso llamar al protocolo intercambio Diffie–Hellman–Merkle.
La idea estaba en el aire. En la agencia británica de señales GCHQ, James Ellis describió el «cifrado no secreto» ya en 1970, y en 1974 Malcolm Williamson encontró en esencia el mismo protocolo. Ese trabajo era secreto y no salió a la luz hasta 1997. Por eso el protocolo lleva los nombres de quienes lo publicaron abiertamente, y en 2015 Diffie y Hellman recibieron el Premio Turing por la criptografía de clave pública.
Hoy este intercambio funciona discretamente en casi todas las conexiones seguras:
Cada conexión TLS 1.3 empieza con un intercambio Diffie–Hellman, normalmente sobre la curva elíptica X25519. Los números secretos se eligen de nuevo para cada conexión y se borran después: aunque más tarde se hackee el servidor, las conversaciones antiguas no se pueden descifrar. Esta propiedad se llama secreto perfecto hacia adelante (forward secrecy).
Signal y WhatsApp acuerdan las claves de los chats mediante varios intercambios Diffie–Hellman. El protocolo MTProto de Telegram también se basa en este intercambio.
Los accesos remotos a servidores y los túneles seguros obtienen su clave de sesión del mismo modo. Después esa clave cifra los datos con un cifrado simétrico, por ejemplo AES.
Junto a Diffie–Hellman siempre se menciona RSA. Los dos se inventaron en los años setenta, los dos trabajan con números públicos y secretos y los dos calculan potencias módulo un número, así que es fácil confundirlos. Pero hacen cosas distintas. Diffie–Hellman no cifra nada: sirve para que dos personas obtengan juntas una clave común. RSA es un candado: Bob lo reparte de antemano y cualquiera puede cerrar una carta de modo que solo Bob pueda abrirla.
| Pregunta | Diffie–Hellman | RSA |
|---|---|---|
| Qué hace | Dos personas obtienen una clave secreta común | Cierra una carta para un solo destinatario; las firmas funcionan igual |
| Quién tiene que participar | Los dos a la vez: cada uno aporta su número secreto | Solo el remitente: todos tienen ya el candado de Bob, y Bob puede estar desconectado |
| Qué viaja por el canal | Los números públicos A y B; la clave nunca | La carta cerrada c |
| Cuánto duran las claves | Números secretos nuevos en cada conversación | Un candado para años |
| En qué se apoya | Es difícil hallar el número secreto a partir del público (logaritmo discreto) | Es difícil descomponer n en dos primos |
| Analogía | Pinturas que mezclan dos personas | Un candado abierto |
Las herramientas criptográficas certificadas en Rusia obtienen la clave común con el algoritmo VKO. Está descrito en las recomendaciones de normalización R 50.1.113-2016 y funciona sobre las curvas elípticas de 256 o 512 bits de la norma de firma GOST R 34.10-2012. La idea es la misma que en el juego: cada parte tiene un número secreto y otro público calculado a partir de él; cada una combina su secreto con el número público de la otra, y ambas llegan al mismo resultado.
Se diferencia del esquema de manual en dos cosas. En el cálculo se mezcla un número aleatorio llamado UKM, que se envía a la vista, de modo que las mismas claves de larga duración dan cada vez una clave común nueva. Y el resultado no se usa directamente: pasa por la función hash Streebog (GOST R 34.11-2012). La clave final cifra luego los datos con Kuznyechik o Magma. VKO se usa también en los conjuntos de cifrado rusos para TLS.
En la demostración interactiva de Ludus Lab recorres todo el protocolo a mano con números pequeños. Eva ve lo mismo que tú, así que puedes comprobar dónde le faltan datos y dónde gana. Esto es lo que conviene probar:
Los tres siguen el mismo esquema: un número secreto, un número público, un secreto común. Lo que cambia es el mundo en el que se hacen los cálculos:
| Parámetro | DH clásico | ECDH (X25519) | VKO (GOST) |
|---|---|---|---|
| Dónde se calcula | Restos módulo un primo p | Puntos de la curva Curve25519 | Puntos de las curvas GOST R 34.10-2012 |
| Tamaño de los números | 2048–4096 bits | 255 bits | 256 o 512 bits |
| Seguridad aproximada | ≈ 112 bits con 2048 | ≈ 128 bits | ≈ 128 o ≈ 256 bits |
| Qué se hace con el secreto común | Una función de derivación de claves (HKDF en TLS) | Una función de derivación de claves (HKDF en TLS) | Hash Streebog con el UKM público |
| Año | 1976 | 2006 (D. Bernstein) | 2016 |
| Norma | RFC 3526, RFC 7919 | RFC 7748 | R 50.1.113-2016 (RFC 7836) |
| Quién la emite | IETF | IETF | TC 26, Rosstandart |
Eva es más lista que la simple fuerza bruta. Para el logaritmo discreto módulo p existe un método ingenioso, la criba del cuerpo de números. Por su culpa, una p de 2048 bits da más o menos la seguridad de una clave simétrica de 112 bits, ni de lejos la de 2048. En las curvas elípticas no se conocen trucos así: los mejores métodos cuestan del orden de la raíz cuadrada de una búsqueda completa, de modo que una curva de 256 bits basta para unos 128 bits de seguridad. De ahí el paso a las curvas: claves más cortas y cálculos más rápidos.
En 2015 unos investigadores presentaron el ataque Logjam. Muchos servidores usaban las mismas p estándar de 512 y 1024 bits, y algunos, por antiguas normas de «exportación», aceptaban 512 bits. Para una p fija, la parte más pesada del cálculo puede hacerse una sola vez por adelantado, y después se hallan rápidamente las claves de todas las conexiones con esa p. Para 512 bits esa preparación llevó cerca de una semana; para 1024 bits se estimó al alcance de un Estado. Desde entonces los grupos de 1024 bits se retiraron: hoy p tiene al menos 2048 bits, o se usan curvas.
Un ordenador cuántico con el algoritmo de Shor resolvería rápidamente el logaritmo discreto, tanto módulo p como en curvas elípticas. Esas máquinas aún no existen, pero el tráfico grabado hoy podría descifrarse más adelante. Por eso, desde 2024, los navegadores añaden a X25519 el mecanismo poscuántico ML-KEM (la norma FIPS 203): la clave se forma con dos partes, y para conocerla habría que romper las dos.
Las potencias de g módulo p deben recorrer el mayor número posible de restos distintos. En el ejemplo del artículo (g = 5, p = 23) dan los 22 números del 1 al 22: a una g así se la llama raíz primitiva. Pero si tomamos g = 22, las potencias se alternan: 22, 1, 22, 1… Entonces A solo puede ser uno de dos números, y a Eva le bastan dos intentos. Por eso el juego solo deja elegir pares «buenos» de p y g.
Una simplificación: en los sistemas reales g a menudo no es una raíz primitiva, sino un elemento de un subgrupo enorme de orden primo (por ejemplo, con p = 2q + 1 donde q también es primo). Lo importante no es que las potencias de g lo cubran todo, sino que sean astronómicamente numerosas y que no haya subgrupos pequeños por los que Eva pueda colarse.
Ahora sabes cómo dos personas acuerdan un secreto en público y por qué eso no basta si alguien puede intervenir
En la demostración mezclarás pinturas, contarás potencias en el tablero de luces, jugarás como Eva y verás dónde fracasa su ataque y dónde triunfa