Protocollo di scambio di chiavi Diffie-Hellman vulnerabile all'uomo nell'attacco centrale? Se sì, allora che tipo di MITM è? Credo che sia un attacco di ripetizione o un attacco a staffetta, non sono sicuro però.
È vulnerabile in una versione. Per essere più chiari, le tre versioni base di Diffie-Hellman sono:
DH anonimo, in cui Alice e Bob si scambiano semplicemente valori senza segno;
Fixed DH (a volte semplicemente chiamato DH);
DH temporaneo (vedi sotto).
DH anonimo è facilmente vulnerabile a un attacco MitM, come segue.
Alice genera un valore X, Bob genera Y, Eve genera Z.
Alice invia g ^ X mod p. Eve intercetta il messaggio e lo modifica con g ^ Z (il suo valore casuale) mod p, prima di inviarlo a Bob.
Bob ora pensa che Alice gli abbia inviato g ^ Z mod p, in quanto non esiste alcuna firma né alcun altro meccanismo di autenticazione.
Bob invia g ^ Y mod p. Eve intercetta il messaggio, lo modifica con g ^ Z mod p e lo invia ad Alice.
Alice ora calcola (g ^ Z mod p) ^ X mod p.
Bob ora calcola (g ^ Z mod p) ^ Y mod p.
Eve calcola (g ^ X mod p) ^ Z mod p, che è il suo segreto con Alice, e (g ^ Y mod p) ^ Z mod p, che è il suo segreto con Bob.
Alice crittografa "Ti amo" con (g ^ X mod p) ^ Z mod p.
Quella chiave è stata concordata con Eve, quindi Eve può decifrare il messaggio, cambiarlo in "Ti odio" e ricodificarlo con il suo segreto con Bob. In altre parole, Eve può fungere da proxy avendo concordato una chiave diversa con Alice e Bob.
Questo può essere evitato usando il Fixed DH - dove g ^ X e g ^ Y sono firmati da una CA attendibile - o, meglio ancora, da DH effimera.
In DH effimero (DHE) X, Y vengono cambiati ogni volta, ad ogni sessione. Sono inoltre firmati, al fine di prevenire MitM. Tuttavia, poiché cambiano sempre e la firma cambia con il messaggio firmato, in che modo l'altra parte può verificare l'autenticità della firma?
La soluzione DHE è semplice: usa un certificato. Se Alice può firmare la propria g ^ X con una chiave privata e dimostrare che la chiave pubblica corrispondente è associata a lei, tramite un certificato, Bob può verificare il certificato e, così facendo, verificare l'identità di Alice e quindi l'autenticità della sua g ^ X.
Pertanto, DHE funziona in questo modo.
Più formalmente, il certificato è Cert_Alice = (Alice, PKAlice) _CA, il che significa che contiene la chiave pubblica di Alice PKAlice ed è firmato dalla CA.
Lo stesso è fatto da Bob, che ottiene un certificato simile.
Alice genera X e calcola g ^ X mod p.
Alice quindi invia due messaggi a Bob, M1 = (g ^ X mod p, PKAlice) _Alice (firmato da Alice) e M2 = Cert_Alice.
Bob verifica che M2 sia stato effettivamente firmato dalla CA attendibile (utilizzando il noto PKCA per vedere se il messaggio firmato corrisponde alla firma) e che appartiene davvero ad Alice.
Se M2 ha superato i test precedenti, significa che è stato inviato da Alice (a meno che qualcuno non abbia rubato la chiave privata di Alice e il certificato sia ancora valido). A questo punto, Bob utilizza il certificato PKAlice, che era all'interno di M2, per verificare la firma di M1. Se tutto è OK, Bob memorizza g ^ X mod p.
Bob genera Y e calcola g ^ Y mod p
Bob quindi invia due messaggi ad Alice, M3 = (g ^ Y mod p, PKBob) _Bob (firmato da Bob) e M4 = Cert_Bob.
Alice controlla la validità di M4 (vedi 4).
Se M4 è stato completamente verificato, Alice utilizza il PKBob certificato, che si trovava all'interno di M4, per verificare la firma di M3. Se tutto è OK, Alice memorizza g ^ Y mod p.
Alice e Bob calcolano separatamente (g ^ Y mod p) ^ X mod p == (g ^ X mod p) ^ Y mod p.
Ad ogni nuova sessione, riavvia da 2.
Ovviamente, l'uso di messaggi firmati dopo lo scambio DH consentirebbe di rilevare immediatamente che qualcosa di strano è successo, ma non c'è nulla nel DH anonimo che impedisce gli attacchi MitM.
Leggi altre domande sui tag attacks man-in-the-middle diffie-hellman