Hai bisogno di una definizione . Vale a dire, cos'è "Bob" secondo Alice? Se "Bob" è "chi risponde", allora Carol farebbe un bel Bob - in quel caso, non c'è un vero attacco, solo Alice che parla con "qualcuno" che sembra essere Carol.
Se è una nozione definita di Bobness che Alice può usare, allora ci sono algoritmi che si basano su questo. Ecco come funziona SSL . Immagina di essere Alice, Bob è un sito Web che conosci per nome (ad esempio "www.paypal.com"), e Carol è il tuo Evil ISP. Non vuoi parlare solo con qualcuno , vuoi parlare con un Bob / server specifico che ha un nome. I certificati a chiave pubblica possono utilizzare firme per darti una certa garanzia sull'associazione tra il nome (" Bob ", alias" www.paypal.com ") e una chiave pubblica: la garanzia fornita dall'intero sistema è che una determinata chiave pubblica è realmente" posseduta "da un'entità che porta il nome" www.paypal.com ", dove "possedere" significa "avere il controllo esclusivo della corrispondente chiave privata", e in un modo che Carol non può ottenere una garanzia simile.
Una volta che c'è una chiave pubblica del server conosciuto, lo scambio di chiavi può essere protetto contro MitM. Di nuovo, guarda come è fatto con SSL.
Nel caso dei certificati X.509, Alice deve avere una conoscenza a priori di una chiave pubblica dell'autorità di certificazione root (qui "trust anchor"). Per un altro modello, considera SSH . Qui, noi presumiamo che Alice potesse stabilire, ad un certo punto, una connessione senza Carol a Bob (o una connessione che Carol non si preoccupava di alterare). Quindi, Alice ricorda la chiave di Bob e la utilizza nuovamente per tutte le connessioni successive. Ecco come SSH di solito funziona: per la prima connessione, il client richiede conferma dell'utente esplicito, quindi memorizza la chiave pubblica nel file .ssh/known_hosts
di Alice. Idealmente, per la prima conferma, Alice verificherà con un meccanismo fuori banda la chiave pubblica del server (la sua impronta digitale) prima di accettarla la prima volta (ad esempio effettuando una chiamata al server sysadmin e controllando con lui la chiave impronte digitali).