Devo dire che la spiegazione di Wikipedia mi confonde molto.
The responder sends its identifier within the response so, if it
receives a response that has its identifier in it, it can reject it.
Sulla base del quarto passo, presumo che intendessero:
The responder sends its identifier within the response so, if the challenger receives a response that has its identifier in it, it can reject it.
Che aggiunge una nozione di proprietà della risposta. Ora, questo è il modo in cui capisco il problema e la soluzione:
Dimentica la crittografia e gli indirizzi IP e pensa a un caso reale. Sei in classe e, anche se sei un bastardo pigro, ti senti fortunato e vuoi rispondere a una domanda complicata (sfida), solo per nerd. Supponiamo che la domanda sia sempre diversa (nonce). La tua insegnante ti fa la domanda ma (come previsto), tu non conosci la risposta ma vuoi comunque essere carina, quindi chiedi al ragazzo nerd dietro di te (risponditore), dicendo che la domanda era per lui. Supponiamo che nessuno se ne accorga (puoi urlare: guarda fuori Diffie-Hellman fuori dalla finestra !!).
Scegli la risposta e la dici ad alta voce per il tuo insegnante come il tuo. È corretto e tu salvi il giorno. Qual è uno dei problemi qui?:
Knowing the answer, you can easily announce it as yours since it is not bound to a person.
La prima linea di difesa sarebbe quella di avere le chiavi condivise tra i nerd e l'insegnante (i bambini stupidi parlano chiaro) e farli cifrare i loro messaggi. Solo i ragazzi intelligenti sarebbero in grado di crittografare una risposta (nonce). Tuttavia, sorge un altro problema:
You are clever enough to ask the question to the nerd kid and get the
jibber jabber from him (encrypted answer) and replay it to your
teacher (here replay does not mean replay attack, you are just saying
what the kid said previously).
L'insegnante accetta la soluzione perché, anche se solo i bambini intelligenti possono rispondere e crittografare, non c'è modo che lei possa dire se la risposta è stata davvero tua. Ci dovrebbe essere un modo per lei di scoprire:
Introduzione, identificatori: ogni risposta è crittografata con il nome del bambino e il problema è risolto. Nel mondo reale, è possibile per una persona convalidarlo facilmente: l'insegnante riceve una risposta da te, ma l'identificativo viene dal bambino che porta a una mancata corrispondenza.
Nel mondo IT, un modo sarebbe, come hai detto, usare gli indirizzi IP. Se l'attaccante invia un messaggio con l'IP di un altro pc, non funzionerà. Certo, potrebbe falsificare la fonte per la corrispondenza, ma non è possibile stabilire una connessione. Questo potrebbe funzionare se l'applicazione fosse un semplice esecutore di comandi: l'attaccante invia il comando autodistruggerlo e l'altro pc distruggerebbe se stesso senza richiedere ACK o ulteriori scambi di messaggi.
Stai al sicuro;)