Curs 5-8mapetrii/fisiere/ISR/C5_C8.pdf · 1 Curs 5-8 Autentificarea mesajelor Autentificarea...
Transcript of Curs 5-8mapetrii/fisiere/ISR/C5_C8.pdf · 1 Curs 5-8 Autentificarea mesajelor Autentificarea...
-
1
Curs 5-8
Autentificarea mesajelor
Autentificarea mesajelor este un mecanism prin care destinatarul unui mesaj poate
verifica faptul că autorul mesajului este o anumită entitate și că mesajul nu a fost modificat de
altcineva. Pentru autentificarea unui mesaj se aplică asupra mesajului primit un test de
autenticitate. Un asemenea test trebuie să asigure faptul că orice mesaj autentic va trece testul
respectiv și că probabilitatea ca un mesaj neautentic, produs cu un efort computațional
rezonabil, să treacă testul este foarte mică.
Există două nivele distincte de "spargere" a unui test de autenticitate:
fals existent (engl. existential forgery) - posibilitatea ca un adversar să genereze un mesaj neautentic care să treacă testul de autenticitate;
fals ales (engl. choosen forgery) - în plus față de falsul existent, conținutul mesajului neautentic este (total sau în mare parte) la alegerea adversarului.
În studiul metodelor de autentificare a mesajelor se presupune că mesajul de transmis nu
este secret deoarece în practică apare frecvent necesitatea ca un mesaj public să poată fi testat
de oricine în privintă autenticității (de exemplu, în cazul unui anunț public, un cetățean ar
trebui să poată verifica dacă textul respectiv este textul autentic emis de autoritatea abilitată).
Metodele de asigurare a confidențialității se separă de obicei de metodele de control a
autenticității, deoarece doar informațiile pentru asigurarea confidențialității nu asigură o
garanție privind autenticitatea mesajului (de exemplu, pentru unele metode de criptare un
adversar poate opera modificări asupra textului cifrat cu efecte previzibile asupra textului clar,
chiar dacă nu cunoaște efectiv textul clar). Așadar, pentru autentificare sunt necesare unele
informații suplimentare care de obicei se transmit pe canale sigure (ca exemplu practic, un
canalul nesigur este Internet-ul, iar un canalul sigur dar cu capacitate foarte redusă este un
bilet scris sau o convorbire telefonică). În asigurarea autenticității, un rol foarte important este
jucat de funcțiile de dispersie criptografică (engl. hash function). În sens matematic, funcțiile
hash sunt funcții definite pe o mulțime cu multe elemente (posibil infinită) cu valori într-o
mulțime cu un număr fix și mai redus de elemente. Funcțiile hash nu sunt inversabile. Pe
lângă aplicațiile în domeniul criptografiei, aceste funcții mai sunt folosite pentru a accelera
căutările în tabele cu multe date sau pentru comparări de date. În cazul nostru, o funcție de
dispersie va asocia unui șir de biți de lungime oricât de mare, o valoare întreagă într-un
interval dat de forma (sau echivalent, un șir de biți de lungime ), satisfăcând condiția că, pentru șirurile care apar în problema unde se folosește funcția de dispersie, două șiruri
distincte să nu aibă aceeași valoare a funcției de dispersie cu probabilitate semnificativ mai
mare de . O funcție hash poate lega două sau mai multe chei de la aceeași valoare hash. În multe aplicații, este de dorit minimalizarea șansei apariției unor astfel de coliziuni, ceea ce
înseamnă că funcția hash trebuie să lege cheile de valorile hash cât mai uniform posibil. De
asemenea, în funcție de aplicație, alte proprietăți pot fi necesare. Deși ideea a fost concepută
în anii 1950, proiectarea optimă a funcțiilor hash este încă un subiect activ de cercetare și
http://ro.wikipedia.org/wiki/Matematic%C4%83
-
2
discuție. Funcțiile hash sunt utilizate și ca sume de control sau funcții hash criptografice, dar
nu trebuie confundate cu caracterele de verificare, amprentele numerice, funcțiile de
randomizare, codurile de corectare a erorilor. Deși aceste concepte se suprapun într-o oarecare
măsură, fiecare are propriile sale utilizări și cerințele și este proiectat și optimizat în mod
diferit.
Față de o funcție de dispersie, o funcție de dispersie criptografică are anumite
proprietăți suplimentare, și anume:
rezistentă la preimagine (preimage resistence) - dacă se cunoaște , să fie dificil de regăsit (dificultatea să se păstreze chiar în cazul cunoașterii unei părți din );
rezistentă la a doua preimagine (second preimage resistence) - dacă se cunoaște un șir
, să fie dificil de găsit un alt șir , cu ; rezistentă la coliziuni (collision resistence) - să fie dificil de găsit două șiruri și
cu . Pentru ca o funcție să satisfacă aceste condiții (pentru a rezista atacurilor prin forță brută)
trebuie ca numărul de biți ai dispersiei să fie suficient de mare (minim 128).
Principalele funcții de dispersie sunt:
MD5 - creată de Ronald Rivest în 1991, este una dintre cele mai raspandite. Lucrează cu
șiruri de biți de lungime 128. Recent au fost descoperite o serie de slăbiciuni ale acesteia.
SHA1 - a fost dezvoltată de NSA (National Security Agency, SUA). Lucrează cu șiruri
de biți de lungime 160. Până în acest moment s-a dovedit a fi mai sigură decât MD5.
RIPEMD-160 - dezvoltată la Katholieke Universiteit Leuven în 1996. Lucrează cu șiruri
de biți de lungime 160.
Ca și mod de lucru, emițătorul unui mesaj calculează , transmite prin canalul principal și transmite prin canalul sigur. La destinație se va verifica de către receptor dacă . În baza proprietăților funcției este greu (daca nu chiar imposibil) ca un adversar să modifice în , cu pentru a păcăli receptorul.
Pentru sporirea securității se utilizează și funcții de dispersie cu cheie (keyed hash
function), numită și MAC (message authentication code), o asemenea funcție fiind o funcție
de dispersie parametrizată cu o cheie , având proprietatea că, pentru cineva care nu cunoaște dinainte cheia , este nefezabil computațional să obțină o (nouă) pereche în care , chiar dacă cunoaște un număr de perechi cu . Pentru a utiliza o funcție de dispersie cu cheie, mai întâi, emițătorul și receptorul se înțeleg asupra unei
chei secrete , apoi, la trimiterea unui mesaj , emițătorul calculează și trimite perechea . Receptorul testează dacă .
Ca și cale de atac pentru autentificările prin dispersie cu cheie putem aminti atacul prin
reflexie, eficient când se utilizează aceeași cheie pentru autentificarea ambelor sensuri de
comunicație. Dacă spre exemplu Alice dorește să comunice cu Bob și ei stabilesc cheia de
dispersie , un adversar activ poate intercepta un mesaj trimis de Alice către Bob și să-l trimită înapoi lui Alice. Dacă aceeași cheie este utilizată pentru autentificarea ambelor sensuri de comunicație și dacă mesajele au același format, atunci Alice acceptă mesajul ca
venind de la Bob. Pentru prevenirea unui asemenea atac, există două soluții:
utilizarea de chei distincte pentru cele două sensuri;
trecerea numelui entității emițătoare în mesaj.
http://ro.wikipedia.org/w/index.php?title=Sum%C4%83_de_control&action=edit&redlink=1http://ro.wikipedia.org/wiki/Coduri_corectoare_de_erori
-
3
Pentru a rezista atacurilor prin forță brută, se impune ca atât dimensiunea cheii cât și cea
a dispersiei să fie de minim 64 de biți, preferabil 80 de biți.
Exemplu de construcție a unei funcții de dispersie cu cheie pornind de la funcții de
dispersie rezistente la coliziuni și rezistente la preimagine (conform [RFC 2104, 1997]):
( )
unde:
- reprezintă concatenarea;
- este operația sau exclusiv;
hash - este funcția de dispersie criptografică (de exemplu sau );
- este cheia completată la o lungime aleasă în funcție de anumite particularități ale funcției de dispersie de la bază (pentru și , se ia de 64 de octeți);
, - sunt șiruri obținute prin repetarea de ori a octetului cu valoarea (hexa) 36, respectiv 5C.
Pentru micșorarea cantității de informație pusă la dispoziția adversarului, rezultatul unei
funcții hash se poate trunchia la lungime mai mică (o funcție de dispersie hash dă 128-160
biți, iar pentru o dispersie cu cheie sunt suficienți 64-80 de biți).
O construcție similară dispersiei cu cheie este semnătura digitală, aceasta din urmă
utilizând chei diferite pentru crearea respectiv verificarea dispersiei(numită, în acest caz,
semnătură). Fiind o construcție asimetrică, relația dintre semnătura digitală și dispersia cu
cheie este similară cu cea dintre criptografia asimetrică și criptografia simetrică.
Ca și mod de lucru, autorul de mesaje semnate generează cu un algoritm specific o
pereche de chei ( -cheia secretă sau cheia de semnătură, -cheia publică sau cheia de verificare) și transmite cheia publică receptorului, prin utilizarea unui canal sigur, astfel încât cheia să nu poată fi modificată în timpul transmisiei. Apoi, folosind funcția de semnare
se crează semnătura și transmite perechea . Utilizând funcția de
verificare , receptorul verifică dacă =true.
Întrucât semnătura depinde și de mesajul de semnat și de semnatarul acestuia (prin cheia ), o semnătură nu poate fi tăiată de pe un mesaj și plasată pe alt mesaj. Pentru a crea mai multe semnături valide pentru un același mesaj se poate folosi pentru funcția de
semnătură un număr aleator ca al treilea argument.
Exemplu de construcție a unei semnături în care criptarea este bijectivă (pe baza RSA):
,
.
Deși calcularea lui fără cunoașterea lui este aproape imposibilă,
construcția anterioară permite totuși adversarului să producă un fals prinalegerea unui în mod aleator și prin calcularea valorii . Pentru eliminarea acestui inconvenient,
nu se va aplica direct asupra lui ci asupra unei dispersii rezistente la preimagine și la coliziuni a lui . Metoda aceasta are două avantaje, pe de o parte că algoritmul de criptare asimetric, lent, se aplică asupra dispersiei și nu asupra întregului mesaj (dispersia se
calculează mai repede decât criptarea asimetrică), iar pe de altă parte se împiedică falsul
-
4
existent deoarece chiar dacă adversarul calculează nu poate găsi un mesaj cu
dispersia astfel fixată.
Prin intermediul semnăturii digitale este asigură atât autentificarea mesajelor cât și
nonrepudiabilitatea acestora deoarece cheia de semnătură este cunoscută doar de către
emițător, ceea ce face ca prezența unei semnături verificabile să garanteze că mesajul a fost
produs de emițător.
O altă problemă importantă în privința securității datelor este verificarea prospețimii
mesajelor primite, adică necesitatea de a distinge un mesaj (autentic) "nou" de o copie a unui
mesaj mai vechi (ex. în cazul transferului unei sume de bani dintr-un cont în altul, este
necesar ca destinatarul să accepte mesajul doar o singură dată). Dificultatea în privința
verificării prospețimii constă în faptul că o copie a unui mesaj "vechi" este identică cu
originalul din momentul când acesta era "nou", ceea ce face ca un test de autenticitate să nu
detecteze vechimea mesajului. Ca soluíe a problemei, se introduce în mesajul autentificat un
"identificator de mesaj" care va fi diferit de la un mesaj la altul și asupra căruia să se execute
testul de prospețime. Un astfel de element se numește număr unic. Ca și număr unic se poate
folosi un număr de ordine, ora curentă sau un număr aleator ales de receptor. În cazul
numărului de ordine, atât emițătorul cât și receptorul țin evidența numărului de ordine pentru
fiecare mesaj, un mesaj fiind acceptat de receptor doar daca numărul trecut în mesaj (de
emițător) coincide cu numărul curent de ordine. Metoda aceasta are două neajunsuri: necesită
menținerea pe termen lung a numerelor de ordine curente și necesită un contor separat de
număr de ordine pentru fiecare partener de comunicație. Dacă se folosește ca număr unic ora
curentă, emițătorul scrie în mesaj ora curentă, receptorul considerând mesajul proaspăt dacă
ora din mesaj coincide cu ora curentă a receptorului. În cazul acesta receptorul trebuie să
accepte un decalaj de cel puțin câteva zecimi de secundă deoarece ceasurile nu sunt
întotdeauna perfect sincronizate iar transportul mesajului nu se poate realiza instantaneu.
Acest aspect este principala problemă a utilizării orei curente ca număr unic, deoarece în
interiorul acestui decalaj admis, adversarul poate trimite copii ale mesajului, copii ce vor fi
acceptate ca proaspete de destinatar. Această problemă poate fi corectată dacă emițătorul va
asigura ca două mesaje distincte să aibă numărul unic distinct (fie rezoluția marcajului de
timp se face mai fină decât timpul necesar emiterii unui mesaj, fie emițătorul mai ține un
contor care se incrementează la fiecare mesaj trimis și făcut astfel încât să nu se reseteze
înainte ca marcajul de timp să treacă la următoarea valoare). Utilizarea orei la verificarea
prospețimii necesită și un mecanism sigur care să mențină sincronizate ceasurilor
dispozitivelor care comunică. Utilizarea unui număr aleator ca număr unic se realizează prin
generarea de către receptor a unui număr aleator ce trebuie să aibă cel puțin 64{80 biți (pentru
a nu se repeta) și să nu poată fi prezis de către adversar, număr care se adaugă de emițător la
mesajul trimis. Mesajul va fi acceptat ca "nou" de către receptor doar dacă numărul aleator din
mesaj coincide cu numărul aleator trimis anterior. Nu este necesar ca acest număr să fie inclus
efectiv ăn mesaj, fiind suficientă participarea acestuia la calculul semnăturii mesajului.
Principalul inconvenient al acestei metode este acela că este necesar transferul numărului
aleator dinspre receptor spre emițător ( implică și faptul că receptorul trebuie să știe că
urmează să primească un mesaj). Acest lucru necesită adesea încă un mesaj, lucru care face
aplicarea metodei costisitoare, și în anumite cazuri imposibilă (de exemplu, metoda nu este
aplicabilă pentru securizarea poștei electronice sau pentru protocoale de difuziune-broadcast).
În cazul unui schimb de mai multe mesaje, de exemplu o sesiune ssh, se poate combina
numărul aleator cu un număr de ordine. La deschiderea conexiunii, receptorul trimite numărul
aleator, emițătorul include în fiecare pachet al conexiunii numărul aleator primit la
deschiderea conexiunii și numărul de ordine al pachetului.
-
5
În practică, criptarea, autentificarea și verificarea prospețimii nu sunt activități care se
execută separat, de cele mai multe ori acestea fiind combinate.
Verificarea prospețimii unui mesaj se face pe baza unui număr unic inclus în mesaj,
număr unic pe care receptorul îl verifică la primirea mesajului. Dacă numărul unic are o
singură valoare validă, se poate conveni că numărul nu se transmite efectiv, însă dispersia sau
semnătura se calculează ca și când numărul ar fi parte a mesajului. Combinarea criptării cu
autentificarea se poate face în mai multe moduri. O modalitate ar fi aceea în care se calculează
întâi semnătura sau dispersia, iar apoi se criptează rezultatul concatenării datelor utile cu
dispersia sau semnătura. O altă metodă constă în criptarea mai întâi a mesajului urmată de
calculul dispersiei sau semnăturii mesajului criptat. Pentru această metodă, este necesar ca
pentru semnătură sau dispersie să nu se utilizeze decât o singură cheie de criptare, în caz
contrar apărând vulnerabilități de tip fals existent. Ultima metodă de combinare a criptării cu
autentificarea constă în criptarea doar a textului clar, iar apoi la textul cifrat rezultat se adaugă
semnătura sau dispersia textului clar. Dacă autentificarea se face prin dispersie cu cheie,
metoda nu prezintă vulnerabilități (în caz contrar, se poate arăta că funcția de dispersie este
vulnerabilă la fals existent). Acest mod de combinare a criptării cu dispersia cu cheie este
utilizat de protocolul ssh versiunea 2. Dacă autentificarea se face prin semnătură digitală,
metoda nu este corectă deoarece permite unui adversar care bănuiește textul clar să verifice
dacă textul clar este cel bănuit de el.
Intrebări de verificare
Cum se face autentificarea mesajelor?
Ce este o funcţie de dispersie criptografică?
Ce este semnatura digitală?
Cum se poate verifica prospeţimea unui mesaj?
Stabilirea cheilor
În cursurile anterioare s-a vorbit despre alegerea cheilor de către partenerii de
comunicație fără a preciza modul în care se realizează acest lucru. Cerințele de generare a
cheilor diferă în cazul criptografiei simetrice de cel al criptografiei asimetrice.
În primul caz, cheile se numesc chei simetrice, iar un protocol de stabilire pentru acestea
trebuie să îndeplinească următoarele cerințe:
autentificarea cheilor - cheia să nu poată fi cunoscută de altcineva decât de entitățile ce doresc să comunice;
cheia să fie nouă (chei mai vechi ar putea fi cunoscute de eventuali adversari);
confirmarea cheii - fiecare entitate ce comunică să aibă confirmarea că partenerul de comunicație a primit efectiv cheia .
Există posibilitatea ca să nu se prevadă confirmarea cheii ca parte a protocolului de
stabilire a cheii, dacă spre exemplu a doua entitate fie nu are nevoie să o autentifice pe prima
(de exemplu, a doua entitate este un server public), fie utilizează un mecanism de autentificare
al utilizatorilor.
-
6
În cazul criptografiei asimetrice avem chei publice. În cazul acestora, spre deosebire de
cazul cheilor simetrice, unde transmisia unei chei între partenerii de comunicație se face doar
pentru o cheie proaspăt generată, se întâmplă frecvent ca o aceeași cheie să fie transmisă de
mai multe ori către o aceeași entitate. Certificarea unei chei publice necesită următoarele:
receptorul trebuie să poată verifica dacă cheia primită este autentică (dacă este cheia partenerului de comunicație);
receptorul trebuie să poată verifica dacă cheia mai este validă (o cheie publică trebuie să poată fi invalidată dacă se suspectează că a fost compromisă cheia secretă
corespunzătoare).
Pentru stabilirea cheilor (simetrice sau publice) sunt necesare mecanisme de securizare a
comunicației (criptare și autentificare) deoarece prezența unui adversar este posibilă chiar în
această etapă a comunicării, principala problemă fiind aceea că între cele două entități nu
există încă un canal sigur de comunicare. În această situație o comunicație securizată se poate
realiza prin intermediul unui terț de încredere (care să poată deja comunica securizat cu
fiecare din primele două și care să prezinte încredere acestora) sau prin intermediul unui
utilizator uman. Cheile odată generate pot fi:
chei efemere (ephemeral key) sau chei de sesiune, utilizate pentru o perioadă scurtă, de exemplu pe durata unei conexiuni sau pentru a cripta un singur mesaj, fiind
distruse imediat după aceea. Cheile efemere sunt chei simetrice;
chei de lungă durată (long-term key), utilizate în cadrul mecanismelor de stabilire sau certificare a cheilor. Cheile de lungă durată pot fi chei simetrice sau chei asimetrice.
Stabilirea cheilor în lipsa unei chei deja existente și în prezența unui adversar pasiv se
poate face prin utilizarea criptografiei asimetrice sau prin alte metode, dintre care cea mai
cunoscută este metoda Difie-Hellman.
Pentru stabilirea unei chei de sesiune între două entități, și , prin criptografie asimetrică, protocolul este următorul:
generează o pereche de chei pentru criptografie asimetrică (cheia secretă este cheia sa de lungă durată);
trimite lui cheia publică a lui ; generează aleator o cheie de sesiune ; trimite lui cheia de sesiune criptată cu cheia publică primită de la ; decriptează cheia transmisă de . Varianta aceasta se poate îmbunătăţi dacă, spre exemplu, pe lângă cheia de lungă durată,
se ia o a doua pereche de chei care să fie regenerată periodic. transmite lui ambele chei publice (cheia de lungă durată și cheia publică proaspătă), iar criptează cheia de sesiune cu cheia proaspătă iar rezultatul îl criptează cu cheia de lungă durată. Avantajul obținut este că
dacă un adversar obține cheia secretă de lungă durată a lui , dar între timp cheia proaspătă a expirat și a fost distrusă, adversarul nu mai poate decripta comunicațiile vechi.
Pentru stabilirea unei chei de sesiune prin metoda Difie-Hellman, protocolul este
următorul:
Se genenerează un număr prim mare și un număr ; alege un număr aleator , calculează și-i transmite lui numărul
; alege un număr aleator , calculează și-i transmite lui numărul
; și calculează cheia de sesiune astfel:
-
7
(pentru )
(pentru )
Deoarece , cheia de sesiune calculată de cei doi este aceeași. Cunoscând doar , calcularea valorii este foarte dificilă. Avantajul metodei constă în faptul că nu este necesară o cheie de lungă durată, totodată fiind mai rapidă decât regenerarea la fiecare mesaj a unei perechi de
chei pentru un cifru asimetric. Dezavantajul este acela că metoda necesită o comunicație
interactivă, astfel, nefiind aplicabil transmiterii mesajelor prin poștă electronică.
Metodele de mai sus nu sunt eficiente în prezența unui adversar activ deoarece există
pericolul atacului omului din mijloc, descris în continuare. Un asemenea atac constă în
interpunerea unui adversar activ între și , aceștia din urmă crezând că comunică fiecare cu celălalt când de fapt ei comunică cu . În general, comunică cu jucând rolul lui pentru a stabili o cheie de sesiune , comunică cu jucând rolul lui pentru a stabili o cheie de sesiune , apoi decriptează mesajele trimise de lui (acestea fiind criptate cu ), le citește, eventual le modifică, după care le criptează (și eventual le autentifică) utilizând cheia
. Pentru lupta împotriva unor asemenea atacuri, informația se transmite în fragmente, lucru ce împiedică forma pură a atacului man-in-the-middle, însă, pentru ca să-l distingă pe de un adversar este necesar ca să aibă o caracteristică distinctivă inimitabilă. O astfel de caracteristică este cunoașterea unei chei secrete, ceea ce face necesară, pentru o comunicație
sigură, existența unui pas de inițializare în care să se transfere o cheie între cele două entități.
O cale sigură pentru stabilirea cheilor între două entități care încă nu au stabilite chei se poate
face cu ajutorul unui terț de încredere(trusted third party), , în ale cărui servicii au încredere și care partajează chei pentru criptare și autentificare atât cu cât și cu se mai numește server de distribuire a cheilor (Key Distribuțion Center sau KDC).
Dacă presupunem că protocolul de stabilire a cheii este inițiat de către , serverul generează aleator o cheie de sesiune, pe care o transmite lui și lui . Transmisia către este criptată și autentificată cu cheia partajată între și , iar transmisia către este criptată și autentificată cu cheia partajată între și . Deoarece este de presupus că face acest serviciu pentru mai multe entități, pachetele transmise către și trebuie să conțină și numele lor, astfel încât, la primirea pachetului, și să știe cine este partenerul cu care comunică.
Modul descris anterior oferă doar autentificarea cheii și nu verifică și prospețimea
acesteia, ceea ce impune introducerea în mesaje a unor elemente de control al prospețimii. O
primă posibilitate, exploatată de protocolul Kerberos, este adăugarea unei perioade de
valabilitate. O a doua posibilitate, exploatată de protocolul Otway-Rees, se bazează pe numere
aleatoare. Acesta prevede că și transmit către câte un număr aleator, acestea fiind incluse în mesajele corespunzătoare fiecărei entități. și verifică dacă numerele aleatoare incluse în mesajul autentificat de la sunt într-adevăr numerele trimise de ele.
Practic, stabilirea cheilor cu ajutorul unui terț de încredere se face construind un server care crează chei de sesiune, la cerere, pentru toate entitățile din rețea. În rețele mari, nu se
poate lucra cu un singur server, deoarece aceasta ar cere tuturor să aibă încredere în
administratorul serverului. Pentru stabilirea de chei între orice două entități în aceste condiții,
se construiește un sistem astfel:
se configurează mai multe servere de distribuire a cheilor, fiecare entitate având o cheie partajată cu unul dintre aceste servere;
-
8
se configurează chei partajate între serverele de distribuire a cheilor ce formează legături securizate între servere (graful format de serverele de distribuire a cheilor și
de legăturile securizate trebuie să fie conex).
În acest sistem, în loc să aibă toată lumea încredere într-un singur server, fiecare pereche
de entități care doresc să comunice trebuie să aibă încredere în lanțul de servere ce participă la
stabilirea cheii.
Pentru stabilirea sau certificarea cheilor trebuie să se mai țină seama de:
numărul de chei pe care trebuie să le posede o entitate pentru a putea comunica trebuie să fie cât mai mic;
intervenția manuală în stabilirea cheilor trebuie să fie minimă (cu excepția primului transport al unei chei);
cheile trebuie să poată fi schimbate periodic deoarece cheile de lungă durată pot fi atacate de adversari.
Orice protocol sigur de stabilire a cheilor are nevoie cel puțin o dată de un canal sigur
bazat pe alte mijloace decât cele criptografice. Acest canal este necesar pentru transportul
unei prime chei criptografice, utilizabilă pentru transportul sigur al altor chei. Acest canal
sigur implică întotdeauna intervenția omului, și poate fi reprezentat de: transportul pe un
suport amovibil (dischetă, CD, DVD, memorie flash) sau printr-o legătură ad-hoc securizată
(cablu direct); citirea unei informații de pe sistemul sursă și introducecea acesteia pe sistemul
destinație; inventarea unei parole și introducerea acesteia pe ambele sisteme.
Metoda citirii unei informații de pe sistemul sursă permite transportul unei cantități mici
de informație, totodată fiind greu de aplicat pentru informații secrete, deoarece informația este
afișată pe ecranul sistemului sursă și ca urmare este vizibilă persoanelor din apropiere. Pentru
scrierea informației într-o formă ușor de reținut se poate face apel la diverse "artificii" cum ar
fi împărțirea textului pe grupuri de 4 sau 8 caractere sau, transformarea, în cazul șirului de
biți, într-un șir de cuvinte dintr-un dicționar standard sau într-un șir de silabe ce alcătuiesc
cuvinte, probabil fără sens, dar pronuntăbile.
Pentru metoda introducerii unei parole pe ambele sisteme trebuie avut în vedere ca
parola să fie trecută printr-un "concentrator de entropie" (ex. o funcție de dispersie) înainte de
a fi utilizată ca și cheie și să fie suficient de lungă (și de aleator aleasă) ca să furnizeze efectiv
biții de entropie necesari. O frază în limbaj natural, utilizată pentru derivarea unei chei de 128
biți, trebuie să aibă cam 85 litere (în jur de 20 de cuvinte). Pentru parole, trebuie acordată
atenție tentativelor de spargere, o metodă de protecție fiind blocarea accesului în cazul
încercărilor eșuate în perioade scurte de timp. Ca terminologie, distingem tentative de
spargere off-line, în care adversarul poate verifica dacă o parolă este corectă utilizând doar
echipamentele proprii, și tentative de spargere on-line, în care adversarul contactează serverul
atacat, încercând să deschidă o conexiune cu parola supusă verificării.
Odată stabilite, cheile trebuie autentificate (certificate). Autentificarea este asigurată dacă
cheile au fost stabilite printr-un terț de încredere, însă acest lucru se poate realiza pentru un
număr mic de chei. Ca soluție aplicabilă în rețele mari s-a găsit utilizarea certificatelor. Un
certificat este un ansamblu cuprinzând o cheie publică, un nume de entitate și o semnătură a
-
9
unui terț pe ansamblul celor două. Terțul semnatar se numește autoritate de certificare. Prin
semnătură, autoritatea de certificare atestă că cheia publică din certificat aparține entității al
cărei nume figurează în certificat. Utilizarea certificatelor se face astfel. Dacă nu are cheia publică a lui , dar are cheia publică a lui dintr-o sursă sigură sau are un certificat pentru semnat de , dintr-o sursă nesigură dsau are încredere în că a verificat corect identitatea lui B înainte de a-i semna certificatul, atunci poate verifica semnătura lui pe certificatul lui și, dacă este corectă, poate prelua cheia lui de pe certificat.
Certificatele au durata de valabilitate limitată, data creerii și data expirării fiind înscrise în
certificat și semnate de autoritatea de certificare. O entitate a cărui certificat se apropie de
expirare va crea o nouă pereche de chei și va solicita autorității de certificare eliberarea unui
nou certificat pentru noua cheie publică. După expirare, un certificat nu mai este recunoscut
de nimeni ca valid și nu mai este folosit. Pe lângă expirare, un certificat mai poate fi eliminat
datorită revocării. Pe servere accesibile public, se pot ține certificate de revocare ale
certificatelor ale căror chei secrete se consideră compromise. Un certificat de revocare al unui
certificat este un ansamblu cuprinzând datele de identificare ale certificatului revocat și
semnătura autorității de certificare a certificatului revocat asupra acelor date de identificare.
Publicarea unui certificat de revocare pentru un certificat anunță invalidării certificatului
original. O entitate care utilizează un certificat va verifica înainte, de fiecare utilizare, dacă nu
există un certificat de revocare al certificatului respectiv. Un certificat de revocare poate fi
produs doar de către autoritatea de certificare emitentă sau de posesorul certificatului.
Un rol important în protecția împotriva atacurilor criptografice îl are autentificarea
utilizatorilor. Pentru autentificare o importanță deosebită o are păstrarea parolelor. Pentru
păstrarea parolelor o soluție este ținerea unei baze de date cu corespondentă nume, parolă.
Această soluție (stocarea parolelor în clar) are un dezavantaj: un adversar care reușește să
spargă sistemul sau un administrator indiscret poate obține direct parolele tuturor utilizatorilor
ceea ce poate fi periculos dacă utilizatorii folosesc aceleași parole și în alte locuri. O metodă
de protecție o constituie criptarea parolelor, mai exact transformarea parolei printr-o dispersie
criptografică rezistentă la preimagine, în baza de date fiind stocată valoarea transformata a parolei . La conectarea unui utilizator, sistemul cere parola utilizatorului și verifică, pentru parola introdusă , dacă . Deoarece este rezistentă la preimagine, probabilitatea ca un adversar, care nu cunoaște parola , să găsească o parolă satisfăcând este neglijabil de mică. Pentru împiedicarea creării unui dicționar de dispersii (memorarea dispersiilor pentru o mulțme de parole), la inițializarea parolei, sistemul
generează un număr aleator și scrie în fișierul de parole perechea unde . Verificarea parolei dată de utilizator se face testând dacă . Pentru crearea unui dicționar ar fi nevoie de un număr de dispersii egal cu produsul dintre numărul de parole
de încercat și numărul de valori posibile pentru , ceea ce îngreunează foarte mult munca unui adversar.
Indiferent de mecanismul folosit la stocarea parolelor, un adversar ce a spart un sistem,
sau un administrator indiscret, va putea întotdeauna să obțină parola cu care se conectează un
utilizator la acel sistem (ex.: adversarul poate înlocui programul obișnuit de login cu un
program care scrie undeva parola în clar).
Autentificarea se poate face și cu parole de unică folosință (One Time Password), o
asemenea parolă fiind acceptată de sistem ca fiind parolă validă cel mult o dată. Una din
aplicațiile parolelor de unică folosință este conectarea la un sistem, în prezentă unui adversar
pasiv, fără a recurge la criptare. Aplicabilitatea acestora este foarte limitată, deoarece
-
10
comunicația nu este criptată (nu se poate aplica dacă datele transmise trebuie să rămână
secrete).
Intrebări de verificare
Cum pot fi clasificate cheile folosite de partenerii de comunicaţie?
Ce reprezintă „atacul omului din mijloc”?
Cum se realizează „autentificarea utilizatorilor”?
Protocoale de securitate
Un concept de bază, care apare în mecanismele IP pentru autentificare și
confidențialitate, este asociația de securitate (SA - Security Association). SA este o relație
unidirecțională între o sursă și o destinație care asigură servicii de securitate traficului efectuat
pe baza ei, putând fi privită ca un ansamblu de date de tip nume de algoritm - cheie, care
reprezintă capabilitățile criptografice comune entităților participante la asociere, adică grupuri
de utilizatori autorizați să folosească o anumită rețea, denumită rețea virtuală privată (VPN -
Virtual Private Network). Protocoalele de securitate pentru rețelele de comunicații sunt
definite pentru a stabili modul în care sunt oferite serviciile de securitate. Aceste protocoale
de securizare a comunicațiilor pot lucra pe diferite nivele ale modelului OSI, între acestea
regăsind:
pe nivelul legăturii de date: protocoale de tunelare, precum L2TP (Layer2 Tunnelling Protocol) care, deși definit pe acest nivel, operează de fapt pe nivelul OSI 5, de
sesiune;
pe nivelul de rețea: IPsec (IP Security) oferă servicii de autentificare, de control al accesului, de confidențialitate și integritate a datelor;
pe nivelul de transport: TLS (Transport Layer Security), SSL (Secure Socket Layer), protocolul Handshake de autentificare mutuală a clienților și serverelor și negocierea
algoritmilor de criptare înaintea desfăsurării propriu-zise a transmisiei datelor;
pe nivelul de aplicație: SSH (Secure Shell), PGP (Pretty Good Privacy), S/MIME (Secure Multipurpose Internet Mail Extension).
De cele mai multe ori, se definesc suite de protocoale de securitate cum ar fi: IPSec,
KERBEROS, SESAME și altele. Implementarea suitelor de protocoale de securitate în
rețelele de comunicații se face cu mai multe servere de rețea dedicate diferitelor servicii, cum
ar fi: servere de autentificare, servere de certificare, servere de distribuție a cheilor de criptare,
servere de gestiune a cheilor de criptare etc.
Protocolul IPSec (Internet Protocol Security)
IPSec este o suită de protocoale pentru securizarea comunicațiilor peste stiva TCP/IP.
Această suită se bazează pe folosirea funcțiilor matematice și a algoritmilor de criptare și
autentificare pentru a asigura confidențialitatea, integritatea și non-repudierea informațiilor
din fiecare pachet IP transmis pe rețea. IPSec este la ora actuală una dintre cele mai folosite
-
11
metode de securizare a transmisiei pe Internet, alături de SSL (Secure Sockets Layer) și TLS
(Transport Layer Security). Spre deosebire de acestea, protocoalele IPSec se regăsesc la
nivelul 3 al stivei TCP/IP și la nivelul 3 al stivei ISO-OSI, ceea ce face posibilă securizarea
tuturor aplicațiilor care folosesc stiva TCP/IP. IPSec are o arhitectură de tip end-to-end,
compatibilă atât cu stiva IPv4, cât și cu IPv6, unde integrarea funcțiilor de securizare este
nativă, încă de la proiectarea stivei pe 128 de octeți. Un router sau un server pe care sunt
activate protocoalele de securitate IPsec se numește poartă de securitate (securițy gateway)
sau "zid" de protecție (firewall). În general, asigurarea securității unei transmisii se realizează
la ambele capete ale căii de comunicație, cu două echipamente care folosesc IPSec lucrând în
pereche (IPsec peers). Prin suita IPSec pot fi securizate comunicațiile între două sau mai
multe calculatoare independente, între două sau mai multe subrețele aflate fiecare în spatele
unui gateway care se ocupă de folosirea funcțiilor criptografice pentru fiecare subrețea aflată
în administrarea sa, precum și între un calculator independent și o subrețea aflată în spatele
unui gateway. IPSec se bazează pe proprietățile criptografice ale unor modele precum Diffie-
Hellman, RSA sau DSA și a algoritmilor de criptare și autentificare, cum sunt DES, 3 DES,
AES, MD5, SHA1.
IPsec oferă următoarele servicii de securitate pe nivelul IP al rețelelor TCP/IP:
integritatea conexiunii - asigură faptul că în procesul de comunicație nu intervin entități neautorizate care să modifice datele sau să genereze mesaje false în rețea;
autentificarea sursei de date - permite identificarea sursei și asigurarea autenticității mesajelor;
criptarea datelor - asigură confidențialitatea mesajelor transmise și imposibilitatea preluării neautorizate a informațiilor;
protecția la atacuri în rețea - detectează pachetele repetitive, replici ale aceluiași pachet, care se transmit la infinit în rețea și pot produce blocaje sau saturarea rețelei
(flooding).
În cadrul IPsec autentificarea sursei se face pe baza protocolului AH (Authentication
Header) din suita IPsec (RFC 2401, RFC 2402). Acest protocol asigură autenticitatea
mesajelor și a tuturor informațiilor adiționale incluse în pachet precum și integritatea
pachetului de date, prin aplicarea funcților hash. AH împiedică modificarea ilegală a
pachetelor, multiplicarea sau întârzierea datelor (antireplay security). Pe lângă protocolul AH,
există și protocolul ESP (Encapsulating Security Payload) care asigură autenticitatea,
integritatea și confidențialitatea pachetelor de date. Spre deosebire de protocolul AH, antetul
pachetului IP nu este protejat de ESP, acesta oferind servicii de securitate numai protocoalelor
de pe nivelele superioare Confidențialitatea datelor este asigurată prin criptare. Protocoalele
AH și ESP pot fi implementate prin diverși algoritmi software și se pot aplica fie individual,
fie ambele simultan, în funcție de gradul de securitate impus pachetelor IP (RFC 2403, RFC
2404). Stabilirea protocoalelor poate avea loc static sau dinamic. Denumirea oficială a
stabilirii statice este manual keying. Metoda dinamică de stabilire a asocierilor de algoritmi și
chei este numită ISAKMP (Internet Security Association and Key Management Protocol),
descrisă în RFC 2408. Pe baza mecanismului ISAKMP/TKE se generează și se transmit între
părți cheile de criptare utilizate de SA în diferite sesiuni, memorate într-o bază de date proprie
ISAKMP ca atribute ale SA. În rețelele TCP/IP, se utilizeazează diverși algoritmi de criptare,
uzuali fiind cei cu cheie publică (RSA, Diffie-Hellman, DES, 3DES etc). Există două versiuni
ale ISAKMP, IKEv1 și IKEv2 - Internet Key Exchange.
În funcție de tipul de încapsulare al traficului supus IPSec, suita poate realiza securizarea
prin încapsulare de tip tunel sau de tip transport.
http://tools.ietf.org/html/rfc2408
-
12
Încapsularea de tip tunel (IP tunneling) apare în momentul în care entitățile participante la IPSec sunt de tip gateway; ele au în administrare una sau mai multe
subrețele pentru traficul cărora realizează operații criptografice. Pachetul încapsulat
IPSec va avea un set de adrese IP exterioare - adresele IP ale entităților gateway și un
set de adrese IP interioare sau protejate - adresele IP, publice sau private, ale
subrețelelor din spatele acestor gateway-uri. Antetul extern specifică perechea de
entități între care se creează tunelul IP și se aplică măsurile de securitate pe baza
IPsec. Antetul intern precizează destinația finală a pachetului pentru realizarea rutării.
ESP protejează numai pachetul transmis prin tunelul IP, în timp ce AH asigură și
securitatea antetului exterior atașat. De regulă acest mod de operare se utilizează între
porți de securitate care execută împachetarea și despachetarea mesajelor (gateway-to-
gateway).
Încapsularea de tip transport(transport mode) apare în momentul în care entitățile participante la IPSec sunt calculatoare independente, care au instalat un soft
specializat IPSec, realizînd operații criptografice pentru propriul trafic. Pachetul
încapsulat va avea un singur set de adrese IP, publice, ale acestor calculatoare.
Protocolul de securitate intervine în pachetul IP și adaugă un antet de securitate
imediat după antetul IP (cu sau fără opțiuni exprimate) dar antetul IP inițial (header-
ul) nu se modifică, doar datele transmise sunt securizate (criptate și/sau autentificate).
Prin folosirea protocolului AH, adresele IP ale sursei, respectiv destinației, nu pot fi
modificate pe parcurs deoarece acest lucru ar duce la modificarea valorii hash. ESP
oferă protecție minimă protocoalelor de nivel superior, în timp ce AH securizează
total pachetul, inclusiv antetul IP. Acest mod de operare se utilizează pentru schimbul
de pachete între calculatoarele-gazdă (host-to-host).
Dacă la unul din capetele canalului de comunicație definit de SA, se găseste un
echipament de securitate (security gateway; firewall), atunci este obligatoriu ca acel SA să
lucreze în modul de tunelare pentru a evita problemele create de existența căilor multiple de
rutare precum și pe cele datorate fragmentării pachetelor.
Configurarea echipamentelor dintr-o rețea în vederea aplicării IPsec se realizează de către
o persoană cu drepturi depline de stabilire a securității rețelei (security officer), în trei etape:
1. crearea grupurilor de securitate (SA) și stabilirea drepturilor și atribuțiilor acestora;
2. configurarea legăturilor dintre SA-uri și stabilirea ierarhiilor de priorități, folosind ISAKMP/IKE (RFC 2408, RFC 2409);
3. stabilirea modalităților de clasificare a pachetelor IP și de acțiune asupra lor (permite sau interzice accesul în rețea, aplică procedurile de securitate conform
IPsec).
Aceste configurații referitoare la IPsec sunt stocate în bazele de date pentru securitatea
rețelei (SPD - Security Policy Database), la care are acces doar administratorul de rețea.
Regulile de securitate aplicate într-o rețea folosind IPsec stabilesc trei moduri posibile de
acțiune asupr pachetelor IP:
1. se aplică pachetului, serviciile de securitate conform IPsec;
2. se interzice accesul pachetului în rețea (deny);
-
13
3. se acordă permisiunea de acces în rețea, fără aplicarea măsurilor de securitate IP (bypass IPsec).
Modul de acțiune asupra unui pachet IP se stabilește pe baza antetelor conținute de
acesta, prin operația de clasificare a pachetelor, în funcție de diverși factori de selecție, cum ar
fi: adresa IP a sursei, adresa IP a destinației, portul-sursă, portul-destinație, protocolul de
transport, numele utilizatorului sau al sistemului, gradul de prioritate a informațiilor conținute
în pachet.
IPsec oferă posibilitatea unei comunicări sigure în rețelele de arie largă (WAN), în
aplicații precum:
Definirea rețelelor virtuale private (VPN – Virtual Private Network), în care uzual IPsec este configurat să folosească protocolul ESP în modul tunel pentru furnizarea
confidențialității. Pentru o organizație cu mai multe rețele locale, aflate în diferite
locații, traficul intern rețelelor locale nu este securizat în timp ce traficul între acestea
utilizează IPsec pentru securizare. IPsec este activat în echipamentele de acces la
rețeaua de arie largă, de exemplu în gateway, router sau firewall. Operațiile de
criptare/decriptare și de autentificare executate de IPsec sunt transparente pentru
stațiile de lucru și serverele din rețelele locale.
Accesul securizat de la distanță prin rețeua publică de Internet la un sistem în care este implementat protocolul IPsec. Se poate apela la un furnizor de Internet (ISP -
Internet Service Provider) pentru a obține accesul securizat la o rețea privată.
Îmbunătățirea securității aplicațiilor distribuite care au o serie de mecanisme de securitate incluse. Principala caracteristică a IPsec care îi permite să securizeze o
gamă atât de largă de aplicații distribuite (e-mail, transfer de fișiere, acces Web etc.),
este faptul că pentru întregul trafic IP se pot utiliza mecanismele de criptare si/sau
autentificare.
Pentru o asociație de securitate, ca și identificatori, avem un număr aleator denumit
identificator de securitate (SPI - Security Parameter Index), o adresă IP de destinație și un
protocol de securitate (AH sau ESP).
Identificatorul de securitate constă într-un sir de biți cu semnificație locală, inclus în antetele AH și ESP pentru a permite destinației să selecteze SA-ul pentru procesarea
pachetului recepționat;
Adresa IP de destinație este adresa nodului de destinație al asociației de securitate, care poate fi un calculator-gazdă (host) sau un echipament de comunicație al rețelei
(router, firewall, access point);
Identificatorul protocolului de securitate indică pentru care protocol, AH sau ESP, lucrează SA. Dacă este necesară utilizarea ambelor protocoale de securitate în
Internet (AH si ESP), atunci se creează și se configurează legăturile dintre două sau
mai multe asociații de securitate.
Pentru ca în momentul securizării traficului fiecare entitate să cunoască parametrii de
securizare pentru fiecare tip de trafic este folosit identificatorul SPI - Security Parameter
Index, un index pe baza de date SAD. Folosind acest index și valoarea adresei IP din
destinația pachetului ce urmează a fi supus procesului de criptare sau autentificare, fiecare
entitate IPSec știe exact ce transformare trebuie realizată pe fiecare pachet IP pentru ca acesta
să poată fi decriptat la receptor și corect interpretat.
-
14
Procesul de decriptare este asemănător în momentul recepției unui pachet astfel securizat.
În cazul în care sunt mai mult de doi participanți la asocierea de securitate, în cazul traficului
de tip multicast, asocierea de securitate este furnizată pentru întregul grup și este prezentă pe
fiecare sistem participant. Pot exista, deasemenea, mai multe asocieri de securitate pentru un
același grup de entități, fiecare cu diverse nivele de securitate în interiorul grupului.
În funcție de al tipului entității participante la IPSec putem avea modelul de trafic:
Site-to-Site sau LAN-to-LAN, în cazul în care entitățile sunt două gateway-uri de securitate care realizează operații criptografice pentru subrețele protejate aflate în
administrarea lor.
Remote-Access sau Dial-Up VPN, în cazul în care entitățile sunt un gateway de securitate care are în administrare o subrețea și un calculator independent care dorește
să comunice cu acea subrețea.
Această manieră de clasificare se pretează în exclusivitate tipului de încapsulare tunel,
neavând sens pentru tipul transport, în principal datorită faptului că un pachet trimis pe rețea
are două seturi de adrese IP: un set "extern", reprezentat de adresele IP are calculatorului și al
gateway-ului căruia se adresează, și un set de adrese IP "intern", reprezentat de adresa IP a
unei mașini din interiorul rețelei și a unei adrese IP noi a calculatorului, obținută de la acel
gateway pentru a avea adresabilitate de nivel IP în interiorul rețelei la care acest calculator se
conectează. Procedeul prin care un calculator obține, în momentul negocierii IPSec, o adresă
de la gateway pentru a avea acces într-o rețea internă este numit mode-config în scenariile de
tip IKEv1 sau configurare remote în cele de IKEv2.
În momentul negocierii de IKE a parametrilor asocierii de securitate se realizează și faza
de autentificare mutuală sau unilaterală a entităților, existând mai multe modalități de a realiza
această autentificare:
PSK - Pre-Shared Key : pentru autentificare, fiecare entitate are pre-configurată o cheie secretă, o parolă. În momentul realizării negocierii IKE, entitățile trimit această
cheie pe rețea, spre a fi verificată de entitățile omoloage și verifică, la rândul lor, că o
anumită entitate-pereche are o anumită cheie secretă.
PKI - Public Key Infrastructure: pentru autentificare este folosit un sistem de tip PKI. Fiecare entitate are un certificat digital semnat de o autoritate de certificare publică
sau internă companiei, dar de încredere pentru toate entitățile participante în IPSec. În
faza de autentificare din IKE, fiecare entitate își trimite certificatul digital către
omologi spre a fi verificat și verifică la rândul ei validitatea acelui certificat digital.
EAP - Extensible Authentication Protocol: la rândul său un framework, de data aceasta de autentificare, EAP nu realizează autentificare per se, ci oferă o schemă de
mesaje de autentificare ce folosește metode specifice, cum sunt MD5, GTC, TLS,
SIM, AKA. În faza de autentificare, EAP este folosit ca extensie a protocolului
IKEv2, acest framework nefiind suportat în IKEv1.
Cele mai multe implementări de IPSec încearcă să realizeze pe cât posibil optimizarea
utilizării resurselor computaționale disponibile. Un exemplu în acest sens este închiderea
tunelului IPSec în cazul în care nu se mai trimit date pentru o anumită durată de timp, sau
dacă lărgimea de bandă ocupată pentru o anumită conexiune este nulă. Dacă aceasta este
configurația implicită, pentru anumite conexiuni se poate dori suprascrierea ei și menținerea
acelei conexiuni. Una dintre posibilitățile puse la dispoziție de standard se numește DPD -
-
15
Dead Peer Detection. Acesta este un mecanism de timp keepalive care presupune trimiterea
unui pachet între capetele conexiunii, la un interval stabilit.
Cu toate "măsurile de siguranță" luate în cazul IPSec, au fost raportate și unele
vulnerabilităţi în anumite configuraţii ale acestuia, acestea putând fi exploatate de atacatori
pentru a sustrage informaţii confidenţiale. Aceste atacuri sunt posibile când IPSec foloseşte
ESP (Encapsulating Security Payload) în modul de funcţionare tunnel cu opţiunea
confidentiality only, sau opţiunea integrity protection oferită de modulul AH sau de un
protocol de nivel mai ridicat. Dacă un atacator poate intercepta şi modifica comunicaţiile
IPSec și ICMP între două servere de tip security gateway, exploatând această vulnerabilitate
poate lansa atacuri de tip Destination Address Rewriting, IP Options modification şi Protocol
Field modification, astfel făcând posibilă sustragerea de informaţii din datele transferate
folosind IPsec. Ca și soluţie este recomandat să se configureze ESP astfel încât să folosească
atât opţiunea confidentiality, cât şi integrity protection și să se folosească protocolul AH
alături de ESP pentru a oferi protecţia integrităţii.
Protocolul Kerberos
Protocolul Kerberos1 a fost proiectat la Massachusetts Institute of Technology (MIT), în
jurul anului 1984 pentru a proteja serviciile de reţea oferite de proiectul Athena. Scopul
protocolului Kerberos era să extindă noţiunea de autentificare, autorizare şi contabilizare a
mediului MIT.
Kerberos a fost proiectat pe baza modelului client-server și asigură autentificarea
mutuală, adică atât utilizatorul cât și serverul se autentifică unul față de celălalt. În
terminologia Kerberos, un domeniu administrativ se numeşte realm. Se presupune că orice
companie sau organizaţie care doreşte să ruleze Kerberos poate crea un realm identificat unic
printr-un nume. Teoretic, Kerberos poate suporta mai bine de 100.000 de utilizatori. Kerberos
se bazează pe modelul client / server. Protocolul în sine constă dintr-un schimb de mesaje
între un client şi o serie de servere, fiecare cu o altă misiune.
Utilizatorii, clienţii şi serviciile de reţea instanţiate pe un host în particular se consideră în
mod tipic parteneri. Fiecare partener este identificat în mod unic de un identificator de
partener. Un identificator de partener are în componenţă trei câmpuri, fiecare fiind un şir
terminat cu null de până la 40 de caractere. Aceste trei câmpuri sunt:
Numele partenerului, NAME
Numele instanţei, INSTANCE
Numele realm-ului, REALM
Mesajele protocolului Kerberos sunt protejate împotriva atacurilor de ascultare
(eavesdropping) și de reluare a mesajelor (replay), scopul sistemului Kerberos fiind acela de a
permite unui client ce rulează în numele unui utilizator anume să se identifice unui serviciu
sau unui server de aplicaţii corespunzător, fără a se necesita trimiterea unor date secrete care
1 În mitologia greacă, cerberul (Kerberos) este numele unui câine de pază cu trei capete al lui Hades, a cărui misiune era să păzească intrarea în lumea de dedesubt.
-
16
ulterior să poată fi folosite de un atacator la impersonarea utilizatorului. Pentru a realiza acest
lucru, modelul Kerberos necesită existenţa unui terţ de încredere care serveşte ca centru de
distribuţie a cheilor (KDC) în realm-ul Kerberos. Kerberos utilizează tehnici simetrice de
criptare și oferă un sistem de mesaje criptate numite tichete, care asigură în mod securizat
încrederea reciprocă dintre două entități din rețea. Utilizând Kerberos, parolele nu mai sunt
transmise prin rețea, nici măcar criptate. În cazul în care un tichet Kerberos este interceptat
acesta rămâne protejat deoarece este criptat cu algoritmi robusti de criptare. Odată ce o
entitate-client obține un tichet către un anume server, tichetul este păstrat pe calculatorul local
până la expirare, făcând astfel din Kerberos un sistem de autentificare foarte eficient. Depinde
de implementare, dar în mod uzual un tichet Kerberos expiră după opt ore. Fiecare entitate din
rețea, fie client, fie server, deține o cheie secretă, cunoscută doar de ea și de KDC. Această
cheie constituie dovada identității unei entități. Pentru o comunicare sigură între două entități
din rețeaua publică, KDC generează o cheie a sesiunii. Pentru implementarea protocolului
Kerberos trebuie acordată o atenție deosebită stocării parolelor fiecărui client, motiv pentru
care serverul central trebuie să fie o maşină foarte sigură. KDC menţine o bază de date cu
informaţii despre fiecare partener din cadrul sistemului. Deoarece securitatea este foarte
importantă, această informaţie este redusă la un minim posibil pentru a efectua cu succes
autentificarea. Astfel, deşi baza de date Kerberos este la nivel de utilizator, aceasta nu conţine
informaţii cum ar fi numere de telefon sau adrese, neutilizate în mod curent la autentificare, ci
următoarele:
Identificatorul partenerului
Cheia master Kp (sau parola dacă este utilizator)
Data expirării identităţii
Data ultimei modificări a înregistrării
Identitatea partenerului care a operat modificarea
Timpul maxim de viaţă a biletelor emise partenerului
Unele atribute
Unele date interne de implementare invizibile la exterior cum ar fi versiunea cheilor, versiunea cheii master sau indicatori către valori vechi ale înregistrării.
Cheia master (Kp) a fiecărui partener trebuie ţinută secretă, de aceea toate aceste chei se
codifică cu o cheie master a KDC. Pe lângă o protecţie sporită, această metodă permite
distribuirea bazei de date între servere fără riscul de a fi capturată de un potenţial atacator.
Cheia master KDC nu se păstrează în aceeaşi bază de date, ci se operează separat.
Un centru de distribuție a cheilor are două părți:
un server de autentificare (Authentication Server - AS);
un server de alocare a tichetelor (Ticket Granting Server - TGS).
AS şi TGS sunt componente separate logic dar pot fi procese care rulează pe aceeaşi
maşină. Aceasta trebuie să fie protejată cu grijă şi securizată fizic, deoarece un intrus ar putea
compromite uşor întreg sistemul de la acest nivel. Un tichet este un certificat emis de KDC şi
criptat cu cheia master a serverului. Printre altele, un tichet conţine:
Cheia de sesiune care va fi utilizată pentru autentificarea între client şi server
Numele partenerului către care cheia de sesiune a fost emisă
Un timp de expirare după care cheia de sesiune nu mai este validă
-
17
Pentru înțelegerea principiul de funcționare a protocolului, explicăm noțiunile:
Serverul TGS (Ticket Granting Server) oferă tichete de tip sesiune pentru accesarea altor resurse. De obicei, TGS rulează în KDC;
Tichetul TGT (Ticket Granting Ticket) reprezintă un jeton de validare a unui tichet Kerberos care atestă faptul că o entitate a fost deja autentificată și ne asigură că
utilizatorii nu mai trebuie să reintroducă parola după un login inițial, până la expirarea
tichetului;
Tichetul de sesiune ST (Session Ticket) reprezintă un jeton de sesiune care permite accesul la resurse protejate. Pentru accesarea oricărei aplicații care utilizează
Kerberos este necesar un tichet de sesiune valid.
Pașii protocolului Kerberos sunt (a se vedea figura de mai sus):
pasul 1
Utilizatorul unui sistem client, utilizând un username și o parolă sau un smart card, se
autentifică față de server-ul de autentificare (AS din KDC). Clientul de login furnizează AS
numele, iar AS caută intrarea corespunzătoare utilizatorului în baza de date KDC.
pasul 2
Cu parola cerută de client utilizatorului se va cripta TGT. Dacă cheia derivată din parola
utilizatorului poate decripta cu succes TGT, acestuia i se permite accesul. Pe partea de client,
TGT-ul este memorat pentru folosire ulterioară şi anume pentru a obţine bilete pentru
autentificarea în servicii de reţea particulare. Scopul principal al TGT este deci să faciliteze o
singură autentificare pentru utilizatori. Parola este astfel cerută o singură dată, şi nu de fiecare
dată când se cere accesul la un serviciu.
pasul 3
Biletele sunt eliberate de TGS-ul specificat în TGT-ul primit de utilizator. Pentru a obţine
un bilet, clientul trimite o cerere către TGS.
pasul 4
Dacă T
GS consideră atât biletul cât şi autentificatorul valid, biletul este returnat.
1 2 3 4
5
6
-
18
Mesajul include numele serviciului cerut, TGT-ul şi autentificatorul. Acesta din urmă
este o informaţie ce poate proba că a fost generată recent utilizând cheia de sesiune de către
client şi server împreună. În particular, autentificatorul conţine numele utilizatorului, adresa
de reţea a clientului şi timpul curent, fiind criptat cu cheia de sesiune returnată în TGT.
Autentificatorul descurajează atacurile replay.
pasul 5
Clientul creează un alt autentificator şi îl trimite împreună cu biletul de serviciu
serverului.
pasul 6
Dacă se cere autentificare reciprocă, serverul returnează un autentificator.
Aşa cum a fost descris până acum, modelul Kerberos nu oferă decât serviciul de
autentificare. În sine, el nu oferă informaţii despre autorizarea clientului în a folosi anumite
servicii de reţea. În general, sunt trei posibilităţi pentru atingerea problemei autorizării, şi
anume:
baza de date Kerberos ar putea conţine informaţii de autorizare pentru fiecare serviciu şi să emită bilete doar utilizatorilor autorizaţi.
un serviciu dedicat poate menţine informaţiile de autorizare prin liste de acces pentru fiecare serviciu şi permiterea clientului să obţină certificate sigilate de apartenenţă la
listă. În acest caz clientul ar prezenta serviciului certificarea în locul biletului
Kerberos.
fiecare serviciu poate menţine propria informaţie de autorizare cu ajutorul opţional al unui serviciu care stochează aceste liste de acces şi oferă certificări de apartenenţă la
listă.
Modelul Kerberos se bazează pe faptul că fiecare serviciu cunoaşte cu exactitate cine sunt
utilizatorii săi şi ce formă de autorizare este potrivită pentru aceştia. În consecinţă Kerberos
foloseşte cea de-a treia metodă. Pentru simplificarea implementării celei de a treia metode,
Kerberos foloseşte modelul de autorizare bazat pe liste de control al accesului. Orice serviciu
care consideră că i se potriveşte acest tip de autorizare poate încorpora o bibliotecă cu funcţii
adecvate. Utilizarea acestui model presupune că serviciul verifică dacă o identitate verificată
aparţine unei liste de acces.
Primele trei versiuni ale Kerberos au fost folosite doar în cadrul MIT, în prezent
nemaifiind folosite. Prima versiune făcută publica a fost Kerberos V4, versiune ce a cunoscut
o răspândire importantă în afara MIT. Deoarece unele medii necesitau funcţionalităţi
neacoperite de Kerberos V4, iar altele aveau o structură diferită de modelul MIT, în 1989 a
început lucrul la Kerberos V5. În septembrie 1993, Kerberos V5 a fost specificat ca standard
Internet în RFC 1510 [KOHL93]. MIT a dezvoltat şi testat Kerberos V5 pe Ultrix, SunOS,
Solaris şi Linux, fiind portat şi pe alte sisteme de către terţi. Deşi similare ca şi concept,
Kerberos V4 şi V5 sunt substanţial diferite şi chiar sunt în competiţie pentru dominaţia pe
piaţă. Pe scurt, Kerberos V4 are o bază de instalare mai mare, este mai simplu şi are o
performanţă mai mare decât V5, însă lucrează doar cu adrese IP. Kerberos V5 pe de altă parte,
are o bază de instalare mai redusă, este mai complicat şi implicit mai puţin eficient, dar
prezintă mai multă funcţionalitate decât V4.
-
19
În ciuda faptului că este disponibil codul sursă pentru Kerberos V4 şi V5, MIT nu-l
susţine oficial şi nu oferă suport. Unele companii însă oferă contra cost versiuni comerciale de
implementări Kerberos. Informaţii despre versiunile freeware şi comerciale se găsesc în
Kerberos FAQ publicat periodic în grupul de ştiri comp.protocols.kerberos.
Protocoalele criptografice implementate de Kerberos
Protocolul Needham-Schroeder
Kerberos se bazează pe protocoalele de autentificare şi distribuţie a cheilor propuse de
Needham şi Schroeder [NEED78, NEED87]. Protocolul presupune existenţa unui terţ de
încredere care reprezintă un server de autentificare (AS). Daca AS are cheile fiecărui
partener, doi parteneri arbitrari A şi B pot folosi AS pentru a se autentifica reciproc şi să
primească o cheie de sesiune Kab. Protocolul Needham-Schroeder se poate formaliza după
cum urmează:
pas1
A AS : A, B, N
Începe comunicaţia în clar de la A la AS transmițându-se identitatea pretinsă, identitatea
corespondentului dorit B, precum şi o valoare curentă N. La recepţionarea mesajului, AS
caută cheile secrete ale A şi B (Ka şi Kb) şi alege aleator o cheie de sesiune Kab.
pas 2
AS A : {N, B, Kab, {Kab, A} Kb} Ka
AS returnează lui A {N, B, Kab, {Kab, A} Kb} Ka, mesaj codificat cu cheia lui A (numai A
poate decodifica mesajul). A poate verifica prezenţa valorii N pentru a determina dacă
mesajul provine într-adevăr de la AS.
pas 3
A B : {Kab, A} Kb
A memorează valoarea Kab şi trimite lui B valoarea {Kab, A} Kb. Această valoare este
codificată cu cheia lui B (numai acesta poate decodifica mesajul şi extrage componentele, în
speţă cheia Kab). Prin această modalitate B poate afla identitatea corespondentului A,
autentificat de AS. În acest moment, A ştie că orice comunicare codificată cu Kab provine de
la B şi orice trimite A codificat cu Kab poate fi înţeles numai de B.
pas 4
B A : {Nb} Kab
B alege un număr Nb aleator și il codifică cu cheia Kab (pentru protecţia împotriva
atacurilor replay)
pas 5
A B : {Nb – 1} Kab
B cere lui A să răspundă cu numărul decrementat şi recodificat cu cheia Kab. Dacă
răspunsul primit de B este satisfăcător, schimbul ulterior de mesaje poate continua.
-
20
Numărul pașilor se poate reduce la 3 prin menţinerea de către A în cazul partenerilor
obişnuiţi de comunicare a perechilor de forma B : Kab, {Kab, A} Kb , astfel eliminându-se paşii
1 şi 2.
O vulnerabilitate majoră a ambelor versiuni ale protocolului Needham-Schroeder constă
în posibilitatea ca un terţ C care este capabil de a urmări dialogul să lanseze un atac off-line
asupra Kab. Daca C poate determina o cheie de sesiune K’ab folosită în trecut, C poate
impersona pe A. De fapt, C poate folosi biletul corespunzător împreună cu valoarea codificată
cu K’ab in pasul 3. B provoacă pe A în pasul 4 şi deoarece C cunoaşte pe K’ab, poate răspunde
corect în pasul 5. Slăbiciunea subtilă din spatele acestui protocol este că mesajul din pasul 3
nu conţine nici o informaţie pentru B pentru a-i verifica prospeţimea. De fapt acest lucru este
cunoscut doar de AS şi A. Ca măsură reparatorie, se poate înlocui valoarea cu amprente de
timp.
Protocolul Kerberos V4
Protocolul utilizat în Kerberos V4 se bazează în parte pe protocolul Needham-Schroeder
cu unele modificări menite să-l adapteze la mediul de reţea pentru care a fost proiectat iniţial.
Printre aceste schimbări, amintim:
utilizarea amprentelor de timp
adăugarea unui serviciu de oferire a tichetelor pentru a permite autentificarea suplimentară fără a fi necesar ca utilizatorul să-şi reintroducă parola
o abordare diferită a autentificării inter-domenii
Paşii protocolului Kerberos V4 se pot formaliza după cum urmează:
C AS : U, TGS, T, L
AS C : {K, N, Tc,tgs} Ku
C TGS : S, N, Tc,tgs, Ac,tgs
TGS C : {Tc,s, K’} K
C S : Tc,s, Ac,s
S C : {T + 1} K’
În această descriere, termenul Tc,tgs = {U, C, TGS, T, L, K} KTGS se utilizează pentru a ne
referi la un TGT care a emis de AS pentru a fi folosit de un client C pentru a se autentifica cu
un TGS şi a cere un bilet corespunzător. În mod similar, termenul Tc,s ={U, C, S, T’, L’, K’}
Ks desemnează un bilet emis de TGS şi utilizat de C pentru a se autentifica cu un server S. În
ambele expresii, T şi T’ se referă la amprente de timp, iar L şi L’ desemnează timpul de viaţă
al acestora. O amprentă de timp reprezintă numărul de secunde de la ora 00:00:00 GMT, 1
ianuarie 1970 şi se codifică pe 4 octeţi. Aceasta este o reprezentare comună a timpului într-un
sistem UNIX. În mod similar, timpul de viaţă al unui tichet se specifică în unităţi de cinci
minute şi se codifică într-un singur octet, drept urmare timpul maxim de viaţă care se poate
exprima în Kerberos V4 este de puţin peste 21 de ore. În plus faţă de acestea, termenii Ac,tgs =
{C, T} K şi Ac,s = {C, T’}K’ desemnează autentificatorii pentru Tc,tgs şi Tc,s.
Cei şase paşi ai protocolului se pot grupa în trei schimburi:
schimbul AS între client şi AS (paşii 1 şi 2)
-
21
schimbul TGS între client şi TGS (paşii 3 şi 4)
schimbul AP între client şi serverul de aplicaţii (paşii 5 şi 6)
Schimbul AS, prezentat pe scurt, decurge astfel:
Un client C utilizează un serviciu de nume (name service) pentru a localiza în termeni de
topologie a reţelei cel mai apropiat TGS disponibil. C trimite apoi un mesaj KRB_AS_REQ
(Kerberos authentication server request) către AS în pasul 1. Mesajul include identificatorul
de utilizator U, identificatorul TGS-ului selectat, o amprentă de timp T şi durata de viaţă
dorită pentru TGT. După primirea mesajului KRB_AS_REQ, AS caută şi extrage cheile
secrete asociate cu U şi TGS. AS selectează apoi o cheie de sesiune aleatoare K şi-i răspunde
lui C cu mesajul KRB_AS_REP (Kerberos authentication server reply) în pasul 2. Mesajul
include K, N şi Tc,tgs. În plus, mesajul este codificat cu Ku. După recepţionarea mesajului
KRB_AS_REP, C trebuie să ceară utilizatorului U parola sa. De fapt, protocolul Kerberos V4
adoptă o regulă general valabilă în securitate, aceea de a ştii parola utilizatorului un timp
minim posibil. Totuşi, aşteptarea pentru câteva secunde a mesajului KRB_AS_REP nu creşte
siguranţa în mod semnificativ, de aceea Kerberos V5 cere parola înainte ca C să trimită
mesajul KRB_AS_REP. Un alt motiv pentru care această parolă se cere înainte este că C
trebuie să dovedească faptul că ştie parola utilizatorului pentru ca AS să trimită mesajul
KRB_AS_REP, lucru care îngreunează atacul prin ghicire a parolelor. În Kerberos V4, dacă
U introduce corect parola pwdU, C poate folosi o funcţie h de dispersie cu sens unic cunoscută
pentru a calcula cheia secretă a lui U, adică KU =h(pwdU). Echipat cu această cheie, C poate
decodifica {K, N, Tc,tgs} KU şi extrage K, N, şi Tc,tgs. Dacă C are succes, acesta este în
posesia unui TGT care poate fi utilizată pentru a cere bilete de la TGS. De remarcat că într-un
TGT, timpul de viaţă se foloseşte ca o parolă de expirare a timpului. Limitarea timpului de
viaţă al TGT limitează astfel avariile produse în sistem în cazul compromiterii TGT. În
Kerberos, în general nu este posibil să se revoce un TGT odată ce a fost emis.
În schimbul TGS al protocolului Kerberos V4 formatul mesajului este aproape identic cu
cel din schimbul AS. Diferenţa constă în faptul că mesajul este codificat cu cheia de sesiune K
(cunoscută de C şi TGS) în loc de cheia utilizatorului KU. Înainte de a iniţia un schimb TGS,
C trebuie să determine în care domeniu a fost înregistrat serverul de aplicaţii pentru care se
cere un bilet. Dacă C nu are deja un TGT pentru acel domeniu, trebuie să obţină unul.
Schimbul AP este utilizat de aplicaţii de reţea pentru a autentifica un client faţă de un
server sau pentru a se autentifica reciproc. Clientul trebuie să aibă deja credenţiale pentru
server prin utilizarea schimburilor AS şi TGS.
Faţă de Kerberos V4, în Kerberos V5 au fost operate modificările:
Identificatorii părţilor: În Kerberos V5, identificatorii părţilor constau în două repere: numele domeniului (realm) şi un rest. Numele domeniului este separat pentru a
facilita implementarea uşoară a rutinelor de traversare şi a verificărilor de acces la
domeniu. Restul este o secvenţă de câte componente sunt necesare pentru numele
părţii. De remarcat că identificatorul din Kerberos V4 este similar cu un rest cu două
componente în Kerberos V5.
Utilizarea criptării: Pentru a îmbunătăţi modularitatea lui Kerberos, criptarea a fost separată în module software care pot fi schimbate sau îndepărtate la nevoie. Când se
foloseşte criptarea, textul respectiv este marcat în aşa fel încât receptorul să poată
identifica modulul de care are nevoie pentru a înţelege mesajul. Algoritmii de criptare
-
22
de asemenea au sarcina de a oferi siguranţa integrităţii, prin folosirea unor metode
adecvate, cum ar fi suma de control.
Adrese de reţea: În Kerberos V5, adresele sunt etichetate cu un tip şi lungime, astfel că dacă un host suportă mai multe protocoale de reţea să le poată oferi bilete.
Codificarea mesajelor: Mesajele sunt descrise utilizând notaţia de sintaxă abstractă 1 (ASN 1) şi codificate după regulile fundamentale de codificare (BER). Astfel, se evită
specificarea codificării pentru cantităţi compuse din mai mulţi octeţi, aşa cum era
cazul în Kerberos V4.
Formatul biletului: Biletul are un format extins pentru noile opţiuni. Acesta este împărţit în două părţi, una codificată iar alta nu. Numele serverului este necodificat
pentru a permite unui server cu identităţi multiple să selecteze cheia potrivită. În plus
faţă de această schimbare, timpul de viaţă al biletului este reprezentat ca timp de start
şi timp de expirare, permiţând timp de viaţă aproape nelimitat.
Suport inter-domeniu: În Kerberos V5, domeniile pot coopera printr-o ierarhie bazată pe numele realm-ului. Un domeniu sursă este interoperabil cu domeniul destinaţie
dacă cele două cunosc o cheie pentru domeniul destinaţie.
Paşii protocolului Kerberos V5 se pot formaliza astfel cum urmează:
C AS : U, TGS, L1, N1
AS C : U, Tc,tgs, {TGS, K, Tstart, Texpire, N1} KU
C TGS : S, L2, N2, Tc,tgs, Ac,tgs
TGS C : U, Tc,s, {S, K’, T’start, T’expire, N2} K
C S : Tc,s, Ac,s
S C : {T’} K’
Analog cu Kerberos V4, Tc,tgs şi Tc,s se referă la un TGT respectiv un tichet, iar Ac,tgs şi
Ac,s se referă la autentificatorii respectivi. În pasul 1, C selectează un TGS şi trimite un mesaj
KRB_AS_REQ la AS. Mesajul include identificatorul utilizatorului (U), identificatorul TGS-
ului selectat, durata de viaţă solicitată L1 pentru TGT şi o valoare N1. În plus faţă de acestea,
un mesaj poate specifica un număr de opţiuni, cum ar fi:
Dacă pre-autentificarea trebuie realizată
Dacă biletul solicitat se poate re-înnoi sau re-trimite.
Dacă biletele derivate ar trebui să fie postdatate sau să permită postdatarea.
Dacă un bilet re-înnoibil va fi acceptat în locul unuia ne-înnoibil (dacă timpul de expirare nu poate fi satisfăcut)
După recepţionarea mesajului KRB_AS_REQ, AS caută şi extrage cheile secrete pentru
U şi TGS. Dacă este necesar, AS pre-autentifică cererea iar dacă aceasta eşuează, un mesaj de
eroare corespunzător este returnat lui C. Altfel, AS selectează aleator o nouă cheie de sesiune
K’ şi returnează un mesaj KRB_AS_REP lui C în pasul 2. Mesajul include U, un Tc,tgs = {U,
C, TGS, K, Tstart, Texpire} Ktgs şi {TGS, K, Tstart, Texpire, N1} KU. Timpii de start şi de expirare
Tstart respectiv Texpire ale TGT-ului sunt setaţi în concordanţă cu politica de securitate a
domeniului în aşa fel încât se încadrează în timpul de viaţă L1 specificat în mesajul
KRB_AS_REQ. După recepţionarea mesajului KRB_AS_REP, C aplică o funcţie cu sens
unic h la parola utilizatorului pwdU pentru a calcula cheia master a acestuia. KU = h(pwdU).
Echipat cu această cheie, C poate decodifica {TGS, K, Tstart, Texpire} KU, şi extrage TGS, K,
-
23
Tstart, Texpire. Acum poate folosi acest TGT pentru a solicita un bilet de la TGS. Schimbul TGS
este iniţiat ori de câte ori C doreşte să obţină un bilet pentru server, re-înnoiască său valideze
un bilet existent sau chiar să obţină un bilet proxy. Cel puţin în primul caz, clientul trebuie să
fi obţinut deja un TGT prin schimbul AS. În pasul 3, C trimite mesajul KRB_TGS_REQ către
TGS. Din nou, mesajul include informaţii pentru autentificarea clientului plus cereri pentru
credenţiale. Informaţiile de autentificare constau în Tc,tgs şi un autentificator corespunzător
Ac,tgs = {C, T} K generat de C cu amprenta de timp T şi cheia de sesiune K. În pasul 4, TGS
returnează un mesaj KRB_TGS_REP care include un bilet Tc,s = {U, C, S, K’, T’start, T’expire}
Ks pentru serverul S, precum şi {S, K’, T’start, T’expire} K. Schimbul AS se utilizează fie pentru
a autentifica un client unui server, fie pentru a se autentifica reciproc un client şi un server. În
pasul 5, C trimite un mesaj KRB_AP_REQ către serverul S. Mesajul conţine biletul Tc,s şi un
autentificator corespunzător Ac,s = {C, T’} K’, împreună cu unele informaţii de management.
Autentificarea se bazează pe timpul curent al serverului, a autentificatorului şi a tichetului.
Dacă nu apare nici o eroare şi dacă se cere autentificare reciprocă, S returnează un mesaj
KRB_AP_REP în pasul 6. Acest mesaj include amprenta de timp T’, codificată cu cheia de
sesiune K’ pe care S o cunoaşte împreună cu C.
În general, un mediu de reţea constă din mai multe organizaţii, cum ar fi companii în
competiţie, agenţii guvernamentale, instituţii financiare său universităţi. Într-un astfel de
mediu, ar fi dificil de găsit o entitate credibilă pentru toată lumea care să ruleze un Kerberos
KDC. Problema este că oricine are acces la KDC cunoaşte cheia master a utilizatorului şi are
acces la orice are acces şi utilizatorul. Chiar şi dacă o astfel de entitate s-ar găsi, replicile
KDC-ului ar trebui să fie de asemenea credibile. O entitate poate fi foarte ocupată cu
utilizatorii şi serviciile care intră şi iasă din reţea. Din acest motiv, reţeaua este împărţită în
domenii, fiecare dintre acestea având propriul KDC. Kerberos a fost proiectat să funcţioneze
şi în afara graniţelor domeniului, fiind posibil ca în principiu, un client într-un domeniu să se
autentifice unui server din alt domeniu. În Kerberos, o autentificare peste graniţele
domeniului se numeşte autentificare inter-domeniu. O cheie inter-domeniu este o cheie
secretă cunoscută de KDC-urile a două domenii Kerberos. Prin stabilirea acestor chei,
administratorul domeniilor permite ca un utilizator autentifica într-un domeniu să se
autentifice şi la distanţă. Se spune că un domeniu comunică cu altul dacă cele două cunosc
aceeaşi cheie inter-domeniu sau dacă domeniul local cunoaşte cheia unui domeniu intermediar
care la rândul său comunică cu domeniul îndepărtat. În terminologia Kerberos, o cale de
autentificare se referă la o secvenţă de domenii tranzitate în proces. Kerberos V4 necesita ca
AS-ul să comunice cu fiecare domeniu unde era necesară autentificarea inter-domeniu iar, în
contrast, Kerberos V5 suportă autentificarea inter-domenii cu treceri, cheile fiind distribuite
ierarhic.
Slăbiciunile lui Kerberos
Utilizarea sistemului Kerberos îmbunătăţeşte securitatea aplicaţiilor în reţea dar, prezintă
și unele deficiențe:
Dependenţa de criptosistem: implementarea de referinţă de la MIT pentru Kerberos V4 utilizează DES pentru a codifica mesajele. Înainte ca restricţiile de export ale
sistemelor criptografice să fie ridicate, răspândirea utilizării lui Kerberos a fost destul
de dificilă.
-
24
Dependenţa faţă de protocolul Internet: Kerberos V4 necesită utilizarea adreselor de tip IP, ceea ce îl face nepotrivit în anumite medii.
Ordinea octeţilor în mesaj: în Kerberos V4, host-ul care trimite mesajul ordonă octeţii în conformitate cu ordinea sa naturală. Receptorul este responsabil de a re-
ordona octeţii pentru a se potrivi modului său nativ. În timp ce acest lucru va uşura
comunicarea între host-uri cu aceeaşi ordine a octeţilor, comunicarea cu un tip diferit
de host poate afecta interoperabilitatea.
Timpul de viaţă al tichetului: limita de viață de aproximativ 21 de ore a unui tichet este un neajuns major în Kerberos V4, deoarece împiedică acordarea de tichete unor
sarcini care rulează multă vreme.
Înaintarea autentificării: Kerberos V4 nu permite ca un tichet emis unui client de pe un host să fie trimis altui host sau utilizat de alt client.
Numirea utilizatorilor: în Kerberos V4, numele sunt compuse din trei componente: nume, instanţă şi domeniu, fiecare având maxim 40 de caractere, aceste dimensiuni
dovedindu-se prea mici pentru unele aplicaţii.
Necesitatea autentificării inter-domenii
Dubla criptare: TGT-ul emis de AS este codificat de două ori când este returnat la client şi numai o dată când este trimis la TGS.
Autentificarea mesajului: algoritmul de sumă de control din Kerberos V4 nu este documentat sau publicat, de aceea nu există dovezi despre slăbiciunea sau tăria sa.
Totuşi, faptul că un algoritm nu a fost spart până în prezent nu înseamnă că algoritmul
este sigur.
În Kerberos V5, multe dintre probleme prezentate anterior au fost luate în seamă la
proiectarea acestuia. Una din marile probleme este aceea că sistemul Kerberos se bazează în
continuare pe parole bine alese şi pe faptul că acestea sunt ţinute secrete. Dacă un atacator
poate primi acces la parola unui utilizator, Kerberos nu poate distinge între cei doi. O
problemă oarecum înrudită a Kerberos V5 este și faptul că nu e rezistent la atacuri reply.
Protocolul SESAME
Protocolul SESAME (Secure European System for Applicxations in a Multivendor
Environment) este rezultatul unui proiect al Asociației Fabricanților Europeni de Calculatoare
(ECMA – European Computer Manufacturer Asociation) propus pentru optimizarea și
extinderea protocolului Kerberos pentru controlul distribuit al accesului în rețea. SESAME
foloseste o tehnică de autorizare și control al accesului similară celei aplicate de protocolul
Kerberos, cu autentificare a clientului de către AS. Suplimentar, este necesară și autentificarea
de către un server de privilegii (PAS – Privilege Attribute Server) care eliberează un certificat
de privilegii (PAC – Privilege Attribute Certificate) după prezentarea unei dovezi de
autenticitate. Certificatul este semnat cu cheia privată a serverului emitent. În certificat se
specifică identitatea și rolul utilizatorului, grupul organizațional căruia îi aparține, permisiuni
și restricții impuse, condiții de utilizare a certificatului. După obținerea certificatului, clientul
se adresează serverului KDS (Key Distribution Center Server), conform RFC 3634, pentru
obținerea tichetului de serviciu.
-
25
SESAME a adoptat terminologia introdusă de cadrele de securitate ISO/IEC. În particular, se foloseşte termenul de partener pentru a referi o persoană sau entitate înregistrată
şi autentificabilă. Când joacă un rol activ (spre exemplu când solicită acces), partenerul se
numeşte iniţiator. Când joacă un rol pasiv (spre exemplu este accesat), partenerul se numeşte
ţintă. Un serviciu este un set abstract de funcţionalităţi care poate fi implementat de un număr
de servere separate. Referindu-ne la modelul client / server, componentele aplicaţiei client
joacă rolul de iniţiatori comunicând cu componentele aplicaţiei server care joacă rolul de
ţintă.
Obiectivul primar al proiectului SESAME este producerea de tehnologie pentru controlul
accesului în sisteme distribuite, adică să ofere servicii de autentificare, control al accesului,
confidenţialitate şi integritate a datelor.
Arhitectura sistemului SESAME folosește o ierarhie de chei cu două niveluri:
o cheie simplă - stabilită și utilizată între un SACM inițiator și PVF-ul SACM-ului țintă, pentru a proteja PAC-urile corespunzătoare precum si informațiile de stabilire a
cheilor.