This is an old revision of the document!
Responsabili: Cătălin Leordeanu, Mihai Dumitru, Andrei Stanca
Scopul acestui laborator este sa va familiarizeze cu notiunile de securitate si uneltele folosite in dezvoltarea aplicatiilor.
Criptarea este un mecanism folosit pentru a ascunde informatia, care poate oferi numeroase asigurari pentru emitator si receptor, printre care:
Prin aplicarea algoritmului de encriptie asupra unui mesaj si a unei chei se obtine un cifru. Analog, prin aplicarea algoritmului de decriptie asupra unui cifru si al unei chei se recupereaza un mesaj.
Criptarea simetrica implica folosirea unei singure chei atat pentru criptarea cat si pentru decriptarea datelor. Astfel, pentru orice mesaj M si pentru orice cheie K, trebuie sa se respecte urmatoarea egalitate:
D(E(M, K), K) = M
Presupunem ca Alice si Bob au aceeasi cheie secreta K, iar Alice vrea sa-i trimita mesajul M lui Bob:
TODO - Fig. Criptare Simetrica
Exemple de algoritmi de criptare simetrica:
AES, AES, 3DES, IDEA, Blowfish
Criptarea asimetrica presupune folosirea unei perechi de chei: una pentru encriptie, cealalta pentru decriptie. Ambii participanti la trafic au cate o pereche de chei. Cheia de encriptie este o cheie publica, absolut oricine o poate cunoaste si o poate folosi pentru a encripta un mesaj. Cheie de decriptie este o cheie privata (secreta), cunoscuta doar de proprietarul ei, acesta putand sa o foloseasca pentru a decripta mesaje encriptate cu cheia sa publica.
Astfel, pentru orice pereche de chei (P, S) si orice mesaj M, trebuie sa se respecte urmatoarea egalitate:
In unele sisteme de criptare asimetrica, este posibila si encriptarea cu cheie secreta, decriptarea cu cheie publica:
Presupunem ca Alice vrea sa-i trimita lui Bob mesajul M:
Deoarece Bob e singura persoana care cunoaste SB, este singurul care poate decripta C. Nici macar Alice nu mai poate recupera mesajul original din C. Similar, daca Bob doreste sa trimita un raspuns, el trebuie sa obtina cheia publica a lui Alice.
Un algoritm de criptare asimetrica larg utilizat este RSA.
Rezumatul (hash) unui mesaj este un sir de biti de lungime fixa, generat cu ajutorul unei functii de dispersie neinversabile aplicata mesajului. Funct, ia de dispersie H trebuie sa aiba urmatoarele proprietati:
Rezumatele pot fi utilizate pentru a verifica rapid transmisia corecta a unui mesaj (rezumatul este transmis impreuna cu mesajul si destinatarul verifica daca rezumatul primit coincide cu rezumatul recalculat de catre el) si pentru realizarea semnaturilor digitale.
Exemple de algoritmi pentru calculul de rezumate: MD5, SHA-1, SHA-2, SHA-3
Semnaturile digitale asigura autenticitatea mesajelor, verificarea semnaturilor oferind garantiile:
Pentru un sistem foarte simplu de semnatura digitala, sa consideram exemplul in care Alice doreste sa-i trimitaa lui Bob un mesaj M, folosindu-se de un sistem de criptare asimetrica si o functie de hashing.
Pentru ca doua entitati sa poata comunica sigur utilizand sistemul de criptare asimetrica, fiecare trebuie sa cunoasca cheia publica a celeilalte si sa nu existe riscul ca un intrus sa substituie o cheia publica cu propria sa cheie publica. Una dintre solutiile utilizate la ora actuala pentru aceasta problema este certificarea cheilor de catre organizatii speciale numite autoritati de certificare (Certification Authority - CA).
O entitate care doreste un certificat trebuie sa se adreseze unei CA, autentificandu-se si furnizand cheia sa publica; autoritatea de certificare poate decide sa acorde persoanei certificatul, care va contine identitatea si cheia publica a solicitantului. Certificatul este semnat digital de catre autoritatea de certificare. Formatul utilizat de obicei pentru certificate este X.509.
Autoritatile de certificare sunt organizate ierarhic, existand o serie de CA-uri ”radacina” care sunt bine cunoscute, alta serie de CA-uri certificate de CA-urile radacina s.a.m.d. In momentul in care este verificat certificatul unei entitati se verifica si autoritatea de certificare CA1 care l-a emis, si care are si ea un certificat de la o alta autoritate CA2; apoi se verifica CA2 si asa mai departe pana se ajunge la o CA in care se poate avea iıncredere sau la o CA radacina (astfel se formeaza un ”lant de incredere” sau o ”cale de certificare”). CA-urile radacina au certificate auto-semnate.
Informatii despre baza lantului de incredere sunt incluse in aplicatii (mail client, web browser etc.), sau in sistemul de operare, care serveste aplicatiile interesate.
OpenSSL este o implementare open-source a protocoalelor SSL si TLS. Pe langa API-uri pentru diverse limbaje de programare, aceasta ofera si un utiliatar CLI, openssl. Sintaxa pentru utilizarea in linia de comanda este urmatoarea:
openssl comanda [optiuni] [argumente]
Printre comenzi se numara:
Pentru inceput, emiteti urmatoarea comanda pentru a verifica versiunea de OpenSSL pe care o folositi:
openssl version
Generarea cererii de certificat se realizeaza astfel. Exemplul urmator produce un fisier mycert.pem ce contine atat cheia privata, cat si cea publica. Certificatul va fi valid timp de 365 de zile iar cheia este neencriptata (optiunea –nodes).
openssl req \ -new -newkey rsa:1024 -nodes \ -keyout mykey.pem -out myreq.pem
Dupa apelul comenzii veti fi pusi sa raspundeti unei serii de intrebari legate de: Tara, Stat, Oras, etc.
Rezultatul va consta in crearea a doua fisiere: mykey.pem va contine cheia privata, iar myreq.pem va contine o cerere de certificat. Cererea de certificat este trimisa (pe canale sigure) unei autoritati de semnare (de exemplu VeriSign). Puteti verifica continutul informatiilor continute in cererea de certificat folosind:
# verificarea semnaturii openssl req -in myreq.pem -noout -verify -key mykey.pem # verificarea informatiilor openssl req -in myreq.pem -noout -text