Protocoale de securitate

Cosmin
Cosmin Negruseri
20 aprilie 2008

Discutam cu Stefan Ciobaca, pe care il stiu de cand participam amandoi la Bursele Agora, si mi-a venit ideea sa scrie si el un post pe blogul infoarena. Stefan are cateva medalii la olimpiade internationale si un premiu intai la concursul Bursele Agora, a fost in comisii la ONI, Lot si la .campion. El a facut doua internshipuri pe vara la Microsoft si acum este in perioada de practica a masterului la ENS Cachan in Paris. Puteti sa ii cititi blogul aici. Mai departe ii dau cuvantul.

Cosmin m-a rugat sa scriu un guest-post; am decis sa fac o scurta introducere in domeniul cu care ma ocup la LSV (www.lsv.ens-cachan.fr).

Protocoalele de securitate (numite de asemenea protocoale criptografice) sunt mici programe care ruleaza intr-o retea cu ajutorul carora participantii pot comunica in mod "sigur". Desigur, o definitie mai vaga nici ca se putea.

Pentru a intelege despre ce e vorba, voi lua un exemplu clasic de protocol de tip challenge-response. Sa presupunem ca doi agenti A si B (Alice si Bob), au stabilit in prealabil o parola K (de exemplu K ar putea fi "stupidduck" sau "03031984") cunoscuta de amandoi (si de nimeni altcineva) si acum vor sa comunice intre ei. Alice doreste sa fie sigura ca vorbeste cu Bob. In acest sens, ei decid sa execute urmatorul protocol:

A -> B: enc(n, K)
B -> A: enc(n + 1, K)

[enc(x, y) denota criptarea lui x cu parola y.]

Alice este cea care initializeaza convorbirea si vrea sa se asigure ca vorbeste cu Bob. In acest scop, genereaza un numar aleator n si ii trimite lui Bob mesajul obtinut prin criptarea lui n cu parola K (partea de "challenge"). Stiind K, Bob poate decripta mesajul primit, afland in acest fel valoarea lui n. Bob calculeaza apoi n+1, cripteaza noul numar folosind parola K, si ii trimite inapoi lui Alice rezultatul ("response").

Dupa executia acestui protocol, Alice "stie" ca a vorbit cu Bob. Rationamentul ei are urmatoarea forma: "Am generat un numar aleator n, l-am criptat cu parola K (pe care o stiu doar eu si cu Bob). Am primit inapoi n+1 criptat cu parola K. Singura posibilitate de a primi n+1 este ca cineva sa fi aflat valoarea lui n si sa fi adaugat 1, apoi sa recripteze mesajul cu K. Ori acel cineva putea fi doar Bob, deci vorbesc cu el."

Desi este gresit (vom vedea in continuare de ce), acest rationament ne ajuta sa descoperim cateva lucruri despre modelul abstract in care studiem securitatea protocolului (in literatura de specialitate abstractiile folosite aici sunt reunite sub denumirea de modelul simbolic).

In primul rand, presupunem ca un atacator are puteri depline asupra retelei (intr-un anumit sens, presupunem ca atacatorul este reteaua). Atacatorul poate intercepta mesaje, poate crea mesaje noi, poate sterge mesaje, poate trimite mesaje mai vechi, etc. Acest model al atacantului este putin exagerat, dar sanatos.

Alta observatie de bun simt pe care o facem este ca Alice are incredere ca Bob a pastrat secreta parola K. Intr-adevar, daca Bob este corupt, protocol nu mai are sens.

Inca un lucru care merita remarcat: presupunem ca primitivele de criptare sunt perfecte: atacatorul nu poate deduce nici un fel de informatie despre continutul unui mesaj cifrat, decat daca cunoaste parola. Desi aceasta presupunere este incorecta in practica (intamplator si in teorie, dar nu intram aici in detalii), o folosim deoarece multe atacuri se folosesc strict de structura protocolului, tratand primitivele criptografice (criptarea in cazul nostru) ca niste cutii negre.

Voi prezenta in continuare un atac simplu asupra protocolui de mai sus. Atacul presupune ca parola K, stabilita in prealabil de Alice si Bob, are o dimensiune "relativ mica". Aceasta presupunere este naturala, deoarece un om nu poate sa retina un lucru complicat (alege ca parola o combinatie de cuvinte cunoscute, o data de nastere, un cod stil PIN, etc).

Eve (asa ii spunem atacatorului) intercepteaza o conversatie intre Alice si Bob si tine minte enc(n, K) si enc(n+1, K). Deoarece parola este de dimensiune relativ mica, Eve foloseste un dictionar pentru a genera toate parolele posibile (lasa calculatorul sa ruleze peste noapte). Pentru fiecare parola generata, Eve face un test simplu: cand decripteaza primul mesaj, adauga 1 si recripteaza rezultatul, obtine al doilea mesaj? Daca da, a dat (cu o probabilitate mare) peste parola folosita de Alice si Bob.

In atacul prezentat, Eve a fost un atacator pasiv: nu a modificat, creat, sau sters mesaje din retea. Tipul de atac lansat de Eve se numeste offline guessing attack. Guessing attack deoarece atacatorul "ghiceste" valorile posibile ale parolei; offline pentru ca testeaza daca a nimerit o parola corecta fara sa interectioneze cu Alice si cu Bob.

Ca un exercitiu, puteti sa dati exemplu foarte cunoscut de protocol care ar putea fi susceptibil unui online guessing attack si puteti preciza cum e (sau cum poate fi) prevenit un astfel de atac in practica?

Dupa cum vedeti, un protocol simplu poate fi susceptibil la atacuri suficient de subtile incat sa cerem o demonstratie formala a securitatii lui. Din pacate, desi mult mai buna decat o argumentatie informala asupra securitatii, o astfel de demonstratie nu ne asigura decat... o demonstratie... intr-un anumit model. Modelul este o abstractie tractabila a realitatii; spre deosebire de model, realitatea e cruda.

Click pe poza pentru un comic strip de pe xkcd.com

Mai mult, e greu de spus ce inseamna securitate: diverse protocoale pot avea diverse cerinte; printre proprietatile de securitate cele mai studiate sunt: confidentialitate (secrecy) -- atacatorul nu afla un anumit lucru, autenticitate (authenticity) -- stim cine este emitatorul unui mesaj, anonimat -- un utilizator nu doreste ca toata lumea sa afle ce vrea sa faca.

Despre protocoale de securitate se pot spune multe lucruri interesante, dar deocamdata inchei aici. Sper ca am reusit sa va castig atentia si ca subiectul vi se pare interesant. Ca un exercitiu de gandire, va las placerea sa descoperiti cum se poate concepe un protocol de tip challenge-response similar ca scop protocolului descris aici, dar astfel incat sa nu fie susceptil la un atac de dictionar (guessing attack = atac de dictionar, in romana).

Astept comentariile voastre.

Categorii:
remote content