L’algoritmo di scambio di chiavi Diffie Hellman (DH) è un metodo per scambiare in modo sicuro chiavi crittografiche su un canale di comunicazione pubblico. Le chiavi non sono effettivamente scambiate – sono derivate congiuntamente. Prende il nome dai loro inventori Whitfield Diffie e Martin Hellman.
Se Alice e Bob desiderano comunicare tra loro, prima si accordano su un grande numero primo p e un generatore (o base) g (dove 0 < g < p).
Alice sceglie un intero segreto a (la sua chiave privata) e poi calcola g^a mod p (che è la sua chiave pubblica). Bob sceglie la sua chiave privata b, e calcola la sua chiave pubblica nello stesso modo.
Bob conosce b e g^a, quindi può calcolare (g^a)^b mod p = g^ab mod p. Quindi sia Alice che Bob conoscono un segreto condiviso g^ab mod p. Un’intercettatrice Eve che stava ascoltando la comunicazione conosce p, g, la chiave pubblica di Alice (g^a mod p) e quella di Bob (g^b mod p). Non è in grado di calcolare il segreto condiviso da questi valori.
In modalità statico-statica, sia Alice che Bob mantengono le loro chiavi private/pubbliche su più comunicazioni. Pertanto il segreto condiviso risultante sarà lo stesso ogni volta. In modalità statica effimera una parte genererà una nuova chiave privata/pubblica ogni volta, quindi verrà generato un nuovo segreto condiviso.
Sia RSA che Diffie Hellman (DH) sono protocolli di crittografia a chiave pubblica usati per lo scambio sicuro di chiavi. Sono protocolli indipendenti che non si basano l’uno sull’altro.
Ephemeral Diffie-Hellman usa chiavi pubbliche temporanee. Ogni istanza o esecuzione del protocollo usa una chiave pubblica diversa. L’autenticità della chiave temporanea del server può essere verificata controllando la firma sulla chiave. Poiché le chiavi pubbliche sono temporanee, una compromissione della chiave di firma a lungo termine del server non compromette la privacy delle sessioni passate. Questo è noto come Perfect Forward Secrecy (PFS).
Diffie Hellman usa una coppia di chiavi private e pubbliche per stabilire un segreto condiviso, tipicamente una chiave simmetrica. DH non è un algoritmo simmetrico – è un algoritmo asimmetrico usato per stabilire un segreto condiviso per un algoritmo a chiave simmetrica.
I protocolli di accordo chiave autenticati scambiano una chiave di sessione in un protocollo di scambio di chiavi che autentica anche le identità delle parti coinvolte nello scambio di chiavi. Lo scambio di chiavi anonimo (o non autenticato), come Diffie-Hellman, non fornisce l’autenticazione delle parti, ed è quindi vulnerabile agli attacchi man-in-the-middle.
DH è ancora in uso oggi, ma alcune precauzioni devono essere prese rispetto ai suoi elementi costitutivi. Anche l’autenticazione deve essere implementata sopra DH per prevenire minacce man-in-the-middle.
DH è considerato sicuro contro gli intercettatori se il gruppo ciclico finito G e il generatore g sono scelti correttamente. In particolare, l’ordine del gruppo G deve essere grande, soprattutto se lo stesso gruppo è usato per grandi quantità di traffico. Con un gruppo G abbastanza grande, risolvere il problema Diffie-Hellman per ottenere g^ab è considerato difficile.
Lo scambio Diffie-Hellman da solo non fornisce l’autenticazione delle parti comunicanti ed è quindi vulnerabile ad un attacco man-in-the-middle. Un attaccante attivo che esegue l’attacco man-in-the-middle può stabilire due distinti scambi di chiavi, uno con Alice e l’altro con Bob, mascherandosi effettivamente come Alice per Bob, e viceversa, permettendogli di decifrare, e poi ricifrare, i messaggi passati tra loro.
Un grafico di segretezza è usato per analizzare chi sa cosa ad ogni passo di un algoritmo di scambio di chiavi.