Protocolul STS sau Protocolul Station - To-Station ( Protocol Station-to-Station , STS ) este un protocol criptografic care permite celor două părți să obțină o cheie secretă partajată folosind un canal de comunicație neprotejat . Cheia rezultată este utilizată pentru schimburi ulterioare folosind criptarea simetrică . Protocolul se bazează pe algoritmul Diffie-Hellman .
O caracteristică distinctivă a protocolului STS este absența marcajelor de timp și a suportului pentru proprietatea perfectă a secretului direct. . Protocolul efectuează, de asemenea, o confirmare a cheii în două sensuri [1] , care permite ca protocolul să fie clasificat ca „ acord cheie autentificată cu confirmare cheie ” (AKC).
STS a fost introdus inițial în 1987 în contextul securității rețelei telefonice ISDN (O'Higgins et al. 1987) [2] , extins în 1989 și introdus în final de Whitfield Diffie , Paul C. van Oorschot și Michael Weiner ( Michael J. Wiener) în 1992. Pe baza protocolului STS, a fost creat protocolul IKE , care a devenit un standard industrial .
Pentru o descriere detaliată a principiului de funcționare, luați în considerare procesul de schimb de informații între unii utilizatori - Alice și Bob. Să presupunem că Alice are cheia publică certificată a lui Bob și Bob are cheia publică certificată a lui Alice. În același timp, ambele chei au fost certificate anterior de o autoritate de certificare de încredere care nu este direct implicată în proces. Înainte de a începe protocolul, trebuie să efectuați următorii pași [3] [4] :
Protocolul constă în următoarele runde de schimb de informații între Alice și Bob :
1. Alice alege un număr aleator x astfel încât 2 ≤ x ≤ p-1 și îi trimite lui Bob un mesaj m A = g x mod p
(1) Alice → Bob : m A = g x mod p,2. Bob alege un număr aleator y astfel încât 2 ≤ y ≤ p-1, calculează m B = g y mod p și, folosind mesajul primit de la Alice, calculează cheia secretă partajată K = m A y mod p = g xy mod p. Apoi îi trimite Alice m B și un mesaj criptat E K (Sig B ( m B , m A )), semnat cu semnătura sa digitală electronică.
(2) Alice ← Bob : m B = g y mod p, E K (Sig B ( m B , m A )),3. Alice calculează în mod similar cheia secretă și decriptează mesajul lui Bob. Apoi îl autentifică pe Bob verificându-i semnătura electronică și îi trimite mesajul E k (Sig A ( m A , m B )), semnat cu semnătura sa.
(3) Alice → Bob : E k (Sig A ( m A , m B )),4. Bob primește mesajul de la Alice, îl decriptează și verifică semnătura de la Alice.
Aici Sig A și Sig B sunt semnături digitale ale utilizatorilor Alice și Bob , respectiv, K = g xy mod p este cheia comună necesară.
Utilizarea semnăturilor digitale la transmiterea mesajelor între Alice și Bob garantează [5] autenticitatea primirii unui mesaj de la utilizatorul de la care ar fi trebuit să provină. Criptarea valorilor semnăturilor utilizatorului folosind un algoritm simetric E a fost introdusă pentru a asigura confirmarea reciprocă a corectitudinii calculului cheii, deoarece este imposibil să se obțină valorile corecte ale semnăturilor digitale cu o cheie calculată incorect. .
În 1994, atac asupra protocolului STS [6] a fost de profesorul de la Universitatea Oxford, Kevin Lowe În acest caz, Eva încearcă să afle corespondența [7] .
(1) Alice → Eve(Bob) : m A = g x mod p, (2) Eve → Bob : m A , (3) Eve ← Bob : m B = g y mod p, E K (Sig B ( m B , m A )), (4) Alice ← Eve(Bob) : m B , E K (Sig B ( m B , m A )), (5) Alice → Eve(Bob) : E K (Sig A ( m A , m B )).Criptanalistul Eve, aflată la mijloc între Alice și Bob, își folosește schimbul legitim cu Bob pentru a o convinge pe Alice că acționează în numele lui Bob. Sesiunea cu Bob rămâne incompletă deoarece Eve, neștiind cheia secretă partajată, nu va putea ghici răspunsul corect pentru Bob. Prin urmare, orice mesaj de la Eve în al treilea pas va fi respins. Acest atac nu reprezintă un pericol real [4] , întrucât cheia secretă K rămâne necunoscută Evei. Cu toate acestea, în acest caz, Alice o va confunda pe Eve cu Bob. Bob va crede că a format o cheie comună cu Eve, dar de fapt cu Alice. Astfel, protocolul nu va funcționa corect. Consecințele unui astfel de atac sunt comparabile cu situația în care Eve este pasivă până când Alice îi trimite ultimul mesaj lui Bob. Bob nu îl poate primi pentru că Eve blochează ultimul mesaj. Bob o anunță pe Alice că ultimul mesaj nu a fost primit. Deși un singur atac nu este periculos, totuși, un grup de atacatori, care au făcut un astfel de atac, poate reduce drastic puterea serverului central, deoarece serverul va rezerva resurse pentru utilizatorii ale căror notificări nu vor veni. De asemenea, merită remarcat faptul că, în timpul unui astfel de atac, Eve și aliații ei nu au nevoie de certificate . Deci, acest atac necesită o cantitate mică de resurse .
În 1995, Martin Abadi și Robert Needham au propus o modalitate de a preveni un astfel de atac asupra serverului. Pentru a face acest lucru, este suficient să transmiteți numele de utilizator în mod deschis [8] .
În 2004, Colin Boyd și Wenbo Mao au propus următoarea specificație pentru protocolul STS [9] :
(1) Alice → Bob : m A = g x mod p (2) Alice ← Bob : m B = g y mod p, Sig B ( m B , m A ), h K 0 ( m B , m A ) (3) Alice → Bob : Sig A ( m A , m B ), h K 0 ( m A , m B )unde K 0 = f(k) este parametrul cheie al funcției hash h K 0 ( m A , m B ), calculat ca valoare a unei funcții din cheia de sesiune rezultată K = g xy mod p. Modulul p și generatorul g sunt încă deschise.
Există posibilitatea unui „atac bilateral cu partajarea cheii necunoscute” ( atac BUKS ) [4] În acest caz, criptoanalistii Eva și Mallory încearcă să afle corespondența.
(1) Alice → Eve : m A = g x mod p (2) Eve → Mallory : m A (3) Mallory → Bob : m A (4) Mallory ← Bob : m B = g y mod p, Sig B ( m B , m A ), h K 0 ( m B , m A ) (5) Eve ← Mallory : m B , h K 0 ( m B , m A ) (6) Alice ← Eve : m B , Sig E ( m B , m A ), h K 0 ( m B , m A ) (7) Alice → Eve : Sig A ( m A , m B ), h K 0 ( m A , m B ) (8) Eve → Mallory : h K 0 ( m A , m B ) (9) Mallory → Bob : Sig M ( m A , m B ), h K 0 ( m A , m B )Drept urmare, Eve și Mallory, înțelegându-se, îi induc în eroare pe Alice și Bob, care formau o cheie comună. În același timp, Alice este sigură că a format o cheie comună cu Eve, iar Bob este sigur că a format o cheie comună cu Mallory .
Un algoritm simplificat este utilizat pentru autentificarea pur reciprocă, fără a genera un secret partajat. Implementarea arată astfel [10] :
(1) Alice → Bob : m A = g x mod p (2) Alice ← Bob : m B = g y mod p, Sig B ( m B , m A ) (3) Alice → Bob: Sig A ( m A , m B )În timpul atacului, Eve, care este un utilizator legitim al sistemului și deține un certificat de cheie publică , îi cere lui Alice să inițializeze protocolul. După aceea, ea intră într-o conversație cu Bob, prezentându-se ca Alice și folosind numărul ei aleatoriu unic. După ce a primit un răspuns de la Bob, Eve îi înlocuiește certificatul și semnătura cu propriile copii. Acest lucru o determină pe Alice să semneze mesajul lui Bob, care la rândul său îi permite lui Eve să-l păcălească pe Bob. .
(1) Alice → Eve : m A = g x mod p (2) Eve → Bob : m A (3) Eve ← Bob : m B = g y mod p, Sig B ( m B , m A ) (4) Alice ← Eve : m B = g y mod p, Sig E ( m B , m A ) (5) Alice → Eve: Sig A ( m A , m B ) (6) Eve → Bob : Sig A ( m A , m B )Drept urmare, Alice crede că vorbește cu Eve, iar Bob crede că vorbește cu Alice. Acest atac este impecabil pentru că nici Alice, nici Bob nu bănuiesc nimic. De menționat că Eve joacă un rol foarte activ în acest atac: semnează mesajul generat de Bob și o convinge și pe Alice să-l semneze pentru a-l induce în eroare complet pe Bob. Dacă Eve ar fi jucat rolul unui observator pasiv obișnuit, atunci Alice nu ar fi semnat niciodată mesajul lui Bob și nu și-ar fi permis să fie înșelată [7] .
În cazurile în care este imposibil să se determine utilizatorul de la care a fost primit mesajul, K = g xy poate fi folosit pentru a crea o inserție falsă [11] :
(1) Alice → Bob : m A = g x mod p (2) Alice ← Bob : m B = g y mod , Sig B ( m B , m A ), MAC K (Sig B ( g y , g x )) (3) Alice → Bob : S A ( g x , g y ), MAC K (Sig A ( g x , g y ))