RU EN ES 中文

Diffie–Hellman: cómo acordar un secreto en público

Dos desconocidos acuerdan una clave secreta mientras cualquiera oye cada palabra. ¿Cómo es posible y dónde está la trampa?

¿Se puede acordar un secreto en voz alta?

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.

Idea clave: En 1976 resultó que la intuición se equivoca. Un secreto no tiene por qué enviarse: Alicia y Bob pueden calcularlo cada uno por su cuenta. Cada uno aporta al cálculo algo que nunca dice en voz alta, y al final ambos obtienen la misma contraseña, una que nunca pasó por el canal.

Fácil de mezclar, imposible de separar

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.

La idea con pinturas
Fácil de mezclarLa pintura común y una secreta dan una mezcla en un segundo. Se puede enviar a la vista.
+=
Imposible de separarEva ve la mezcla, pero no puede sacar de ella la pintura secreta.
→+?
El orden no importaAlicia añade su pintura a la mezcla de Bob, y Bob la suya a la de Alicia. Sale el mismo color.
+=+=

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.

1

Los números públicos p y g

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.

2

Los números secretos a y b

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.

3

Los números públicos A y B

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.

4

La clave común

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.

5

Por qué coinciden

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.

¿Y qué puede hacer Eva? Eva tiene p, g, A y B. Su primera idea es multiplicar A por B, pero eso da ga+b, mientras que la clave es ga·b. Es como juntar las dos mezclas: hay el doble de pintura común. Solo le queda hallar a a partir de A, probando g1, g2, g3… hasta que coincida. Es el problema del logaritmo discreto. En nuestro ejemplo con p = 23 bastan como mucho 22 intentos; con una p de 2048 bits la búsqueda no terminaría nunca.
La trampa: Eva en medio El protocolo protege de quien escucha, no de quien suplanta. Supongamos que Eva intercepta A y le envía a Bob en su lugar su propio número E = ge, y hace lo mismo con Alicia en lugar de B. Alicia cree haber acordado una clave con Bob, Bob cree tener una con Alicia, pero en realidad cada uno comparte una clave con Eva. Eva descifra cada carta, la lee, la vuelve a cifrar con la segunda clave y la reenvía. El protocolo funciona sin un solo error: los números no dicen nada de quién los envió. Es el llamado ataque de intermediario (en inglés, man-in-the-middle, MITM).

Quién lo inventó y por qué entonces

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:

HTTPS

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).

Mensajería

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.

SSH, WireGuard, VPN

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.

En qué se diferencia de RSA

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.

PreguntaDiffie–HellmanRSA
Qué haceDos personas obtienen una clave secreta comúnCierra una carta para un solo destinatario; las firmas funcionan igual
Quién tiene que participarLos dos a la vez: cada uno aporta su número secretoSolo el remitente: todos tienen ya el candado de Bob, y Bob puede estar desconectado
Qué viaja por el canalLos números públicos A y B; la clave nuncaLa carta cerrada c
Cuánto duran las clavesNúmeros secretos nuevos en cada conversaciónUn candado para años
En qué se apoyaEs difícil hallar el número secreto a partir del público (logaritmo discreto)Es difícil descomponer n en dos primos
AnalogíaPinturas que mezclan dos personasUn candado abierto
En pocas palabras: Diffie–Hellman acuerda, RSA cierra. En HTTPS trabajan juntos: el intercambio Diffie–Hellman produce la clave de la conversación, y la firma del sitio, a menudo RSA, demuestra que al otro lado está de verdad el sitio y no Eva en medio. Más en el artículo sobre RSA.
RU

La variante rusa: VKO

ГОСТ Р 34.10-2012 · Р 50.1.113-2016

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.

¿Por qué una variante propia? Por la misma razón que Kuznyechik: las matemáticas son de todos, pero un Estado quiere elegir y controlar por sí mismo las curvas, los parámetros y las reglas de verificación. Más sobre la soberanía criptográfica en el artículo sobre AES.

Compruébalo tú mismo

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:

Qué observar: Eva ve cada número que pasa por el canal y aun así no obtiene la clave mientras p sea grande. Solo gana en dos casos: cuando p es pequeña y cuando se le permite no solo escuchar, sino intervenir.
Una conclusión inesperada: El protocolo te salva de quien escucha y no puede nada contra quien interviene. Para distinguir el número de Alicia de una falsificación hace falta una firma digital, y para confiar en la firma vuelve a hacer falta alguien en quien todos confíen: una autoridad de certificación. Así que del intermediario de confianza no hubo forma de librarse. Pero su papel cambió: antes repartía las claves y conocía todos los secretos, y ahora solo confirma de quién es cada número público, sin conocer ni una sola clave común. La firma tendrá su propio juego.
Para los curiosos

DH clásico, ECDH y VKO, uno al lado del otro

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ámetroDH clásicoECDH (X25519)VKO (GOST)
Dónde se calculaRestos módulo un primo pPuntos de la curva Curve25519Puntos de las curvas GOST R 34.10-2012
Tamaño de los números2048–4096 bits255 bits256 o 512 bits
Seguridad aproximada≈ 112 bits con 2048≈ 128 bits≈ 128 o ≈ 256 bits
Qué se hace con el secreto comúnUna 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ño19762006 (D. Bernstein)2016
NormaRFC 3526, RFC 7919RFC 7748R 50.1.113-2016 (RFC 7836)
Quién la emiteIETFIETFTC 26, Rosstandart

Por qué p tiene que ser enorme

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.

Logjam: cuando todos comparten la misma p

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.

La amenaza cuántica

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.

Por qué g debe ser una raíz primitiva

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