Sunteți pe pagina 1din 17

Protocolul de autentificare Kerberos

Protocolul Kerberos a fost proiectat la Universitatea MIT (Massachusetts Institute of


Techonology) n cadrul proiectului Athena, n jurul anului 1984. Scopul protocolului Kerberos
este de a permite unui client s-i demonstreze identitatea unui server aflat la distan, undeva
dincolo de o reea complet nesigur. Protocolul garanteaz de asemenea c, clientul nu poate
conversa cu un calculator care se d drept server; autentificarea se face n ambele direcii.
Protocolul n sine const dintr-un schimb de mesaje ntre un client i o serie de servere, fiecare
cu o alt misiune. Ideea de baz aparine lui Needham i Schroeder care au publicat ideea iniial
n 1978 n Communications of the ACM. Descrierea detaliat a protocolului se gsete n
documentul numit RFC 1510, care este disponibil de pe Internet. Cei care administreaz
Kerberos pot pune ntrebari pe grupul de News comp.protocols.kerberos.
Spre deosebire de multe dintre soluiile curente n ceea ce privete securitatea - cum ar fi
generatoarele de parole sau dispozitivele biometrice care citesc amprentele digitale sau ale
irisului - Kerberos rezolv problema securitii n reea fr hardware suplimentar, ci bazndu-se
pe mecanismele de criptare.

Descriere
Kerberos furnizeaz o modalitate de a verifica identitile conductorilor unei tranzacii ntr-o
reea deschis ( neprotejat). Aceasta se realizeaz fr a ne baza pe verificarea fcut de
sistemul de operare local, fr a ne baza pe validitatea adreselor de reea, fr a cere securitate
fizic la toate host-urile din reea i sub prezumia c pachetele care circul n reea pot fi citite,
modificate i inserate dup dorin. n aceste condiii, Kerberos este un ter (o parte) de ncredere
care realizeaz autentificarea prilor prin servicii criptografice convenionale (servicii ce
folosesc cheie secret partajabil - aceeai cheie este folosit i la criptare i la decriptare.), n
spe fiind folosit Data Encryption System (DES).
Premiza iniial este c exist un server central, numit serverul de autentificare (AS), care
cunoaste identitile tuturor clienilor posibili. De asemenea, fiecare client a stabilit o parol
secret pe care i acest server o tie. Parola ajunge la server printr-o cale sigur, de exemplu prin
pot sau printr-un mesager uman. Parola asta nu este cunoscut de nimeni altcineva, nici mcar
de celelalte servere cu care clientul va comunica (de la care va obine serviciile care-l intereseaz
de fapt). Toate celelalte servere din domeniul administrativ sunt i ele clienti ai AS: au o parol
unic tiut numai de AS i de acel server.
Niciodat parola nu va circula n mod clar pe reea; atunci oricine ar putea s o citeasc i s o
foloseasc n locul clientului de drept. Pentru a se proteja mpotriva dumanilor care vor
nregistra sau terge mesaje, mesajele vor avea informaii ca ora la care au fost trimise i un
numar de ordine (pentru a detecta omisiunile).

Kerberos ine o baz de date ai clientilor i ai cheilor lor private. Cheia privat este un numr
intreg mare tiut numai de Kerberos i sw clientul creia i aparine cheia. n cazul n care
clientul este un utilizator, aceasta este o parol criptat. Serviciile de reea care necesit
autentificare se nregistreaz la Kerberos ca un client obinuit. Cheia privat este negociat la
inregistrare.
Deoarece Kerberos cunoate aceste chei private poate crea mesaje care s conving un client c
cellalt este de fapt cine pretinde a fi. De asemenea Kerberos genereaz chei private temporare
numite i chei de sesiune care sunt date celor doi clieni i nimnui altcuiva. O cheie de sesiune
poate fi folosit pentru criptarea mesajelor dintre cele dou pri.
O alt regul interesant este c, cheile folosite n comunicarea dintre client i servere se schimba
frecvent. n implementarea standard o cheie expir dup 25 de ore. n felul acesta un atac
criptanalitic nu va avea prea mult succes: dac dureaza mai mult de 25 de ore atunci cheia
descoperit este deja inutil (desigur, eventualele mesaje deja interceptate i stocate vor putea fi
citite, dar stricciunile sunt limitate). Cheia pe care un client i un server o folosesc n comun se
numete cheie de sesiune i este generat aleator.

Tipuri de acreditri Kerberos


Sunt dou tipuri de acreditri folosite de Kerberos: tichetele i autentificatorii. Amndou au la
baz criptarea cu chei private, dar sunt criptate folosind chei diferite. Un tichet este folosit pentru
a transmite in siguran identitatea persoanei creia i-a fost eliberat tichetul ntre serverul de
autentificare i cel final. De asemenea un tichet transmite informaii ce pot fi utilizate pentru a fi
sigur c persoana ce folosete tichetul este acceai persoan ctre care a fost emis.
Autentificatorul conine informaii adiionale care atunci cnd sunt comparate cu cele din tichet
demonstraz c acel client care prezint tichetul este cel creia i-a fost atribuit de prima dat.
Un tichet e folosit pentru un singur server i un singur client. Conine numele serverului, numele
clientului, adresa IP a clientului, un marcaj temporal(timestamp), o durat de via i o cheie de
sesiune obinut aleator. Aceast informaie e criptat folosind cheia serverului care va primi
cereri de la client. O dat ce tichetul a fost creat poate fi utilizat de mai multe ori de ctre client
pentru a avea acces la server, pn ce acel tichet expira. Deoarece tichetul este criptat folosind
cheia serverului, este sigur s permitem utlizatorului s-l transmit ctre server fr s existe
problema ca acel tichet s fie modificat.
Spre deosebire de tichet, autentificatorul poate fi utilizat doar o dat. Unul nou trebuie generat
defiecare datp cand un client dorete s utilizeze serviciul. Aceasta nu reprezint o problem
deoarece clientul poate s genereze singur unul. Un autentificator conine numele clientului,
adresa IP a calculatorului care face cererea i timpul local al acestuia. Autentificatorul este
criptat folosind cheia de sesiune care este o parte din tichet.

Consideratii asupra protocolului


Tichetele si autentificatorii sunt puncte cheie pentru ntelegerea implementrii schemei Kerberos.

Pentru ca un utilizator s foloseasc un serviciu este necesar un tichet. Tichetele se obtin


de la TGS, cu exceptia primului tichet pe care l obtine de la AS si a tichetelor speciale,
care se obtin tot de la AS.

Tichetele detinute de utilizator nu sunt ntelese de ctre acesta, fiind criptate cu cheia
server-ului destinatar.

Fiecare tichet este asociat cu o cheie de sesiune, asigurat la fiecare acordare a unui
tichet.

Tichetele sunt reutilizabile. Odat acordat unui utilizator, tichetul poate fi refolosit o
perioad de timp (uzual 25 de ore), dup care expir. Momentul acordrii si durata sunt,
deasemenea, incluse n tichet.

Un nou autentificator este cerut de fiecare dat cnd clientul initiaz o nou conexiune cu
un server. Autentificatorul poart momentul crerii si are o durat de valabilitate scurt
(minute).

Un server pstreaz istoria cererilor utilizatorului pentru care timpul din autentificator
este nc valid. Aceasta permite depistarea dublurilor (si deci a eventualelor fraude).

Deoarece tichetul si autentificatorul contin adresa clientului, este destul de greu pentru o
alt statie s le foloseasc (ea ar trebui s-si schimbe adresa de retea!)

Odat validat cererea de serviciu, clientul si server-ul folosesc o cheie private


(cunoscut n plus doar de Kerberos). Utilizarea cheii este optional.

Pe parcursul unei sesiuni o list de(nume_server,tichet_sigilat, cheie_sesiune) este


pastrat de statia de lucru n numele utilizatorului. Lista nu poate fi folosit de ctre
altcineva, numele utilizatorului fiind criptat. Lista este distrus la terminarea sesiunii.

Consideratii asupra mediului


Kerberos impune cteva consideratii asupra mediului, stabilind unele conditii pentru a putea
functiona n mod corect :

Atacurile de tip refuz de serviciu" (Denial of service") nu sunt rezolvate cu Kerberos.


Sunt modalitati prin care un intruder poate impiedica o statie la a participa la secvent
normal de pasi necesar autentificarii. S-a considerat mai potrivit lsarea acestei sarcini
n grija factorului uman (administrator si restul de user-i)

Conductorii de tranzactii trebuie s-si tin cheile secrete pe care le detin n mod secret.
Dac un intruder fur o cheie secret, va putea actiona ca si proprietarul ei.

Atacurile de tipul ghicire de parole" (password guessing") nu sunt rezolvate de ctre


Kerberos. Dac un user si alege o parol slab" va fi posibil pentru un intruder s
realizeze password guessing" prin atacuri criptanalitice repetate.

Fiecare host din retea trebuie s detin un ceas care s fie sincronizat tolerant" (loosely
synchronized") cu ceasurile celorlalte host-uri. Toleranta se poate configura. Dac
ceasurile se sincronizeaz printr-un protocol, acesta trebuie securizat el nsusi mpotriva
atacatorilor.

Modul de lucru
Desfurarea operaiilor n sistemul Kerberos are loc n urmtoarele faze:
1. Utilizatorul deschide o sesiune de lucru Kerberos (se lanseaz n execuie klogin). Utilizatorul
i trimite numele (ca rspuns la klogin).
Staia (procesul klogin) contacteaz AS transmindu-i un mesaj text ce conine numele de login
i numele unui TGS : mesaj = (nume_login, nume_TGS)
2. AS caut n baza de date Kerberos i obine:
- o cheie de criptare pentru utilizator
- o cheie de criptare pentru TGS
nuntrul tichetului de acces la TGS se introduc:
tichet_de_acces_la_TGS = encrypt//TGS_key (nume_TGS, nume_client, adres_client,
time_stamp, timp_via, cheie_sesiune)
AS trimite staiei clientului un rspuns, care este criptat cu cheia clientului i care are urmtoarea
structur: rspuns = encrypt//client_key (tichet_de_acces_la_TGS, cheie_sesiune)

Programul klogin primete mesajul i cere parola utilizatorului. Parola este criptat printr-o
funcie greu inversabil, rezultatul fiind o cheie de cifrare a utilizatorului. Aceasta este folosit la
criptarea mesajului, parola fiind stears din statie. Staia rmne cu :
- un tichet sigilat;
- o cheie de sesiune TGS
pe care le memoreaz.
3. Staia trimite TGS-ului un mesaj de forma :
mesaj = (nume_serviciu, tichet_de_acces_la_TGS, autentificator)
unde, autentificator = encrypt//session_key (nume_client, adres_client, time_stamp)
4. TGS primete mesajul, decripteaz tichetul, de unde obine cheia de sesiune cu care
decripteaz autentificatorul, face verificrile necesare i, dac totul este n regul, obine din baza
de date Kerberos cheia serviciului indicat prin nume_serviciu.
Se formeaz un tichet de acces la serviciu i o nou cheie de sesiune. nuntrul tichetului de
acces la serviciu se introduc:
tichet_de_acces_la_serviciu = encrypt//serv_key (nume_TGS, nume_client, adres_client,
time_stamp, timp_via, cheie_sesiune)
TGS trimite staiei clientului un rspuns care este criptat cu cheia de sesiune client TGS i care
are urmtoarea structur:
rspuns = encrypt/session_key (tichet_de_acces_la_serviciu, cheie_sesiune)
5. Staia trimite serviciului un mesaj de forma :
mesaj = (nume_serviciu, tichet_de_acces_la_serviciu, autentificator)
unde, autentificator = encrypt/new_session_key (nume_client, adres_client, time_stamp)
Serviciul primete mesajul, decripteaz tichetul sigilat folosind cheia sa de decriptare (pe care
doar serverul Kerberos o mai cunoate). Afl prin decriptare cheia de sesiune client - serviciu i
poate, astfel, decripta autentificatorul, dup care nainteaz la verificrile necesare. Dac aceste
verificri se desfoar cu succes, se ofer serviciul solicitat.
6. Serviciul se autentific la rndul su, transmind clientului un mesaj de forma: mesaj =
encrypt//new_session_key (time_stamp+1)

Dezavantaje
Implemetarea protocolului Kerberos este cel puin dificil n practic. Condiiile ideale existente
pe hrtie sunt greu de obinut ntr-o reea reala de calculatoare.
La ora actual nu exist nici un fel de metod complet riguroas pentru a arat c un protocol
criptografic nu scap informaii; exist metode pentru a testa dac un protocol rezist la atacurile
cunoscute, dar foarte adesea se public algoritmi care mai trziu se dovedesc a fi greii. n
general, raionamentele cu astfel de protocoale sunt foarte complicate. Cercetarea n domeniu
este n plin desfaurare i folosete tehnici foarte exotice, ca teoria informaiei, teoria
complexitii, logici speciale (ex. knowledge theory), etc.
S observm c, clientul trebuie s pstreze undeva cheile de sesiune pentru a putea conversa cu
serverele: fiecare mesaj dupa cele de autentificare va fi criptat cu aceste chei. Clientul trebuie s
posede deci practic permanent KC, TGS si KC,S. E adevarat c aceste chei expir n 25 de ore,
deci sunt mai puin importante dect o parola care teoretic este folosit luni ntregi.
O alt mare problem este cu staiile de lucru fr disc (diskless); aceste staii de obicei import
discuri prin reea. Deci de ndat ce o astfel de staie stocheaz un tichet pe disc, tichetul va
cltori prin reea, care am stabilit ca este expus la tot felul de atacuri! Nici pstrarea tichetului
n memorie nu este neaparat mai sigur: algoritmii de paginare stocheaz paginile pe disc (n
partiia de swap) atunci cnd calculatorul nu are destul memorie, deci am revenit la aceeai
problem.
.

ntr-o reea mare de calculatoare sincronizarea ceasurilor se face automat, folosind un protocol
numit NTP: Network Time Protocol. Un atac foarte spectaculos este urmtorul: un atacator
nregistreaz o serie de mesaje de la un client care tie ca reprezint o tranzacie important.
Peste o sptmn atacatorul infiltreaz n reea mesaje false NTP prin care seteaz ceasul unui
server cu o sptmn n urm. Dupa asta atacatorul retransmite mesajele capturate, care vor fi
re-executate, pentru c serverului i par proaspete.

Bibliografie :
http://profs.info.uaic.ro/~alaiba/mw/index.php?title=Protocolul_de_autentific
are_Kerberos
rotocolul Kerberos
Protocolul Kerberos a fost proiectat la Universitatea MIT (Massachusetts Institute of
Techonology) n cadrul proiectului Athena, n jurul anului 1984. Scopul protocolului
Kerberos este de a permite unui client s-i demonstreze identitatea unui server aflat
la distan, undeva dincolo de o reea complet nesigur. Protocolul garanteaz de
asemenea c clientul nu poate conversa cu un calculator care se d drept server;
autentificarea se face n ambele direcii.
Protocolul n sine const dintr-un schimb de mesaje ntre un client i o serie de
servere, fiecare cu o alt misiune. Idea de baz aparine lui Needham i Schroeder care
au publicat ideea iniial n 1978 n Communications of the ACM. Descrierea
detaliat a protocolului se gsete n documentul numit RFC 1510, care este disponibil
de pe Internet1. Cei care administreaz Kerberos pot pune ntrebri pe grupul de
News comp.protocols.kerberos.
Protocolul Kerberos indic de fapt o serie de mesaje care trebuie schimbate ntre
prile care doresc s comunice; unele din mesaje sunt criptate. Ce funcie de
criptare/decriptare se folosete teoretic nu conteaz prea tare, atta vreme ct funcia
este greu inversabil. Implementrile curente folosesc un algoritm standard de criptare
numit DES (Data Encryption Standard).
Kerberos este un protocol; pentru a fi util anumite aplicaii (cele care au nevoie de
comunicaie client-server) trebuie modificate pentru a folosi autentificarea oferit de
Kerberos. (Aplicaiile modificate sunt atunci numite ``kerberized''). n mod normal
ntr-un domeniu administrativ n care se folosete Kerberos programe
ca telnet, rlogin, POP (post-office protocol), fiiere la distan (AFS), etc. trebuie

rescrise n aa fel nct clientul s se autentifice serverului folosind noua metod (toate
aceste aplicaii sunt de tip client-server).

Principii
Protocolul pare destul de complicat, dar dac avei rbdare o s nelegei tot ce se
ntmpl; nu e mare tiin la mijloc.
Premiza iniial este c exist un server central, numit serverul de autentificare (AS),
care cunoate identitile tuturor clienilor posibili. De asemenea, fiecare client a
stabilit o parol secret pe care i acest server o tie. Parola ajunge la server printr-o
cale sigur, de exemplu prin pot sau printr-un mesager uman (m rog, sigur cel
puin din punct de vedere software). Parola asta nu este cunoscut de nimeni
altcineva, nici mcar de celelalte servere cu care clientul va comunica (de la care va
obine serviciile care-l intereseaz de fapt). Toate celelalte servere din domeniul
administrativ sunt i ele clieni ai AS: au o parol unic tiut numai de AS i de acel
server.
Niciodat parola nu va circula n clar pe reea; atunci oricine ar putea s o citeasc i
s o foloseasc n locul clientului de drept.
Pentru a se proteja mpotriva dumanilor care vor nregistra sau terge mesaje,
mesajele vor avea informaii ca ora la care au fost trimise i un numr de ordine
(pentru a detecta omisiunile).
O alt regul interesant este c cheile folosite n comunicarea dintre client i servere
se schimb frecvent. Implementarea standard expir o cheie dup 25 de ore. n felul
acesta un atac criptanalitic nu va avea prea mult succes: dac dureaz mai mult de 25
de ore atunci cheia descoperit este deja inutil (desigur, eventualele mesaje deja
interceptate i stocate vor putea fi citite, dar stricciunile sunt limitate). Cheia pe care
un client i un server o folosesc n comun se numete cheie de sesiune i este generat
aleator.

Mesajele (protocolul Needham-Schroeder)


S presupunem c clientul nostru vrea s vorbeasc cu un server de disc. Protocolul
esenial este compus din 4 mesaje (protocolul real este o simpl extensie a ideii pe
care o prezint aici):
1. Un mesaj de la client spre AS, prin care se indic intenia de a comunica cu
serverul de disc;

2. Un mesaj de rspuns de la AS pentru client, prin care AS i trimite clientului


noua cheie de sesiune i un pacheel pentru serverul de disc;
3. Un mesaj de la client spre serverul de disc, n care este inclus pacheelul de
mai sus, pentru a garanta faptul c clientul a discutat cu AS (pacheelul poate
veni numai de la AS);
4. Un mesaj de rspuns de la serverul de disc prin care clientul este convins c
serverul a putut deschide pacheelul, deci c discut ntr-adevr cu serverul de
disc.
Dup acest schimb iniial de mesaje clientul i serverul de disc vor folosi cheia de
sesiune generat de AS pentru a cripta cu DES toat comunicaia dintre ei.
Vom vedea c mesajele sunt relativ nclcite pentru a preveni toate atacurile de mai
sus. Dac vei ncerca s simplificai protocolul aproape sigur l vei face vulnerabil la
anumite tipuri de atacuri.
S notm cele 3 entiti care colaboreaz astfel: C clientul, AS serverul de
autentificare i S serverul de disc (vedei i figura 1).
O tehnic important a protocolului, care este folosit pentru a contraataca folosirea
unor mesaje vechi nregistrate este de a eticheta mesajele cu ora emiterii (ntr-un mod
care nu poate fi contrafcut) i de a verifica la recepie dac ora este rezonabil.
Sincronizarea ceasurilor este o problema extrem de grea n sistemele distribuite, aa
c pentru Kerberos ``rezonabil'' nseamn c ceasul local la recepie arat plus/minus
5 minute de ora din mesaj (ora de transmitere).
Un alt truc interesant este folosirea a ceea ce se numete nonce: un obiect care este
folosit o singur dat. Acesta este practic un numr aleator. Vom vedea mai jos cum
este acesta folosit.

Figure 1: Protocolul de baz (simplificat).

Vom mai introduce urmtoarele notaii:

Ka,b este cheia de sesiune pe care o folosesc pentru discuie a i b; de exemplu


KC,S va fi cheia folosit pentru criptare/decriptare ntre client i serverul de
disc;
Cum am spus mai sus, AS este serverul de autentificare, care tie parola
fiecrei alte entiti din sistem;
Kz este cheia pe care clientul z i AS o folosesc n comun (parola clientului z);
de pild Ks este parola serverului de disc (cunoscut numai de el i de AS);
Voi scrie {mesaj1, mesaj2}K pentru a indica faptul c mesajele 1 i 2 sunt puse
laolat ntr-un pachet care este apoi criptat cu cheia K.
O abreviere util este cea de tichet (ticket): Ta,b = { Ka,b, a, ora curenta }: un
mesaj n care sunt mpachetate 3 informaii: o cheie de sesiune ntre a i b,
numele lui a i ora curent.

Cu aceste notaii putem scrie complet ne-ambiguu toate mesajele schimbate ntre C, S
i AS. Sgeata indic traseul fiecrui mesaj:
C ---> AS:
C, S, ora expirare, N (nonce, aleator).
Clientul afirm propria identitate, identitatea serverului cu care vrea s discute,
trimite un numr aleator i ct timp ar dori s converseze cu S. Pn aici totul e
simplu. AS va rspunde astfel:

AS ---> C$:
{KC,S, S, ora expirare, N}KC, {TC,S}KS .
Acest complicat mesaj are mai dou pri mari: prima este destinat clientului, i este criptat cu cheia clientului KC,
iar a doua este un tichet pentru S, criptat cu cheia lui S. S vedem la ce folosesc feluritele pri din mesaj:

Prima parte a mesajului este criptat cu cheia KC a lui C. Pentru c aceast cheie este secret, nimeni
altcineva nu poate decripta acest mesaj dect C; pentru restul lumii mesajul este gunoi. La fel stau lucrurile i
pentru partea a doua a mesajului, care fiind criptat cu KS este inteligibil numai pentru S.

KC,S este un numr aleator generat de AS, care va fi folosit ca cheie de sesiune ntre C i S. Observai c
cheia de sesiune apare n ambele pri ale mesajului, n aa fel nct va fi cunoscut att de ctre C ct i de S.

AS i confirm lui C identitatea serverului de disc S i indic durata de validitate a lui KC,S (care poate fi
diferit dect a dorit C n primul mesaj).

Faptul c N apare n mesajul ctre C garanteaz c acest mesaj a fost criptat de AS: nimeni altcineva nu
putea s-l bage pe N nauntru. De asemenea, acest mesaj nu putea fi un mesaj mai vechi dintr-o
comunicaie anterioar, pentru c N difer.

Partea a doua a mesajului este opac pentru C; tot ce poate face C cu ea este s o nainteze lui S. C (sau
oricine altcineva) nu o poate citi. Dac cineva ar modifica partea a doua, S nu ar mai putea-o decodifica i
obine un mesaj corect, deci tichetul nu poate fi contrafcut sau modificat.

C ---> S:
{C, ora curenta, suma de control}KC,S, {TC,S}KS.
Mesajul are din nou dou pri.

S ---> C:

Partea a doua este exact partea a doua a mesajului 2, aa cum a fost


primit de la AS.
Prima parte a mesajului are scopul de a demonstra c acest mesaj este
``proaspt'': S va extrage KC,S din partea a doua a mesajului i o va folosi
pentru a citi prima parte a mesajului. De acolo afl ora la care a fost
trimis mesajul, i l rejecteaz dac ora difer prea tare de ora local.
(Asta ar putea s nsemne c mesajul a fost capturat de un inamic i relansat). Suma de control ne asigur c mesajul nu a fost modificat de
nimeni; este practic imposibil s modifici un mesaj criptat i s repari i
suma de control dac nu tii cheia.

{ora curenta+1}KC,S.
Prin acest mesaj S n convinge pe C c a ajuns la destinaia dorit: mesajul are
ora curent trimis anterior de C plus 1. Dar ora putea fi extras numai de cel
care avea KC,S, care fiind o cheie de sesiune era tiut numai de S. Nu era
suficient s returneze aceeai valoare, pentru c atunci acest mesaj putea fi o
copie a (unei pri a) mesajului anterior.
La sfritul acestei comunicaii att C ct i S sunt siguri de identitatea celuilalt i n
plus au la dispoziie o cheie de sesiune KC,S cu care pot cripta toate mesajele pe care le
schimb. Autentificarea a fost fcut.

Implementarea Kerberos
ntre un protocol de autentificare pe hrtie i o implementare real pe un calculator e o
distan considerabil. Seciunea urmtoare, consacrat slbiciunilor lui Kerberos va
ilustra i mai pregnant acest lucru.
Implementarea lui Kerberos ncearc s mai in cont de anumite particulariti ale
lumii reale care fac realizarea protocolului mai dificil.
Prima ntrebare spinoas care se ivete este: unde este stocat parola fiecrui client
KC, KS, etc.). AS trebuie s fie o main foarte sigur, undeva ntr-un subsol ferit, dar
mainile client vor fi probabil peste tot la-ndemn. Dac parola unui client este
stocat pe disc atunci este mai la-ndemna atacurilor asupra clientului.
Ca atare Kerberos nu memoreaz parola nicieri! Utilizatorul este obligat s o tasteze
de fiecare dat cnd vrea s fie autentificat. Observai c KC este folosit n mesajele
de mai sus numai pentru a decripta mesajul 2; n rest este inutil. Deci procedura este
urmtoarea: programul kerberizat al clientului va lua legtura cu AS, iar cnd
rspunsul sosete utilizatorul trebuie s tasteze parola KC. Parola este imediat folosit
pentru a decripta mesajul de la AS dup care este complet tears din memorie. n
acest fel fereastra de vulnerabilitate este redus la maximum.
Pe de alt parte asta poate fi foarte neplcut, pentru c atunci utilizatorul va trebui s
tasteze parola pentru fiecare nou server S pe care vrea s-l foloseasc (adic pentru
fiecare nou sesiune). i cum tim c utilizatorii sunt lenei, aa ceva este inadmisibil.
Kerberos a introdus atunci un al doilea server central numit ``Serverul care d
tichete'': Ticket Granting Server, TGS. Ideea este TGS are de fapt toate parolele K S.
Clientul C se autentific la TGS exact n acelai fel ca la oricare server S: obinnd un

tichet de la AS. Odat autentificat la TGS i folosind cheia de sesiune KC, TGS clientul
poate solicita oricte chei pentru alte servere S, S1, etc.
Figura 2 i tabela 1 arat situaia real: mesajele 1,2 sunt schimbate numai cnd
utilizatorul face login. Mesajele 3,4 sunt schimbate de fiecare dat cnd utilizatorul
vrea s contacteze un nou server (adic s deschid o nou sesiune). Mesajul 5 este
folosit de client pentru a se autentifica fiecrui nou server, iar mesajul 6 este opional,
autentificnd serverul pentru client. n mesajul 5 apare un element nou, numit
Ksubsesiune: clientul poate alege aici o nou cheie de sesiune care s fie folosit n locul
cheii oferite de TGS, KC,S. Asta nu schimb prea tare natura protocolului.

Figure 2: Protocolul Kerberos complet.

Table 1: Schimbul complet de mesaje n protocolul Kerberos.


h
Nr.

ntre

Coninutul mesajului

C ---> AS C, TGS, ora de expirare, N

AS ---> C KC, TGS, ora de expirare, N}K_C, {TC,TGS}KTGS

C ---> TGS {ora locala}KC,TGS, {TC,TGS}KTGS, S, ora de expirare, N1

TGS ---> C {KC,S, S, ora de expirare, N1}KC, TGS, {TC,S}KS

C ---> S

{ora locala, suma de control,Ksubsesiune}KC,S, {TC,S}KS

S ---> C

{ora locala}KC,S

Kerberos este implementat sub forma unor procese server (AS, TGS) i a unor
biblioteci care se pot lega n programele clienilor i serverelor. Funcioneaz sub o
mare varietate de sisteme de operare: Unix i Windows NT fiind cele mai notabile.
Mai are tot felul de zorzoane, legate de pild de autentificarea ntre domenii
administrative diferite, transmiterea tichetelor, etc.

Slbiciunile lui Kerberos


Chiar dac n teorie Kerberos este minunat, implementarea lui n practic este cel
puin dificil. Condiiile ideale existente pe hrtie sunt greu de obinut ntr-o reea de
calculatoare reale.
La ora actual nu exist nici un fel de metod complet riguroas pentru a arta ca un
protocol criptografic nu scap informaii; exist metode pentru a testa dac un
protocol rezist la atacurile cunoscute, dar foarte adesea se public algoritmi care mai
trziu se dovedesc greii. n general, raionamentele cu astfel de protocoale sunt foarte
complicate. Cercetarea n domeniu este n plin desfurare i folosete tehnici foarte
exotice, ca teoria informaiei, teoria complexitii, logici speciale (ex. knowledge
theory), etc.
Voi ilustra aici numai unele dintre deficiene, pentru a da o idee despre natura lor.
S observm c clientul trebuie s pstreze undeva cheile de sesiune pentru a putea
conversa cu serverele: fiecare mesaj dup cele de autentificare va fi criptat cu aceste
chei. Clientul trebuie s posede deci practic permanent KC, TGS i KC,S. E adevrat c
aceste chei expir n 25 de ore, deci sunt mai puin importante dect o parol care
teoretic este folosit luni ntregi. ntrebarea este ns: unde sunt inute pe calculatorul
clientului aceste chei?

Pe o staie obinuit Unix lucreaz n mod normal mai muli utilizatori. Tichetele
unuia ar trebui s fie ferite de ceilali. Dar pe un sistem Unix practic nimic nu poate fi
adpostit mpotriva administratorului (root). Administratorul unui sistem poate citi
orice fiier, i poate inspecta memoria fizic a oricrui proces. Acesta este un clci al
lui Ahile al lui Kerberos; toate metodele cunoscute pentru a penetra un sistem Unix
amenin sigurana ntregului protocol. Ori securitatea unui sistem Unix, care este
foarte complicat, este extrem de greu de controlat; exist o sumedenie de bree de care
un atacator ar putea profita.
O alt mare problem este cu staiile de lucru fr disc (diskless); aceste staii de
obicei import discuri prin reea. Deci de ndat ce o astfel de staie stocheaz un
tichet pe disc, tichetul va cltori prin reea, care am stabilit c este expus la tot felul
de atacuri!
Nici pstrarea tichetului n memorie nu este neaprat mai sigur: algoritmii de
paginare stocheaz paginile pe disc (n partiia de swap) atunci cnd calculatorul nu
are destul memorie, deci am revenit la aceeai problem.
Iat nc un exemplu: am vzut c prospeimea unui tichet este verificat comparnd
ora local a serverului cu ora din tichet. Pentru un interval de 5 minute serverul
memoreaz toate tichetele primite, pentru a depista duplicate, eventual rezultate dintrun atac care re-transmite pachete vechi capturate. Un tichet mai vechi de 5 minute este
considerat expirat i ignorat. n felul acesta un server nu va primi niciodat acelai
pachet de dou ori. Asta presupune c serverul i clientul au ceasuri relativ
sincronizate.
ntr-o reea mare de calculatoare sincronizarea ceasurilor se face automat, folosind un
protocol numit NTP: Network Time Protocol. Un atac foarte spectaculos este
urmtorul: un atacator nregistreaz o serie de mesaje de la un client care tie c
reprezint o tranzacie important. Peste o sptmn atacatorul infiltreaz n reea
mesaje false NTP prin care seteaz ceasul unui server cu o sptmn n urm. Dup
asta atacatorul retransmite mesajele capturate, care vor fi re-executate, pentru c
serverului i par proaspete.
Asta face securitatea n calculatoare o problem foarte spinoas: adesea protocoalele
propuse sunt eronate, dar nu exist nici o metod formal pentru a depista i verifica
asta. Chiar dac un protocol este corect formal, se poate baza pe asumpii
nerezonabile asupra mediului n care opereaz, cum ar fi ceasurile sincronizate. i
chiar dac se bazeaz pe asumpii rezonabile, implementarea scris de un programator
uman poate s aib bug-uri care o fac vulnerabil.

Kerberos pentru un utilizator


Voi ncheia acest articol ilustrnd cum se manifest Kerberos pentru un utilizator
obinuit. Domeniul administrativ n care lucrez eu de obicei este complet kerberizat.
Programul meu login a fost modificat ca imediat ce tastez parola s discute cu AS i
s obin un tichet pentru serverul care d tichete, TGS. Directorul meu cas este de
pe un disc din reea, aflat undeva departe, pe un server de disc (protocolul folosit este
AFS: Andrew File System). Atunci cnd comunic prima oar cu serverul de AFS
demonul local de pe maina mea folosete tichetul obinut de la AS pentru a obine de
la TGS un tichet pentru serverul de disc. Dup aceea se autentific serverului de disc,
exact ca n schema de mai sus.
Dup autentificarea cu serverul de disc toat comunicaia ntre maina mea i serverul
de disc se va face folosind un alt protocol, numit Secure RPC (Remote Procedure
Call): apel sigur de procedur la distan, care folosete iniial cheia de sesiune oferit
de TGS.
Pentru mine ca utilizator final totul este aproape complet transparent. Singura
neplcere este c la fiecare 25 de ore tichetele pentru TGS expir, i atunci trebuie smi tastez din nou parola pentru a obine tichete proaspete. Asta poate fi neplcut dac
vrei s rulezi o simulare mai ndelungat.
Pot s vd n orice clip tichetele pe care le posed cu comanda klist:
$ klist
Ticket file:
Principal:
Issued
Jul 20 10:50:34
Jul 20 10:50:34
Jul 20 10:51:30

/tkt/7108-0401-35ae552f
me@CS.CMU.EDU
Expires
Jul 21 12:16:55
Jul 21 12:16:55
Jul 21 12:17:51

Principal
krbtgt.CS.CMU.EDU@CS.CMU.EDU
afs@CS.CMU.EDU
zephyr.zephyr@CS.CMU.EDU

Tichetele sunt inute n fiierul /tkt/7108-0401-35ae552f pe discul local. Am n clipa


asta 3 tichete: unul pentru TGS, unul pentru serverul de disc AFS i unul pentru
sistemul de mesagerie zephyr (care nu ne intereseaz prea tare acum).
Mai am la dispoziie urmtoarele comenzi:
kinit
prin care pot s-mi schimb identitatea Kerberos (de pild dac un coleg vrea s
lucreze pe calculatorul meu o s tasteze kinit numele-lui i apoi parola lui
personal;

kdestroy
prin care toate tichetele de pe maina local sunt distruse; foarte util dac
plec i nu vreau ca cineva s poat lucra n numele meu;
kpasswd
prin care mi pot schimba cheia (parola) stocat pe AS. Schimbarea parolei
este sigur, pentru c parola va fi trimis criptat la un server special care face
managementul parolelor i modific baza de date din care citete AS.
Autentificarea la managerul de parole se face tot folosind Kerberos. Asta
nseamn c odat ce am o parol Kerberos (care trebuie introdus manual n
baza de date a lui AS) schimbarea o pot face fr s mai bat vreun
administrator la cap;
kdb_init
este o comand folosit de administrator pentru a crea o nou baz de date
Kerberos atunci cnd pornete serviciul;
kdb_admin
este comanda prin care administratorul adaug un nou utilizator n baza de
date;
kdb_edit
este comanda prin care se pot aduga noi administratori n baza de date AS:
persoane care au dreptul s modifice baza de date.
n plus, n domeniul n care lucrez eu, majoritatea comenzilor care opereaz n reea
au fost kerberizate. De pild demonul i clientul de telnet (terminal virtual): cnd eu
fac telnet pe o main la distan clientul mi cere parola dup care obine un tichet
de la TGS pentru demonul telnetd de pe maina de la distan; n acest fel parola mea
nu circul niciodat prin reea (cum ar fi fost cazul dac telnet nu era kerberizat).