El protocolo criptográfico Diffie-Hellman, debido a Whitfield Diffie y Martin Hellman

(autores también del problema de Diffie-Hellman o DHP), es un protocolo de

establecimiento de claves entre partes que no han tenido contacto previo,

utilizando un canal inseguro, y de manera anónima (no autentificada).

Whitfield Diffie y Martin Hellman, Introdujo un método radicalmente nuevo para

distribuir las claves criptográficas, dando un gran paso adelante para resolver uno

de los problemas fundamentales de la criptografía, la distribución de claves, y ha

terminado llamándose intercambio de claves

En contraste, el cifrado de clave asimétrica utiliza un par de claves relacionadas

matemáticamente, en el que una de ellas descifra el cifrado que se realiza con la

otra. Algunos de estos algoritmos poseen la propiedad adicional de que una de las

claves del par no se puede deducir de la otra por ningún método conocido que no

sea el ensayo y error. Con un algoritmo de este tipo, cada usuario sólo necesita un

par de claves.

En un criptosistema asimétrico (o criptosistema de clave pública), las claves se

dan en pares:

 Una clave pública para el cifrado;

 Una clave secreta para el descifrado.

En un sistema de cifrado con clave pública, los usuarios eligen una clave aleatoria

que sólo ellos conocen (ésta es la clave privada). A partir de esta clave,

automáticamente se deduce un algoritmo (la clave pública). Los usuarios

intercambian esta clave pública mediante un canal no seguro.

Cuando un usuario desea enviar un mensaje a otro usuario, sólo debe cifrar el

mensaje que desea enviar utilizando la clave pública del receptor (que puede

encontrar, por ejemplo, en un servidor de claves como un directorio LDAP). El

receptor podrá descifrar el mensaje con su clave privada (que sólo él conoce).

Este sistema se basa en una función que es fácil de calcular en una dirección

(llamada función trapdoor de único sentido) y que, matemáticamente, resulta muy

difícil de invertir sin la clave privada (llamada trapdoor).300px-public_key_shared_secret