Il protocollo di scambio di chiavi Diffie-Hellman (DH), pubblicato da Whitfield Diffie e Martin Hellman nel 1976, è stato il primo sistema crittografico pratico a risolvere il problema della distribuzione delle chiavi: come concordare un segreto condiviso attraverso un canale completamente pubblico e non sicuro, senza essersi incontrati in precedenza. Fu una rivoluzione concettuale che ha posto le basi dell’intera crittografia a chiave pubblica moderna.
Principio matematico
La sicurezza di DH si fonda sul problema del logaritmo discreto: dato un gruppo ciclico di ordine q, un generatore g e il valore g^a \bmod p, trovare a è computazionalmente difficile per valori sufficientemente grandi di p.
Il protocollo in forma classica (DH su \mathbb{Z}_p^*):
- Alice e Bob concordano pubblicamente un primo p e un generatore g (parametri pubblici).
- Alice sceglie un segreto a, calcola A = g^a \bmod p e lo invia a Bob.
- Bob sceglie un segreto b, calcola B = g^b \bmod p e lo invia ad Alice.
- Alice calcola K = B^a \bmod p = g^{ab} \bmod p.
- Bob calcola K = A^b \bmod p = g^{ab} \bmod p.
Entrambi ottengono lo stesso segreto K = g^{ab} \bmod p. Un osservatore che conosce A = g^a e B = g^b non riesce a calcolare g^{ab} senza risolvere il logaritmo discreto.
Vulnerabilità al man-in-the-middle
DH nella sua forma base non autentica i partecipanti: un attaccante MitM può intercettare lo scambio, stabilire due sessioni DH separate (una con Alice, una con Bob), e decifrare tutto il traffico di entrambi. Per questo DH viene sempre abbinato a un meccanismo di autenticazione — tipicamente certificati X.509 in TLS.
DHE e ECDHE: forward secrecy
La variante DHE (Diffie-Hellman Ephemeral) genera nuove chiavi DH per ogni sessione. Questo garantisce la forward secrecy (perfect forward secrecy, PFS): anche se la chiave privata a lungo termine del server viene compromessa in futuro, le sessioni passate non sono decifrabili perché le chiavi effimere usate per quelle sessioni non esistono più.
ECDHE (Elliptic Curve Diffie-Hellman Ephemeral) sostituisce il gruppo moltiplicativo \mathbb{Z}_p^* con un gruppo di punti su una curva ellittica, ottenendo la stessa forward secrecy con chiavi molto più corte. TLS 1.3 richiede obbligatoriamente ECDHE (o DHE) — le suite senza forward secrecy sono state eliminate dallo standard.
Parametri e sicurezza
Per DH classico su \mathbb{Z}_p^*, i parametri devono essere scelti con cura:
- Il primo p deve essere sufficientemente grande: 2048 bit è il minimo attuale (NIST), 3072 bit per sicurezza a lungo termine.
- Usare safe primes (p = 2q + 1 con q primo) e lavorare nel sottogruppo di ordine q per evitare attacchi su piccoli sottogruppi.
- Logjam attack (2015): ha dimostrato che molti server usavano gli stessi parametri DH a 512 bit o 1024 bit, vulnerabili a precomputazione. ECDHE su curve standardizzate (P-256, X25519) è immune a questa classe di attacchi.
Diffie-Hellman e crittografia post-quantistica
L’algoritmo di Shor risolverebbe il problema del logaritmo discreto (su cui si basa DH classico) così come il problema della fattorizzazione (su cui si basa RSA). La crittografia post-quantistica sviluppa protocolli di scambio di chiavi su problemi matematici diversi, resistenti anche agli algoritmi quantistici.