Documente Academic
Documente Profesional
Documente Cultură
LucrareDeLicenta PDF
LucrareDeLicenta PDF
FACULTATEA DE INGINERIE
SPECIALIZAREA: CALCULATOARE
LUCRARE DE DIPLOM
Coordonator:
Student:
2009
Viza
facultii
Butler Lampson, Martn Abadi, Michael Burrows, Edward Wobber, Authentication in Distributed Systems:
Theory and Practice, ACM Trans. Computer Systems 10, 1992.
Joshua D. Guttman, F. Javier Thayer Fabrega, Authentication tests and the structure of bundles, Theoretical
Computer Science, Vol. 283, No. 2, pag.333-380, iunie 2002.
W. Stallings, Cryptography and Network Security, 4th edition, Prentice Hall, 2005.
A. Menezes, P. van Oorschot, S. Vanstone, Handbook of Applied Cryptography, CRC Press, 1996.
J. D. Guttman, Security Protocol Design via Authentication Tests, 2002.
J. D. Guttman, Security goals: Packet trajectories and strand spaces, In R. Gorrieri and R. Focardi, editors,
Foundations of Security Analysis and Design, volume 2171 of LNCS, Springer Verlag, 2001.
E. Gerck, Overview of Certification Systems: X.509, PKIX, CA, PGP & SKIP, 2000.
C. Szyperski, Component Software Beyond Object Oriented Programming, 2nd edition, Addison Wesley,
pag. 3 47, 2002.
Semntura conductorului
Semntura candidatului
Cuprins
Capitolul 1 Introducere......................................................................................................... 6
1.1 Structura documentului .................................................................................................... 7
Capitolul 2 Aspecte teoretice ................................................................................................ 8
2.1 Criptografia....................................................................................................................... 8
2.1.1 Criptografia simetric ................................................................................................ 8
2.1.2 Criptografia asimetric .............................................................................................. 9
2.1.3 Funcii hash ............................................................................................................. 11
2.2 Protocoale de securitate .................................................................................................. 12
2.2.1 Principii de proiectare.............................................................................................. 13
2.2.2 Proiectare via teste de autentificare ......................................................................... 16
2.2.3 Independena protocoalelor de securitate ................................................................ 17
2.3 Infrastructura Cheilor Publice (PKI) .............................................................................. 18
2.3.1 Certificatele X.509................................................................................................... 19
2.4 Mecanismul Single Sign-On (SSO)................................................................................ 20
2.5 Ingineria programrii bazat pe componente (CBSE).................................................... 21
2.5.1 Application Programming Interface (API) .............................................................. 22
2.6 Platforma Mozilla........................................................................................................... 22
2.6.1 Arhitectura Mozilla.................................................................................................. 23
2.6.2 XPCOM ................................................................................................................... 24
Capitolul 3 Proiectarea sistemului ..................................................................................... 26
3.1 Cerine ............................................................................................................................ 26
3.2 Arhitectura sistemului .................................................................................................... 27
3.2.1 Proiectarea mecanismului Single Sign-on............................................................... 27
3.2.2 Componentele sistemului ........................................................................................ 30
3.2.3 Proiectarea componentei XServer ........................................................................... 31
3.2.3.1 Iniializarea componentei XServer ................................................................... 33
Capitolul 1 Introducere
2.1 Criptografia
Algoritmii de criptare cu chei simetrice (cele mai populare includ: Twofish, Serpent,
AES (Rijndael), Blowfish, CAST5, RC4, TDES, IDEA) se pot mpri n dou categorii: cifru
pe blocuri i cifru pe flux. Cel mai celebru cifru simetric pe blocuri, DES (Data Encryption
Standard) are deja peste 20 de ani. El este primul standard dedicat proteciei criptografice a
datelor de calculator. Progresele tehnologice au impus nlocuirea DES-ului care a devenit
vulnerabil. S-a demonstrat de curnd c, folosind o main paralel complex, se poate gsi,
ntr-un timp de aproximativ 60 de ore, o cheie de 56 de bii cu care a fost criptat un bloc de
text clar. Din acest motiv, n 2000, organizaia guvernamental american NIST (National
Institute of Standards and Technology) a selectat algoritmul Rijndael (AES) [12], dezvoltat de
doi criptografi belgieni, Joan Daemen i Vincent Rijmen, s fie noul standard n criptografie
simetric.
semnturile digitale ar fi sigilarea unui plic folosind un sigiliu personal. Plicul poate fi deschis
de oricine, dar sigiliul personal este cel care verific autenticitatea plicului. Matematic, cele
dou chei sunt legate, ns practic nu se pot deriva una din cealalt. Avantajul evident const
n faptul c cheia secret este cunoscut doar de o singur entitate, i nu trebuie trimis
niciodat, fiind astfel aproape imposibil de atacat cu succes, n cazul n care este folosit
corect.
10
Criptosistemul RSA [13] este unul dintre cei mai cunoscui algoritmi criptografici cu
chei publice, i este de asemenea primul algoritm utilizat att pentru criptare, ct i pentru
semntura electronic. Algoritmul a fost dezvoltat n 1977 i publicat n 1978 de Ron Rivest,
Adi Shamir i Leonard Adleman la MIT i i trage numele de la iniialele numelor celor trei
autori. Algoritmul implic trei stri: generarea cheilor, criptarea i decriptarea [14]. n acest
moment, cea mai eficient metod de a realiza aceasta este descompunerea n factori primi a
lui n, iar acesta nseamn un nivel de dificultate similar cu problema factorizrii. Cel mai
mare numr factorizat vreodat avea 663 bii, iar cheile folosite de obicei au o lungime de
1024 sau 2048 bii, ceea ce demonstreaz sigurana acestui algoritm. Perechea de chei se
genereaz dup urmtorii pai:
1. Se genereaz dou numere prime, de preferat mari, p i q;
2. Se calculeaz
Se poate numi o funcie hash (message digest) orice procedur bine definit sau o
funcie matematic care convertete o cantitate mare de date (de dimensiuni variabile) ntr-un
alt set de date, de obicei mult mai redus ca dimensiune, i de lungime fix. Funcia este
ireversibil, iar aceleai date de intrare va avea ca rezultat aceleai date de ieire daca se
aplic aceeai funcie hash pe ele. Pentru hash-urile bune, coliziunile (dou texte clare diferite
11
care produc acelai hash) sunt extrem de dificil de gsit. Funciile hash sunt folosite n mai
multe domenii, de exemplu pentru a accelera cutrile n tabele, sau baze de date mari, ca
sume de control, coduri de corectoare de erori, sau n criptografie, componente n schemele de
semntur digital. Cele mai des folosite funcii hash in criptografie sunt MD5 (Message
Digest Algorithm 5) i SHA1 (Secure Hash Algorithm), cea din urm fiind mai sigur. Putei
vedea rezultatul celei dou funcii menionate aplicate pentru textul Hello World n Tabelul
1.
Tabel 1 Rezultatele funciilor hash MD5 i SHA1
MD5
2ef7bde608ce5404e97d5f042f95f89f1c232871
SHA1
ed076287532e86365e841e92bfc50d8c
Protocoalele de securitate, cum sunt cele folosite pentru autentificare, sunt predispuse
la greeli de proiectare de multe tipuri. De-a lungul timpului, au fost propuse multe
formalisme pentru a investiga i analiza protocoalele cu scopul de a vedea dac au defecte.
Dei uneori aceste formalisme s-au dovedit utile, acestea nu sugereaz reguli de proiectare, nu
sunt n mod direct utile pentru prevenirea defectelor.
n [16] sunt prezentate principiile proiectrii protocoalelor de securitate. Aceste
principii nu sunt necesare pentru a asigura corectitudinea, dar nu sunt nici suficiente. Ele sunt
utile pentru c folosirea lor simplific protocoalele i previne repetarea unor confuzii i greeli
deja descoperite i publicate. Principiile sunt formulate pentru a evita anumite aspecte ale
protocoalelor care sunt greu de analizat. Dac aceste aspecte sunt evitate, devine mai puin
necesar s se recurg la folosirea metodelor formale. Principiile sunt indicaii informale i
sunt utile independent de orice logic.
Un protocol este un set de reguli sau convenii care definesc un schimb de mesaje ntre
doi sau mai muli parteneri. Aceti parteneri sunt persoane, procese sau calculatoare, care vor
fi numii n continuare interlocutori. ntr-un protocol de securitate toate sau o parte din mesaje
sunt criptate n ntregime sau parial. n acest context criptarea i decriptarea sunt definite ca
fiind transformri dependente de cheie ale unor mesaje care pot fi inversate doar prin folosirea
unei chei stabilite. Aceste chei pentru criptare i decriptare sunt aceleai sau pot fi diferite n
funcie de algoritmul de criptare folosit.
n continuare sunt prezentate aceste principii pentru proiectarea protocoalelor de
securitate. Sunt prezentate dou principii de baz, primul fiind preocupat de coninutul
mesajului, iar al 2-lea este preocupat de circumstanele n care un mesaj se comport corect:
1. Fiecare mesaj ar trebui s specifice ce nseamn, ce conine, interpretarea lui ar
trebui s depind doar de coninutul su. Ar trebui s se poat scrie o propoziie care s
descrie coninutul mesajului.
2. Condiiile n care un mesaj se comport conform ateptrilor ar trebui specificate
clar pentru ca oricine modific un protocol s vad dac acestea sunt acceptabile sau nu.
13
{X }K
- mesajul X este criptat cu cheia K i oricine cunoate inversa lui K (este K n criptarea
simetric i K 1 n cea asimetric) poate decripta mesajul, iar dac K este secret putem vedea
{X }K
este uneori folosit pentru garantarea autenticitii. n acest caz este de presupus c
doar emitorul corect cunoate cheia secret pentru a cripta mesajul. Criptarea
contribuie clar la sensul general al mesajului.
15
Principiul 9: o cheie se poate s fi fost folosit recent, pentru criptarea unui nonce de
exemplu, i totui s fie destul de veche i posibil compromis. Folosirea recent nu face ca
cheia s par mai sigur dect nefolosirea ei recent.
Principiul 10: dac o codare este folosit pentru a prezenta sensul unui mesaj, atunci ar
trebui s fie posibil s spui ce codare este folosit. n cazurile comune unde codarea este
dependent de protocol, ar trebui s fie posibil s se deduc c mesajul aparine acelui
protocol, i mai exact aparine unei rulri particulare a protocolului, i s se afle numrul
mesajului n acest protocol.
Principiul 11: proiectantul protocolului ar trebui s tie care sunt relaiile de ncredere
de care depinde protocolul su i de ce sunt necesare aceste dependene. Motivele pentru care
o relaie particular de ncredere s fie acceptabil ar trebui explicit bazate pe judecat i
politici dect pe logic.
coninnd valoarea v, dar ntr-un alt context criptografic. De aici poate conclude c o alt
entitate, avnd n posesie cheia relevant K a recepionat i a transformat mesajul care
coninea valoarea v. Dac cheia K este secret, aceast entitate nu poate fi penetratorul, deci
trebuie s fie un participant reglementar. Testele de autentificare [19] ofer suficiente condiii
ca s putem dovedi c aceste schimbri a formei criptografice sunt aciunile unui participant
regular. Putem deosebi dou tipuri de teste de autentificare:
Teste de ieire: o valoare unic a poate fi transmis numai n form criptat
{|a|}K , unde cheia K-1 este secret. Dac mai trziu un mesaj primit
conine valoarea a n afara contextului {|a|}K , nseamn c un participant
regular a fost responsabil de transformarea {|a|}K a . Este un test
de ieire pentru c elementul criptat ias.
Teste de intrare: dac, n schimb, a este primit ntr-o form criptat {|a|}K
dar nu a fost trimis n acest context, i cheia K este secret, atunci putem
afirma din nou c transformarea nu a fost efectuat de un penetrator. Testul
care conine transformarea a {|a|}K este o un test de intrare pentru
c elementul criptat intr.
Dac o valoare unic a este transmisa intr-o form criptat {|h|}K, i primit
napoi ntr-o alt form criptat {|h|}K , iar cheile K-1 i K sunt secrete,
atunci este un test i de intrare, i i de ieire.
Dac este de ateptat ca dou sau mai multe protocoale de securitate s ruleze n
paralel trebuie s se determine dac un protocol afecteaz securitatea celorlalte protocoale.
Acest lucru se realizeaz analiznd independena protocoalelor implicate. Cnd mai multe
protocoale de securitate ruleaz combinate pentru intruii apar noi oportuniti pentru a obine
mesajele. Aceast combinare de protocoale s-a dovedit o cauz semnificativ a eurii
protocoalelor i face mult mai dificil analiza protocoalelor. A fost dovedit o problem n
aplicarea metodelor formale protocoalelor de securitate.
Un protocol, numit protocol primar, este independent de alte protocoale, numite
protocoale secundare, dac protocolul primar i ndeplinete scopul de securitate fr a
depinde dac un protocol secundar ruleaz n acelai timp (1). Pentru dovedirea independenei
protocoalelor au fost folosite spaiile strand. Un strand este o secven de mesaje transmise i
17
recepionate. Protocoalele de securitate sunt modelate cu ajutorul acestor spaii strand. n [20]
este propus reprezentarea protocoalelor de securitate folosind un model canonic care
permite realizarea unei analize sintactice pentru determinarea independenei protocoalelor.
Construirea mesajelor dup modelul propus este realizat prin nlocuirea fiecrei componente
a mesajului din specificarea obinuit cu un tip. n modelul canonic propus, mesajele
schimbate de participani sunt reprezentate sub forma unor construcii sintactice, evideniind
structura mesajelor care influeneaz direct independena protocoalelor. Bazndu-se pe
cunotinele fiecrui participant se modeleaz viziunea fiecrui participant asupra aceluiai
mesaj. Primul pas este mbuntirea specificaiilor obinuite folosind cunotinele
participanilor pentru a se observa clar care sunt componentele mesajului care pot fi validate
de participani. Pornind de la aceast reprezentare este construit un model canonic, numit
model de tipuri, care nlocuiete componentele mesajelor cu tipul lor corespunztor,
reprezentndu-se astfel explicit structura mesajului. Aceast reprezentare permite realizarea
analizei sintactice pentru determinarea independenei protocoalelor.
Tipurile componentelor mesajelor sunt:
Kt : cheie
r: rol
n: nonce
u: tip necunoscut
constituie, de obicei, din una sau mai multe autoriti de certificare (CA), un container cu
certificate, i documentaia ce include politica de certificare. ntr-un sens mai larg, se poate
spune c PKI integreaz certificatele digitale, criptografia cu cheie public i noiunea de
autoritate de certificare ntr-o arhitectur de securitate a reelei.
19
21
O interfa API este un set de funcii, structuri de date, clase de obiecte i/sau
protocoale accesibile din librrii, sau oferite de serviciile sistemului de operare, pentru a
suporta crearea aplicaiilor. Un program care ofer funcionalitatea descris de interfaa API
este implementarea interfeei API. Interfaa API n sine este abstract, n sensul c specific
instana dar nu se implic n detalii de implementare. Un API poate fi dependent de un limbaj,
dar i independent, adic poate fi folosit din mai multe limbaje de programare. Standardul
POSIX (Portable Operating System Interface for Unix) definete un API care permite scrierea
unor game mari de funcii de baz n aa fel nct s fie compatibile cu mai multe sisteme de
operare. Cteva API-uri populare includ: ASPI pentru interfaa SCSI, DirectX pentru
Microsoft Windows, OpenGL cross-platform 3D, Carbon i Cocoa pentru Macintosh, etc.
Cteva principii de baz n proiectarea unui API: [24] s fac un singur lucru, dar s-l
fac bine funcionalitatea s fie uor de explicat. S fie ct se poate de mic, dar s-i
satisfac cerinele poi s adugi mai trziu, dar e mai greu s scoi. Implementarea nu ar
trebui s influeneze API-ul. Un aspect important, i un scop important al fiecrui API este s
ascund informaiile irelevante, clasele i membrii ar trebui s fie privai, ct posibil. Numele
membrilor publici s fie sugestive, dar API-ul s aib o documentaie detaliat. n general s
fie uor de nvat, uor de folosit chiar i fr documentaie, greu de folosit incorect.
realizat cu ajutorul XPFE (Extreme Portability Front End ), o tehnologie dezvoltat pentru a
economisi timp datorit dezvoltrii open-source i care s-a dovedit o inovaie.
XPFE folosete o serie de standarde web existente cum ar fi Cascading Style Sheets
(CSS) (un limbaj cu ajutorul cruia se creeaz aspectul grafic al aplicaiei), XUL (un dialect al
limbajului XML utilizat pentru descrierea interfeelor grafice), JavaScript (un limbaj pentru
script-uri cu o sintax asemntoare cu cea a limbajului C), RDF (un dialect al XML utilizat
pentru salvarea datelor) i XPCOM (un sistem pentru descoperirea i administrarea obiectelor
care permite JavaScript sau oricrui limbaj pentru script-uri s acceseze librriile C i C++ ).
Dezvoltarea de aplicaii se realizeaz folosind aceste tehnologii combinate cu limbaje de
programare cum ar fi C, C++, Python i Interface Definition Language ( IDL ).
2.6.2 XPCOM
Majoritatea componentelor XPCOM sunt scrise n C sau C++ cu NSPR la baz, dar dac
interfeele lor utilizeaz exclusiv tipuri de date definite de XPIDL ele pot fi accesate uor de
limbaje ca JavaScript prin intermediul tehnologiei XPConnect. JavaScript este de obicei
limbajul care asigur legtura dintre interfaa cu utilizatorul i componentele de la baza
platformei.
25
3.1 Cerine
Se consider un sistem format din servere (Service Provider / SP) care gzduiesc
diferite servicii n mod request-response (cerere-rspuns). Pentru a avea acces la resursele
disponibile pe aceste servere, clienii trebuie s se autentifice. n Fig. 4 este prezentat
arhitectura unui astfel de sistem. Fiecare dintre servere gzduiete un serviciu de autentificare,
nu se bazeaz pe un punct central fix de autentificare.
un proces prin care o entitate verific dac o alt entitate este cine sau ce pretinde a fi. Aceast
entitate poate fi un utilizator, un cod executabil sau un calculator. Verificarea identitii unui
proces de la distan este dificil i necesit protocoale complexe de securitate bazate pe
criptografie. Autentificarea n modelul meu se face pe baza numelui de utilizator i parol.
Clientul se va conecta la home serverul lui, adic unde a fost nregistrat, iar serverul verific
dac este salvat vreun utilizator cu acel nume la el. Dac numele clientului se regsete n
baza de date la server, se ncepe protocolul de autentificare care va asigura transmiterea
datelor clientului n siguran. (pasul 1 din Fig. 5) Protocolul se folosete de infrastructura
cheilor publice, i va cripta mesajul clientului cu cheia public a serverului. Dac vreun client
nu are cheia public a unui server la care vrea s se conecteze, sau certificatul nu este valid,
nainte de conectare va cere certificatul clientului de la serverul respectiv, care conine cheia
public.
vedea n Fig. 5, pasul 2. Aceste informaii secrete a clientului vor fi trimise doar o singur
dat , asta fiind important nu numai din punctul de vedere al confortului, ci i al securitii.
Dup autentificare, serverul va genera perechea de chei RSA i certificatul clientului. Aceste
certificate vor fi folosite de acum ncolo pentru autorizare n sistem, deci trebuie s fie create
i folosite n aa fel nct s asigure un nivel securitate ridicat. Acest certificat va conine
cteva informaii despre utilizator (numele, locaia, organizaia, adresa e-mail, etc), despre
certificat (algoritmul de criptare, rezultate hash, data expirrii), dar i date despre emitent,
pentru verificarea autenticitii. Certificatul este semnat digital cu cheia secret a serverului,
protejnd-ul astfel de orice modificare a coninutului acestuia. Certificatele folosite de mine,
X.509v3, permit adugarea unor extensii la setul de cmpuri predefinite, unde se pot nscrie
comentarii sau date alese de utilizator. Aceste cmpuri vor conine permisiunile clienilor care
vor servi la controlul accesului n reea, dup un model bazat pe roluri (role-based access
control / RBAC). Controlul accesului se refer la acordarea sau refuzul de privilegii la o
entitate dup autentificare. Un privilegiu este un drept pe care l are un utilizator. Unele
operaii sunt considerate privilegiate i trebuie atribuite doar persoanelor de ncredere.
Utilizatorilor nu se vor atribui direct permisiunile, ci acetia le vor dobndi prin rolurile pe
care le iau n cadrul reelei. Astfel gestionarea permisiunilor utilizatorilor, sau adugarea
permisiunilor utilizatorilor noi se face uor. Rolurile sunt salvate n aceeai baz de date ca i
numele de utilizator i parola. n pasul 3, Certificatul i cheia secret vor fi trimise clientului
via canale securizate. Clientul are n posesie un certificat valid, care poate fi folosit ca un
paaport pentru a se mica liber i a primi acces la oricare dintre servere din reea unde are
permisiune. Certificatul i cheia secret vor fi salvate pentru alte di, avnd o valabilitate
ndelungat, atta timp ct acesta nu a expirat, poate fi folosit pentru a se conecta la alte
servere. Dac a expirat, se contacteaz home serverul, i se repet paii 1-3.
Pasul 4 din Fig. 5 reprezint conectarea la unul dintre serverele de resurse, folosind
certificatul generat anterior. Serverul verific certificatul, adic numele s fie identic cu cel al
clientului, s nu fie expirat, s fie emis de un server cunoscut din reea i semntura digital a
emitentului. Pentru verificarea semnturii se folosete cheia public a serverului care a
generat certificatul. De regul fiecare server are o copie dup certificatele ale celorlalte
servere din reea, dar n caz contrar se poate face rost de el cu uurin, cunoscnd adresa
serverului (pasul 5). Dac verificarea a fost efectuat cu succes, i clientul are drepturi de
acces la acel server, se va genera o cheie secret. Aceast cheie se va folosi pentru criptarea
datelor att de la client la server ct i vice-versa. Cheia va fi folosit de algoritmul de criptare
simetric, AES, i este valid doar pentru sesiunea curent. Dac cheia a expirat, clientul va
29
trimite nc odat certificatul pentru a solicita o alt cheie. Durata de via scurt a cheilor
asigur o protecie ridicat mpotriva atentatelor asupra reelei. Cererile ctre serviciul de
resurse i datele trimise ca rspuns de ctre server vor fi criptate cu aceast cheie.
n Fig. 6 este prezentat arhitectura propusa a sistemului pentru care s-au formulat
cerinele. Sunt prezentate componentele din care este format i legturile dintre acestea.
Baza de date: fiecare server se poate conecta la o baz de date pentru a stoca
utilizatorii nregistrai. Aceste date se acceseaz de ctre serviciul de
autentificare doar o singur dat pentru fiecare client. Baza de date mai conine
o list cu fiecare server disponibil din reea.
31
La
conexiune
acesta
creeaz
instan
modulului
Listen Thread: firul de execuie genereaz evenimente care vor rula anumite
funcii ale modulului. Aici se creeaz canalele de comunicaie, se verific
starea fiecrui modul activ i preluarea mesajelor.
32
Acceseaz
baza
de
date,
controleaz
componenta
33
Dup pornirea serviciilor, modulul XServer creeaz cele dou servicii, care la rndul
lor sunt iniiate, i se trec n stare de ateptare de conexiuni noi de la clieni.
nseamn c cheia nu a fost corect. n acest caz, clientul este deconectat. n caz contrar, se
proceseaz mesajul clientului, si n funcie de natura acestuia se va genera rspunsul.
Momentan acest serviciu poate procesa dou tipuri de cereri: s trimit lista cu fiiere
disponibile, i s trimit unul dintre aceste fiiere napoi la client. n primul caz se parcurge
recursiv lista directoarelor care au fost adugate ca resurse, i se construiete o list cu toate
fiierele, calea acestora i mrimea fiierului. Serviciul, i API-ul suport filtrarea tipurilor de
fiiere, pentru rezultate mai precise. Aceast list cu fiiere va fi criptat cu cheia secret,
folosind algoritmul de criptare simetric AES, i trimis clientului. La recepionare se
decripteaz mesajul, se verific integritatea listei, i se copiaz in locaie de memorie
specificat de utilizator. n cazul celuilalt tip de mesaj, clientul solicit un fiier de la serviciu.
Se decripteaz cererea, se verific dac fiierul exist i dac se afl n directorul de resurse.
n caz afirmativ, se ncarc fiierul ntr-un buffer, i se cripteaz cu aceeai algoritm. La
recepionarea fiierului de ctre client, ca i n cazul anterior, se decripteaz i se copiaz ntrun buffer specificat de utilizator.
optime, de 100 de milisecunde timp de rulare, ceea ce practic nu este detectabil de utilizator.
Dup conectare, sunt disponibile dou funcii pentru a interaciona cu server: unul pentru a
cere lista de fiiere gzduite aici, i altul pentru a solicita un fiier din aceast list. Filtrarea
listei n funcie de extensia fiierelor se poate face pe partea de client, pentru a gsi obiectul
cutat mai uor. Momentan nu exist un indicator de progres pentru transferul fiierului, dar
se poate aduga mai trziu. Interfaa mai ofer cteva funcii, ca de exemplu: interogarea
componentei despre erori, solicitarea listei cu serveri din reea, simularea unui pachet ping,
pentru a msura timpul de rspuns al unui server, scrierea fiierelor pe un dispozitiv de
stocare fizic, schimbarea utilizatorului, etc. Toate aceste procese se fac automat i ascuns, dar
totui tot traficul ntre participani este confidenial, datorit protocoalelor de securitate i
criptografiei performante.
Componentele majore i relaiile ntre ele sunt prezentate n Fig. 10.
37
XClient: reprezint modulul principal care leag componentele interioare ntre ele, i
face legtura cu API-ul.
Acceseaz
baza
de
date,
controleaz
componenta
cerere. Fiecare server are asociat un nume, o adres i o opional o descriere a serverului sau a
resurselor gzduite. Tabelul users stocheaz datele despre utilizatorii nregistrai la serverul
respectiv. Fiecare utilizator nregistrat are asociat un nume de utilizator, o parol i un rol n
cadrul reelei. Aceste date se verific la autentificare, i se genereaz certificatul pe baza lor.
Connect: conectare la un server din reea, adresa acestui server fiind precizat prin
parametru. Clientul se conecteaz la home server i va solicita un certificat, n
cazul n care nu are deja unul valid, iar dup aceea la serverul precizat. Conectarea
la cele dou servere se face automat i cu blocare pn terminare. Un al doilea
parametru va returna numrul de milisecunde scurse pn la obinerea
certificatului respectiv a cheii pentru aceast sesiune. Funcia returneaz o expresie
boolean, semnificnd reuita operaiei.
bool Connect( std::string ResourceServerAddress, double
&TimeElapsed );
std::string getLastErrorMessage();
PingServer: simuleaz un ping ctre un server din reea. Singurul parametru este
adresa serverului ales. Funcia este cu blocare i returneaz timpul trecut n
milisecunde pn la recepionarea rspunsului de la server.
int PingServer( std::string HostName );
40
WriteFile(
std::string
FileName,
std::vector<
char
>
FileBuffer );
Componenta XServer pune la dispoziie cteva funcii care permit crearea unui server
de autentificare i de resurse funcional.
startServices
const
int
AuthServicePort,
const
int
ResourceServicePort );
41
42
1.
2.
3.
4.
43
Primul pas reprezint iniierea conexiunii de ctre client (B). Mesajul conine tipul
mesajului, acesta fiind solicitare de autentificare pe baza parolei, i numele clientului.
Serverul (B) decide dac poate accepta o nou conexiune, i verific dac numele clientului se
gsete la el n baza de date. n caz afirmativ, se genereaz un nonce, se aplic funcia hash, i
se trimite napoi clientului. Mesajul serverului va conine fie acceptarea conexiunii, fie un
mesaj de eroare cu motivul eurii. Dac conexiunea este acceptat, clientul va aplica aceeai
funcie hash pe hashul primit de la server, i va genera o cheie simetric care va fi folosit
pentru criptarea cheii secrete din certificat. Clientul n acest moment are n posesie certificatul
serverului, fie avndu-l salvat, fie cerndu-l nainte de iniierea conexiunii. Acest certificat
conine cheia public a serverului (pkA), i va fi folosit pentru criptarea prilor secrete a
mesajului, adic nonce-ul, numele de utilizator, parola i cheia generat. Datele binare sunt
codate cu Base64 nainte de trimitere. Acest text cifra poate fi decriptat doar cu cheia secret a
serverului (skA), iar dup decriptare, se verific prima dat nonce-ul. Acesta se face prin
aplicarea funciei hash pe hash-ul salvat n pasul anterior, i compararea rezultatului cu cel din
mesajul trimis de client. Dac cele dou iruri nu coincid, se trimite un mesaj de eroare, i se
termin conexiunea. Acesta este un Dac verificarea a fost efectuat cu succes, semnificnd
c mesajul este recent, se caut numele clientului n baza de date i se compar parola trimis
de client cu cea stocat n baza de date. Dup acesta se genereaz certificatul pentru client,
care va conine numele i permisiunile solicitantului, numele emitentului, perioada de
validitate, cheia public generat i alte informaii necesare pentru verificarea certificatului.
Certificatul este semnat digital cu cheia secret a serverului. Perechea cheii din certificat este
criptat cu cheia generat de client. Hash-ul nonce-ului este procesat similar ca n pasul
precedent, i mpreun cu cheia criptat i certificatul generat vor fi criptate cu cheia secret a
serverului, adic semnat digital. Acesta este un test de autentificare de intrare, pentru c
nonce-ul trimis va fi reprimit de ctre client ntr-o form criptat cu o cheie care este
cunoscut numai de ctre server. Mesajul este autentic, dar pentru a se asigura c este i
recent, se verific nonce-ul. Cheia secret este decriptat cu cheia generat anterior, i va fi
salvat mpreun cu certificatul generat.
Dup ce clientul are un certificat valid, se poate folosi de el pentru a primi acces la
anumite servere din reea, n funcie de permisiunile fiecruia. Acest certificat ar fi de ajuns
pentru a se autentifica i pentru a transmite date criptate, dar algoritmul de criptare RSA este
44
mai ncet dect algoritmii de criptare cu chei simetrice. De aceea, cu ajutorul cheilor din
certificat se negociaz o cheie secret simetric, care va fi folosit pentru criptarea datelor ntre
client i serverul de resurse ales. Pentru c cheile simetrice pot fi descoperite mai uor dect
cele asimetrice, o cheie nou se va genera la fiecare conectare, i va fi valabil doar pe durata
sesiunii curente. Aceast cheie trebuie s rmn secret, dar fiindc este generat de ctre
server, transmisia ei necesit protecie, oferit de acest protocol de securitate. Protocolul
este iniiat de client la fiecare conectare la orice server de resurse, i are urmtorii pai:
1.
2.
3.
4.
n primul pas clientul (B) iniiaz conexiunea, trimind numele i tipul mesajului:
autentificare cu certificat. Serverul rspunde fie cu acceptare, fie cu un mesaj de eroare i
motivul acestuia. Mesajul va conine i un nonce generat de acest server. Clientul aplic
funcia hash asupra nonce-ului, i l semneaz cu cheia lui secret. Aceast semntur i
certificatul va fi trimis napoi serverului. Nonce-ul semnat poate fi verificat cu cheia public
din certificat, dar nainte de acesta, trebuie verificat i autenticitatea certificatului. Se verific
hash-urile din certificat, perioada de valabilitate, anumite flaguri care specific dac emitentul
este sau nu un Certificate Authority (CA), i bineneles semntura din certificat. Aceast
semntur a fost fcut cu cheia secret a emitentului, deci se verific cu cheia public
pereche. Dac acest server nu are certificatul serverului emitent, l solicit i extrage cheia
public pentru a verifica semntura din certificat. Dac certificatul nu poate fi validat,
autentificarea va eua. n caz contrar, se extrage cheia public din certificat i se verific
semntura clientului. i aici ntlnim un test de autentificare de intrare, pentru c elementul
criptat intr: N {|N|}. Acest test asigur c mesajul este recent i c este trimis de
posesorul certificatului. Opional, se verific permisiunile nscrise n certificat, i n funcie de
regulile serverului anumite clase de utilizatori sunt filtrate. Se genereaz o cheie privat, i
mpreun cu nonce-ul hash-uit, este criptat cu cheia public a clientului, extras din certificat.
Tot mesajul este semnat digital de ctre server i transmis clientului. La recepionare se
decripteaz mesajul, i se verific nonce-ul, comparndu-l cu cel salvat anterior. Se verific i
semntura digital a serverului, i se salveaz cheia de sesiune. Aceast cheie va fi folosit
doar o singur sesiune, i doar cu acest server. Toate cererile de resurse i rspunsurile sunt
45
criptate cu aceast cheie. La reconectare se ruleaz acest protocol nc odat pentru a genera o
cheie nou.
1.
2.
Primul pas specific tipul mesajului i numele solicitantului, iar al doilea pas conine
rezultatul cererii, i certificatul solicitat. Fiindc certificatul conine toate elementele de
securitate pentru a verifica autenticitatea lui, nu este nevoie de un protocol complex pentru a
asigura transmisia acestuia.
46
Gestionarea
serviciilor
se
face
de
clasa
47
firul de execuie. Pentru a lansa un fir de execuie trebuie derivat o clas din XThread i
suprascris metoda Run(), instaniat clasa, apoi se va apela metoda start(). Firul de execuie
va rula pn cnd metoda Run() i va ncheia execuia sau este apelat metoda stop().
Metodele isRunning() i isExited() returneaz starea firului de execuie.
Clasa XTwinThread ncapsuleaz dou fire de
execuie, unul prin motenirea clasei XThread, iar al doilea
printr-un membru de tipul clasei XThreadRunner care
motenete la rndul ei clasa XThread. Membrul m_thread
este un pointer ctre instana clasei XThreadRunner iar
metodele tstart(), tstop(), tisRunning() i tisExited() se
folosesc pentru a porni, opri, respectiv interoga starea celui
de-al doilea fir de execuie.
Clasa
XTCPSocket
(Fig.
14)
ncapsuleaz
49
51
XTCPClientChannel
motenesc
unele clase
53
4.1.4 Servicii
54
Diagrama claselor de comunicaie i relaiile ntre ele sunt prezentate n Fig. 19.
55
56
4.2 XServer
57
58
59
61
XISvConnHandler. Notificrile sunt aceeai, singurul lucru care difer este procesarea
mesajelor.
Serviciul se ocup de distribuirea fiierelor n directoarele partajate. Aceste directoare
pot fi setate prin intermediul funciei setResourceDir() la cel mai nalt nivel, din API. Acesta
va seta membrul m_resDir, care va fi citit de fiecare solicitare a listei. Clientul poate cere lista
cu fiiere, care va conine numele i calea fiierelor, ct i mrimea acestora.
Fiindc aceste informaii sunt trimise criptate, utilizatorii trebuie s se nregistreze
nainte de a solicita orice date. Serviciul de autentificare trimite un mesaj intern, cu serviciul
de resurse ca destinatar. Acest mesaj este trimis cnd un client se autentific cu un certificat,
i se genereaz o cheie secret de sesiune. Mesajul va conine numele utilizatorului, i cheia
generat, care odat recepionat de serviciul de resurse va fi stocat ntr-o structur de tip
std::map. Orice cerere de informaii va conine numele utilizatorului, astfel serviciul ncarc
cheia i o va folosi pentru sesiunea curent. Dac numele utilizatorului este incorect, sau cheia
nu se potrivete, mesajul nu va putea fi decriptat, i se va rspunde cu un mesaj de eroare.
Cnd se primete un mesaj care solicit lista de fiiere, serviciul va parcurge
directoarele recursiv, formnd rspunsul cu toate datele necesare. Dac se cere un fiier, se
verific dac se afl n aceste directoare, i n caz afirmativ, se ncarc n memorie, ntr-un
format std::vector<char>. n ambele cazuri datele sunt criptate i trimise clientului.
62
4.3 XClient
componentei
XClient
are
oferite
de
API-ul
OpenSSL:
PEM_write_PrivateKey
getFileList(): Prima dat se verific dac utilizatorul este autentificat, i dac are o
cheie valid. Se solicit lista de fiiere dup modelul prezentat n Fig. 25. Datele
recepionate sunt decriptate, se parcurge lista, i se adaug fiierele unul cte unul
n vectorul specificat de client.
64
65
Dup conectare se afieaz lista cu fiiere disponibile i detalii despre acestea. Clientul
permite salvarea fiierelor unul cte unul, salvarea tuturor fiierelor, sau doar deschiderea
fiierelor suportate. Qt suport mai multe tipuri de imagini, iar modulul Phonon suport i
clipuri video. Pentru a afia certificatele folosite pentru aceast sesiune se navigheaz pe
pagina Certificates, unde se pot solicita toate trei certificate. Pagina Activity Log ine o
eviden cu toate evenimentele din sesiunea curent, iar navignd pe pagina Switch User, se
poate schimba utilizatorul curent. Interfaa grafic, cu lista de fiierele i o imagine deschis
se poate vedea n Fig. 27.
66
Serverul are doar interfa consol, i afieaz evenimentele importante, care includ:
conectarea unui client, solicitrile de ctre ali participani, deconectarea clienilor, etc.
Serverul ine o eviden a tuturor clienilor conectai i timpul de conectare a acestora ntr-un
fiier local. Interfaa serverului se poate vedea n Fig. 28.
67
68
Rezultate experimentale
69
n Fig. 30 se vede timpul de generare a cheilor RSA. Aceast operaie necesit cele mai
multe resurse ale procesorului. Generarea unei chei dureaz aproximativ 80 ms, ajungnd la
aproape 600 ms la 10 generri de chei n paralel. Fiindc acest proces se bazeaz mai mult pe
puterea de procesare a procesorului, cea mai evident metod de a mbuntii timpul de
generare este de a folosi un procesor mai puternic. O alta metod ar fi folosirea unui procesor
dedicat doar pentru generare de chei, proiectat n special pentru aceast operaie.
70
Timpul de autentificare este afectat i de starea serverului, adic dac este inactiv, doar
ateptnd conexiuni, sau dac se afl in cursul procesrii datelor. n Fig. 31 se vede diferena
dintre aceste dou stri. Serverul la care s-a msurat autentificarea, cripteaz i transmite date
la ali doi clieni deja conectai. Timpul de autentificarea n acest caz crete cu 10% n cazul
autentificrii fr generare certificat, i cu aproximativ 25% dac se genereaz i certificat
pentru client.
71
72
73
Autentificare
Descrcare
Descrcare
Descrcare
fr certificat
cu certificat
date (50KB)
date (500KB)
date (6MB)
Local
270 ms
127 ms
61 ms
406 ms
11646 ms
LAN
392 ms
131 ms
73 ms
443 ms
11947 ms
Cluj Napoca,
478 ms
158 ms
85 ms
475 ms
12005 ms
Ljubljana, Slovenia
914 ms
359 ms
415 ms
3901 ms
39123 ms
Aarhus, Danemarca
678 ms
310 ms
414 ms
1178 ms
13102 ms
Islamabad, Pakistan
3916 ms
1681 ms
8818 ms
87167 ms
Wichita, Kansas,
1968 ms
814 ms
492 ms
4416 ms
36926 ms
Timp
Locaie server
Romnia
SUA
74
Concluzii
Bibliografie
Corporation,
Mozilla.,
XPCOM,
Cross
Platform
Component
Model,
http://www.mozilla.org/projects/xpcom, 2008
[12]
AES
Algorithm
(Rijndael)
Information,
http://csrc.nist.gov/archive/aes/rijndael
77
[25]
Joint
Technical
Standardization;
Committee
and
ISO/IEC
International
JTCI;
International
Electrotechnical
Organization
Commission.
for
Programming
78