El algoritmo Diffie-Hellman permite que dos partes que se comunican mediante un canal no cifrado se pongan de acuerdo en un valor numérico sin que un tercero, que tiene acceso completo a la conversación, pueda conocerlo o calcularlo en un tiempo práctico.
A los interlocutores de esta supuesta conversación los llamaremos Alice y Bob siguiendo una convención usada en criptografía. Por la misma razón, al tercer personaje que observa la conversación en la sombra e intenta conocer el secreto le llamaremos Eve.
Alice elige dos números de forma aleatoria a los que llamaremos q
y xa
. Bob elige otros dos, que serán n
y xb
. Mediante su canal de comunicaciones no cifrado (que puede ser correo electrónico, postales navideñas o voceando por el pasillo), ambos hacen saber q
y n
a las partes respectivas.
Alice entonces calcula un nuevo número que llamaremos ya
mediante la fórmula (el símbolo ↑ significa potencia):
ya = n↑xa mod q
Es decir, calcula n
elevado a xa
y se queda con el resto de la división entre q
.
De igual forma, Bob calcula su nuevo número yb
:
yb = n↑xb mod q
Y de nuevo a voz en grito Alice y Bob hacen públicos ya
e yb
.
Ahora Alice calcula un último valor, ka
, mediante
ka = yb↑xa mod q
y Bob su correspondiente kb
con
kb = ya↑xb mod q
Los números ka
y kb
son el mismo; los interlocutores tienen ya un secreto compartido que Eve no conoce pese a haber tenido acceso a todo el intercambio de información. Alice y Bob pueden ahora usar ese secreto compartido como clave para cifrar un mensaje de manera convencional.
Para dificultar que Eve pueda conseguir algo por el método de la fuerza bruta, los números elegidos tienen que ser primos y grandes.
Más información (en inglés):
https://en.wikipedia.org/wiki/Diffie-Hellman