Lascia che C sia l'attaccante. C esegue un altro server, con il proprio nome ( C ), con la propria chiave pubblica K c . Occasionalmente, A si connette a C (consapevolmente, ma non sapendo che C è il Male, o credendo che la malvagità di C non si estenderà oltre C stesso). L'attacco va così:
- Client A si connette a C e invia {K ac } K c a C .
- Immediatamente, C si connette al server B e afferma di essere A . C genera un K cb casuale e invia {K cb } K b a B .
-
B risponde a C con {N b } K cb a C . Poiché C conosce K cb , C può decrittografarlo e ottenere N b .
-
A è ancora in attesa. C invia a A il valore {N b } K ac . Questo è il punto difficile: C invia a A come sfida lo stesso valore di quello inviato da B a C .
-
A risponde con {CA, {N b } K a -1 } K ac , come da protocollo. Poiché C conosce K ac , C può decrittografarlo.
-
C invia {CA, {N b } K a -1 } K cb a B .
E, voilà! C ha eseguito correttamente il protocollo con B , inviando un certificato e una firma appropriati da A , calcolati sul valore di sfida che B inviato a C . C è quindi autenticato come A per quanto riguarda il server B . Il A originale non ha notato nulla e non è a conoscenza del fatto che qualcosa è stato fatto in relazione al server B .
La correzione descritta nell'articolo risolve il problema, che è quello nel protocollo originale, la firma di A è retargetable: nell'attacco, A firma una sfida ricevuto dal server C , ma la firma funziona anche come risposta per la stessa sfida dal server B . Includere il nome di B in ciò che è firmato impedisce la manipolazione: ora, una risposta a una sfida da un determinato server non può essere utilizzata come risposta alla stessa sfida da un altro server distinto.
Ci sono altri attacchi simili che costringono anche l'inclusione del nome A in ciò che è firmato. In SSL / TLS come è attualmente definito, la firma dal client (nel messaggio ClientKeyExchange
) viene calcolata su un hash di tutti i precedenti messaggi di handshake (inviati e ricevuti), che include sia i nomi client che i nomi dei server (come parte dei rispettivi messaggi Certificate
).