Următoarea este o problemă din lumea reală.
Într-un protocol standardizat, clienții se pot conecta la un server folosind autentificarea reciprocă în 4 treceri pe un canal TCP altfel nesecurizat:
- pass-1: Clientul trimite provocarea C aleatorie către server
- pass-2: Serverul răspunde trimițând provocarea aleatorie S către client
- trece-3: Clientul pregătește res(S, K) și îl trimite către S
- pass-4: Serverul răspunde clientului cu res(C, K)
res(.) este o etichetă GCM-GMAC care depinde de o cheie simetrică K (de fapt AES128, dar acest lucru ar putea să nu fie relevant aici)
Odată ce autentificarea reciprocă are succes, clientul și serverul pot continua să comunice în cadrul unei așa-numite „asocieri”, de ex. clientul poate solicita unele date de la server.
Totuși, ce se întâmplă dacă un atacator (neavând cheia) ascultă în rețea și pornește un man-in-the-middle precum și un client rău intenționat (roșu).
Când clientul real începe pass-1 și trimite C1 la server, în același timp clientul rău trimite C2. Serverul răspunde la ambele solicitări, dar MitM reușește să injecteze S2 pentru a fi trimis către clientul bun, care pregătește res(S2) și îl trimite către server. Dar MitM captează res(S2) și îl injectează ca pass-3 pentru a fi trimis la server. Acum serverul autentifică clientul rău și trimite înapoi res(C2), care este doar ignorat de clientul rău. Deci, a fost stabilită o conexiune aparent autentificată reciproc între clientul și serverul prost.
Mă întreb dacă acest tip de autentificare reciprocă este cu adevărat eficient.