Il protocollo Diffie-Hellman (dal nome degli autori) è utilizzato per lo scambio di chiavi
simmetriche attraverso un canale insicuro. Si basa sulle seguenti considerazioni: siano p un
numero primo e g un numero intero (generatore) tale che g < p e
n
[1,p - 1]
z
: n = gz modp. Tali valori sono conosciuti da chiunque (pubblici). Sia
V = {1,...,p - 2}
.
Si supponga che due persone A e B vogliano scambiarsi un messaggio in maniera sicura su
un canale inscuro. Secondo il protocollo Diffie-Hellman, A sceglie un numero as
V (valore
privato) con il quale genera un valore pubblico
In maniera analoga, B sceglie un numero bs
V (valore privato) con il quale genera un valore
pubblico
Quindi A e B si scambiano i relativi valori pubblici ap e bp. In questo modo A può calcolare
e B può calcolare
ovvero entrambi sono in grado di ricavare la chiave comune k.
La sicurezza dipende dal fatto che è computazionalmente complesso calcolare k = gasbs modp dati i valori pubblici ap = gas modp e bp = gbs modp, se p è un numero primo sufficientemente grande (Maurer ha dimostrato che rompere la cifratura Diffie-Hellman equivale al calcolo dei logaritmi discreti6).
Il protocollo di scambio di chiavi Diffie-Hellman è vulnerabile ad attacchi di tipo man-in-the-middle. Infatti, si supponga che C intercetti il valore pubblico di A, ap ed invii a B il suo valore pubblico cp in modo che B creda che sia ap. Allo stesso modo, se C intercetta il valore pubblico di B, bp, inoltra ad A il suo valore pubblico cp in modo che A creda che sia bp. In questo modo A e C si scambiano una chiave e C e B se ne scambiano un’altra e C può decifrare i messaggi che A crede di inviare a B (e magare inoltrarli a B cifrati con la chiave scambiata con B) ed i messaggi che B crede di inviare ad A (e magare inoltrarli ad A cifrati con la chiave scambiata con A). Il protocollo Diffie-Hellman di base non fornisce nessun meccanismo di autenticazione dei partecipanti.
Esiste anche una versione modificata del protocollo, detta authenticated Diffie-Hellman key agreement protocol o protocollo STS (Station-to-Station), sviluppato da W. Diffie, P. Van Oorschot e M. Wiener nel 1992 ed utilizza la firma digitale ed i certificati digitali. Prima di eseguire lo scambio di chiavi con il protocollo precedentemente descritto, A e B sono ognuno in possesso di una coppia di chiavi (pubbica/privata) ed un certificato digitale relativo alla chiave pubbilca. Durante lo scambio, A esegue una firma dei messaggi inviati che contengono la sua chiave pubblica ap e lo stesso fa B. In questo modo anche se C riceve i messaggi di A e B non è in grado di firmarli a nome degli altri, quindi se li modifica, A e B si accorgono che i messaggi che ricevono non corrispondono a quelli inviati dal mittente.
[da completare ...]