Această problemă a apărut într-o lucrare de examen trecută.
În protocoalele PAKE (schimb de chei autentificate prin parolă), $A$ și $B$ autentificați fiecare
alta prin cunoașterea unei parole partajate care este prea slabă pentru a permite unui atacator să încerce
ghiciri repetate pentru a încerca să-l găsească știind cum era un singur mesaj al protocolului
construit. Nu există nicio semnătură criptografică sau un secret alternativ partajat sau de încredere
terță parte pe care o pot folosi. Un astfel de protocol funcționează de obicei după cum urmează:
⢠Faza 1: $A$ și $B$ schimbă datele pe care le-au creat pentru această sesiune și valori
au calculat din aceasta și propria lor valoare asumată pentru parolă $p_{AB}$.
Rețineți că dacă sunt A și B, ambii vor ști la fel $p_{AB}$ dar dacă unul sau
ambii falsifică valorile pe care le presupun că probabil vor fi diferite. Din
aceste calcule obțin amândoi o cheie $k_A$ sau $k_B$, care va fi la fel dacă lor
valorile parolei au fost aceleași.
⢠Faza 2: Se compară $k_A$ și $k_B$ printr-un schimb de mesaje care le permit
pentru a vedea dacă sunt de acord, dar nu dezvăluie $k_A$ sau $k_B$ pentru lume, și nici nu permiteți
parte să creadă că sunt de acord atunci când nu.
De ce ar trebui $A$ nu trimite, ca parte a acestui protocol, $hash(p_{AB}, N)$, Unde $N$ este un nonce cunoscut
la $B$ până când ea este sigură că $B$ nu este un impostor și chiar știe $p_{AB}$? Extindeți acest lucru la
îndrumări generale despre ce mesaje de forma hash($X$) nu trebuie trimis de la $A$ la
$B$ Unde $X$ implică $p_{AB}$ în construcția sa.
Acum gândiți-vă la implementarea numai a fazei 2. Cum ați putea folosi hashingul pentru a obține
obiectivul Fazei 2, în așa fel încât dacă $A$ sau $B$ a vorbit de fapt cu un impostor
cu o parolă diferită în faza 1, impostorul nu poate manipula mesajele către
fă-o să creadă că protocolul s-a încheiat cu succes.
Incercarea mea:
A) $A$ nu ar trebui să trimită, $hash(p_{AB}, N)$ ca un impostor $I_B$ poate refolosi același nonce și trimite $hash(p_{AB}, N)$ înapoi la A, pretinzând că știe parola $p_{AB}$
b) $X$ nu ar trebui să fie $p_{AB}$ (pe cont propriu). Ar trebui să conțină, de asemenea, un fel de identificare pentru fiecare utilizator, unică pentru ceea ce trimite celălalt utilizator, adică. dacă Alice trimite $hash(X_1)$ iar Bob trimite $hash(X_2)$, $X_1 \neq X_2$. Este suficient? Nu mă pot gândi la altceva.
c) Pentru implementarea fazei 2, faceți Alice să trimită $hash(E_{k_A}(Alice|k_A))$ iar Bob trimite $hash(E_{k_B}(Bob|k_B))$. Unde $E_k$ este o funcție de criptare, criptată folosind cheia $k$. Este corect?