Differences

This shows you the differences between two versions of the page.

Link to this comparison view

pc:laboratoare:12 [2020/01/04 22:41]
andrei.stanca [OpenSSL]
pc:laboratoare:12 [2022/06/02 13:08] (current)
dorinel.filip
Line 13: Line 13:
    * **Integritate** - nimeni altcineva nu poate modifica datele fara sa fie detectat    * **Integritate** - nimeni altcineva nu poate modifica datele fara sa fie detectat
    * **Autenticitate** - asigurarea ca interlocutorul este cine sustine ca este    * **Autenticitate** - asigurarea ca interlocutorul este cine sustine ca este
 +
 +<​note>​
 +Acordul in criptografia moderna este ca algoritmii de encriptie/​decriptie trebuie sa fie cunoscuti si aplicarea lor să depinda de un fragment de date, numit **cheie** - singura parte care trebuie tinuta secreta. Acesta e cunoscut ca [[https://​en.wikipedia.org/​wiki/​Kerckhoffs%27s_principle|principiul lui Kerckhoffs]].
 +</​note> ​
  
 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. 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.
Line 19: Line 23:
    * D(C, K) = M    * D(C, K) = M
  
-<​note>​ +
-Acordul in criptografia moderna este ca algoritmii de encriptie/​decriptie trebuie sa fie cunoscuti si aplicarea lor de depinda de un fragment de date, numit **cheie** singura parte care trebuie tinuta secreta.  +
-</​note> ​+
 ==== Criptare Simetrica ==== ==== Criptare Simetrica ====
  
Line 33: Line 35:
    - Bob primeste C si aplica algoritmul de decriptie pentru a recupera mesajul original M = D(C, K)    - Bob primeste C si aplica algoritmul de decriptie pentru a recupera mesajul original M = D(C, K)
  
-TODO - FigCriptare Simetrica+{{ :​pc:​laboratoare:​criptare_simetrica.png?500 |}}
  
 Exemple de algoritmi de criptare simetrica: ​ Exemple de algoritmi de criptare simetrica: ​
  
 [[https://​en.wikipedia.org/​wiki/​Advanced_Encryption_Standard|AES]], ​ [[https://​en.wikipedia.org/​wiki/​Advanced_Encryption_Standard|AES]], ​
-[[https://​en.wikipedia.org/​wiki/​Data_Encryption_Standard|AES]], +[[https://​en.wikipedia.org/​wiki/​Data_Encryption_Standard|DES]], 
 [[https://​en.wikipedia.org/​wiki/​Triple_DES|3DES]], ​ [[https://​en.wikipedia.org/​wiki/​Triple_DES|3DES]], ​
 [[https://​en.wikipedia.org/​wiki/​International_Data_Encryption_Algorithm|IDEA]], ​ [[https://​en.wikipedia.org/​wiki/​International_Data_Encryption_Algorithm|IDEA]], ​
Line 44: Line 46:
  
 <​note>​ <​note>​
-In cazul criptarii simetrice dificultatea provine din necesitatea existenti unui mecanism de securitate pentru distribuirea cheii secrete. In plus, nu este fezabil ca orice pereche de entitati care doresc sa comunice criptat sa impartaseasca un secret (e.g.google ar trebui sa aiba cate o cheie pentru fiecare client). Exista protocoale de schimbare de chei (__key exchange__),​ astfel incat doua entitati sa poata alege impreuna o cheie privata peste un canal de comunicare nesigur, astfel incat nimeni altcineva care poate vedea informatia transmisa sa nu poata determina cheia (si, deci, nici mesajele ulterioare, criptate cu cheia aleasa). Cel mai cunoscut astfel de protocol este DiffieHellman. Acesta este totusi nesigur in cazul atacurilor de tipul Man-in-the-Middle cand atacatorul poate intercepta mesaje si produce propriile mesaje. ​+In cazul criptarii simetrice dificultatea provine din necesitatea existenti unui mecanism de securitate pentru distribuirea cheii secrete. In plus, nu este fezabil ca orice pereche de entitati care doresc sa comunice criptat sa impartaseasca un secret (e.g.google ar trebui sa aiba cate o cheie pentru fiecare client). Exista protocoale de schimbare de chei (__key exchange__),​ astfel incat doua entitati sa poata alege impreuna o cheie privata peste un canal de comunicare nesigur, astfel incat nimeni altcineva care poate vedea informatia transmisa sa nu poata determina cheia (si, deci, nici mesajele ulterioare, criptate cu cheia aleasa). Cel mai cunoscut astfel de protocol este DiffieHellman. Acesta este totusi nesigur in cazul atacurilor de tipul [[https://​en.wikipedia.org/​wiki/​Man-in-the-middle_attack|Man-in-the-Middle]] cand atacatorul poate intercepta mesaje si produce propriile mesaje. ​
 </​note>​ </​note>​
 +
 +
 ==== Criptare Asimetrica ==== ==== Criptare Asimetrica ====
  
Line 71: Line 75:
 Pentru sistemele de criptare asimetrica, exista problema: cum putem fi siguri ca cheia publica primita chiar apartine cui credem ca apartine? (un atacator ar putea folosi un atac Man-in-the-Middle pentru a ne livra propria sa cheie). Pentru sistemele de criptare asimetrica, exista problema: cum putem fi siguri ca cheia publica primita chiar apartine cui credem ca apartine? (un atacator ar putea folosi un atac Man-in-the-Middle pentru a ne livra propria sa cheie).
 </​note>​ </​note>​
 +
  
 ==== Rezumate de mesaje ==== ==== Rezumate de mesaje ====
  
-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:​+Rezumatul (hash) unui mesaj este un sir de biti de lungime fixa, generat cu ajutorul unei functii de dispersie neinversabile aplicata mesajului. ​Functia ​de dispersie H trebuie sa aiba urmatoarele proprietati:​
    - Dandu-se un mesaj M, este usor de calculat H(M)    - Dandu-se un mesaj M, este usor de calculat H(M)
    - Dandu-se un rezumat H(M), este greu de calculat M    - Dandu-se un rezumat H(M), este greu de calculat M
Line 87: Line 92:
 [[https://​en.wikipedia.org/​wiki/​SHA-2|SHA-2]], ​ [[https://​en.wikipedia.org/​wiki/​SHA-2|SHA-2]], ​
 [[https://​en.wikipedia.org/​wiki/​SHA-3|SHA-3]] [[https://​en.wikipedia.org/​wiki/​SHA-3|SHA-3]]
 +
 +
 ==== Semnaturi digitale ==== ==== Semnaturi digitale ====
  
Line 104: Line 111:
    - Bob decripteaza C folosind cheia publica R0 = D(C, PA)    - Bob decripteaza C folosind cheia publica R0 = D(C, PA)
    - Daca R = R0, Bob are garantia ca mesajul a fost semnat de Alice si nimeni nu l-a modificat    - Daca R = R0, Bob are garantia ca mesajul a fost semnat de Alice si nimeni nu l-a modificat
 +
 +
 ==== Gestiunea cheilor publice ==== ==== Gestiunea cheilor publice ====
  
Line 113: Line 122:
  
 Informatii despre baza lantului de incredere sunt incluse in aplicatii (mail client, web browser etc.), sau in sistemul de operare, care serveste aplicatiile interesate. 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 ==== ==== OpenSSL ====
  
Line 122: Line 133:
  
 Printre comenzi se numara: Printre comenzi se numara:
-  * **ca** - utilizata pentru managementul unei autoritati de certificare (se pot genera certificate,​ care sunt stocate apoi intr-baza de date)+  * **ca** - utilizata pentru managementul unei autoritati de certificare (se pot genera certificate,​ care sunt stocate apoi intr-baza de date)
   * **dgst** - pentru calculul de rezumate de mesaje   * **dgst** - pentru calculul de rezumate de mesaje
   * **genrsa** - pentru generarea de chei RSA   * **genrsa** - pentru generarea de chei RSA
Line 134: Line 145:
 </​code>​ </​code>​
  
-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).+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). 
 + 
 +<​code>​ 
 +openssl req \ 
 +-new -newkey rsa:1024 -nodes \ 
 +-keyout mykey.pem -out myreq.pem 
 +</​code>​ 
 + 
 +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: 
 + 
 +<​code>​ 
 +# verificarea semnaturii 
 +openssl req -in myreq.pem -noout -verify -key mykey.pem 
 +# verificarea informatiilor 
 +openssl req -in myreq.pem -noout -text 
 +</​code>​ 
 + 
 +Dupa cum ati putut observa anterior, metoda de generare a cheii private folosita a fost RSA. Metoda folosita insa realizaza si o cerere de certificat. Puteti obtine daca doriti generarea doar a cheii private RSA emitand o comand a precum: 
 + 
 +<​code>​ 
 +# o cheie implicita pe 512-biti, afisata la iesirea stdout 
 +openssl genrsa 
 +# o cheie pe 1024-biti, salvata in fisierul mykey.pem 
 +openssl genrsa -out mykey.pem 1024 
 +# ca in exemplul anterior, dar cheia este protejata de o parola 
 +openssl genrsa -des3 -out mykey.pem 1024 
 +</​code>​ 
 + 
 +Pornind de la cheia privata puteti mai departe sa generati si o cheie publica corespunzatoare astfel: 
 + 
 +<​code>​ 
 +openssl rsa -in mykey.pem -pubout 
 +</​code>​ 
 + 
 +Generarea digest-urilor folosind optiunea //dgst// reprezinta un exemplu de capabilitate oferita de OpenSSL. 
 + 
 +<​code>​ 
 +# MD5 digest 
 +openssl dgst -md5 filename 
 + 
 +# SHA1 digest 
 +openssl dgst -sha1 filename 
 +</​code>​ 
 + 
 +Digesturile MD5 sunt similare celor create cu comanda //md5sum//, desi formatele de iesire difera. 
 + 
 +<​code>​ 
 +$ openssl dgst -md5 foo-2.23.tar.gz 
 +MD5(foo-2.23.tar.gz)= 81eda7985e99d28acd6d286aa0e13e07 
 + 
 +$ md5sum foo-2.23.tar.gz 
 +81eda7985e99d28acd6d286aa0e13e07 foo-2.23.tar.gz 
 +</​code>​ 
 + 
 +Digesturile pot fi chiar semnate pentru a va asigura ca ele nu pot fi modificate fara permisiunea explicita a proprietarului. 
 + 
 +<​code>​ 
 +# digestul semnat va fi foo-1.23.tar.gz.sha1 
 +openssl dgst -sha1 -sign mykey.pem -out foo-1.23.tar.gz.sha1 foo-1.23.tar.gz 
 +</​code>​ 
 + 
 +Ulterior, digestul poate fi verificat. Pentru aceasta aveti nevoie de fisierul din care digestul a fost generat, de digest, si de cheia publica a semnatarului. 
 + 
 +<​code>​ 
 +# pentru verificarea arhivei foo-1.23.tar.gz folosind foo-1.23.tar.gz.sha1 si cheia publica  
 +# pubkey.pem 
 +openssl dgst -sha1 -verify pubkey.pem -signature foo-1.23.tar.gz.sha1 foo-1.23.tar.gz 
 +</​code>​ 
 + 
 +Un alt exemplu de folosire a OpenSSL este si cel legat de criptarea/​decriptarea unor documente. Astfel, pentru criptare puteti emite o comanda precum: 
 + 
 +<​code>​ 
 +# cripteaza file.txt la file.enc folosind 256-bit AES in modul CBC 
 +openssl enc -aes-256-cbc -salt -in file.txt -out file.enc 
 + 
 +# acelasi lucru, dar iesirea este de data aceasta codata base64. de exemplu pentru email 
 +openssl enc -aes-256-cbc -a -salt -in file.txt -out file.enc 
 +</​code>​ 
 + 
 +In cadrul exemplului a fost folosit unul dintre algoritmii de criptografie suportati de OpenSSL. In practica insa puteti alege oricare dintre cei suportati. Pentru a vedea care sunt algoritmii inclusi in distributia OpenSSL pe care o folositi puteti emite: 
 + 
 +<​code>​ 
 +openssl list-cipher-commands 
 +</​code>​ 
 + 
 +Decriptarea fisierului rezultat anterior poate fi realizata astfel: 
 + 
 +<​code>​ 
 +# decriptarea fisierului binar file.enc 
 +openssl enc -d -aes-256-cbc -in file.enc 
 + 
 +# decriptarea versiunii base64 
 +openssl enc -d -aes-256-cbc -a -in file.enc 
 +</​code>​ 
  
 ==== Cerinte laborator ==== ==== Cerinte laborator ====
 +
 +Pentru analiza traficului, va recomandam sa folositi [[https://​www.wireshark.org/​|wireshark]].
 +
 +1. Obtineti certificatul de la google.com si identificati urmatoarele campuri:
 +   * algoritmul folosit pentru semnarea certificatului
 +   * entitatea care a eliberat certificatul
 +   * intervalul de timp in care certificatul e valid
 +   * cheia publica
 +
 +2. Porniti o unealta de monitorizare a traficului si logati-va pe o pagina prin http, apoi prin https (nu este nevoie de un login legitim, puteti introduce orice in campurile de credentiale). Analizati informatia disponibila in captura de trafic.
 +
 +Exemple de pagini http cu formular de login:
 +   * http://​login.onlineplanservice.com/​Login.aspx?​ReturnUrl=%2f
 +
 +3. Pentru login prin https, analizati portiunea de TLS handshake si identificati urmatoarele campuri:
 +   * versiunea de TLS folosita
 +   * suitele de cifruri (cipher suits) suportate de client
 +   * suita aleasa de server
 +
 +4. Porniti o unealta de monitorizare a traficului si obtineti acces la un shell logandu-va prin telnet, apoi prin SSH; dati niste comenzi de shell. Analizati informatia disponibila in captura de trafic.
 +
pc/laboratoare/12.1578170515.txt.gz · Last modified: 2020/01/04 22:41 by andrei.stanca
CC Attribution-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0