Securitatea Sistemelor Informatice

Autor: Drd. Christiana Constantinescu
  • Numar Laboratoare (2h/lab): 14
  • Sala: 136, 220, Universitatea din Craiova
  • Metoda evaluare: Evaluare continua
  • Tip materie: Obligatoriu

Daca, din diverse motive, nu puteti participa frecvent la laborator, consultati orarul, prezentati-va cu una dintre grupele INF21(A), INF21(B), INF22(A), INF22(B), INF23(A), INF23(B) si solicitati sa fiti evaluati! Orar .
Important
Pentru studentii neevaluati, in catalog se va consemna nota 1 (unu).



Algoritmi Clasici de Criptare

Urmareste explicatiile de la laborator. Vei regasi notite in aceasta sectiune, dupa ce toate grupele vor fi trecut prin acest laborator.

Alberti's Cipher (Cifrul lui Alberti)


Caesar's Cipher (Cifrul lui Cezar)

🥱 Dupa atat de mult invatat, merge un scroll cinstit.Vezi aici ce SecTok-uri ti-am pregatit.


RSA (Rivest–Shamir–Adleman)

Reprezinta un algoritm de criptare asimetrica (foloseste o cheie pentru a cripta mesajul si una pentru a-l decripta).
Mesajul este criptat cu cheia publica si poate fi decriptat doar cu perechea ei privata.
😶‍🌫️ Intelegerea conceptului

  • Alice vrea sa ii trimita bijutierului Bob un inel pe care doreste ca Bob sa i-l graveze. 💍 Avand o piatra pretioasa si fiind o amintire de familie, Alice se teme ca cineva ar putea intercepta pachetul si inlocui bijuteria cu un fals. 🥷
  • Astfel, Bob ii trimite lui Alice un lacat special (deschis), de la care numai el detine cheia, pentru a-l adauga cutiei de bijuterii pe care Alice i-o va trimite. 🔓
  • Alice pune inelul in cutia de transport. Adauga in cutie biletelul cu textul pe care doreste ca Bob sa il graveze si un lacat special de la care doar ea detine cheia si pe care il trimite deschis, ca Bob sa il poata utiliza cand ii returneaza inelul. 🔓 (cheia publica a lui Alice)
  • Alice securizeaza cutia de transport, folosind lacatul lui Bob 🔒 (cheia publica a lui Bob) pe care il inchide si cu care incuie cutia. In acest moment, doar Bob poate deschide lacatul.
  • La destinatie, Bob va deschide lacatul cu singura cheie care se potriveste lacatului lui si pe care doar el o detine 🔑 (cheia privata a lui Bob).
  • Dupa ce va termina de gravat inelul 💍 , Bob va folosi lacatul lui Alice pe care ea i l-a trimis, pentru a inchide inelul in cutia de transport (cheia publica a lui Alice).
  • In acest moment, doar Alice va putea deschide lacatul, folosind cheia lui pereche, pe care doar ea o detine 🗝️ (cheia privata a lui Alice).

Cheia pe care doar Alice o detine (cea privata) nu poate deschide lacatul lui Bob (cheia lui publica), si nici cheia lacatului lui Bob nu poate deschide lacatul lui Alice. Cheia publica si cea privata ale fiecaruia dintre ei vin in perechi 🔐 si nu pot fi interschimbate.

RSA foloseste o cheie pentru a cripta si o alta pentru a decripta. Intre cele doua chei, exista o corelatie matematica.

Importanta
RSA este important pentru ca reprezinta una din inovatiile criptografiei, fiind unul dintre primii algoritmi asimetrici de criptare care si-a pastrat relevanta si este inca utilizat.

In anul 1977, Ron Rivest, Adi Shamir si Leonard Adleman, membri MIT (Massachusetts Institute of Technology) la acea vreme, au dezvoltat acest algoritm care a devenit ulterior cunoscut sub numele de RSA, de la initialele lor.

Utilizare

RSA are o gama larga de aplicabilitati in securitatea informatiei si criptografie, incluzand, dar fara a se limita la:

  • Securizarea comunicatiilor online: utilizat pentru securizarea comunicatiilor prin internet, inclusiv in protocolul HTTPS pentru tranzactii financiare, accesul la conturi online si comunicarea confidentiala prin e-mail.
  • Autentificare si semnaturi digitale:utilizat pentru autentificarea utilizatorilor si pentru generarea semnaturilor digitale, asigurand integritatea si autenticitatea datelor si documentelor electronice.
  • Criptare a datelor: folosit pentru criptarea datelor stocate pe dispozitive sau transmise prin retele, asigurand confidentialitatea acestora in cazul in care acestea sunt interceptate de catre terti neautorizati.
  • Securizarea accesului la retele si sisteme: folosit in sistemele de autentificare pentru securizarea accesului la retele si sisteme informatice, inclusiv in autentificarea prin intermediul cheilor SSH si in sistemele de autentificare in doua pasi.
  • Securizarea tranzactiilor financiare: folosit in sistemele de plati electronice si in securizarea tranzactiilor financiare online, asigurand confidentialitatea si autenticitatea acestora.

Mod de lucru:

RSA se bazeaza pe proprietatile numerelor prime si pe principiul ca este usor (dpdv al costurilor de timp si procesare) sa inmultesti numere mari, dar sa factorizezi numere mari este foarte costisitor si dificil. De exemplu, este usor sa calculezi produsul lui 89 si 71, care inmultite dau 6319, dar incercarea de a gasi factorii primi ai lui lui 6319 este un proces mai costisitor. (pentru RSA, 89 si 71 reprezinta numere mici, folosite pentru a exemplifica metodologia)

Generarea cheilor:

RSA foloseste aritmetica modulara, teorema lui Euler si functia lui Euler pentru totienti.Fiecare pas al algoritmului implica doar inmultire, asa ca este usor pentru un program cu resurse relativ reduse sa il execute:

  1. Bob alege doua numere prime mari p si q. Produsul lor, n=pq, va fi jumatate din cheia publica a lui Bob.
  2. Bob calculeaza functia lui Euler, ϕ(pq)=(p−1)(q−1), si alege un numar e relativ prim cu ϕ(pq). in practica, e este adesea ales sa fie 216+1=65537. e va fi cealalta jumatate a cheii publice.
  3. Bob calculeaza inversul modular d al lui e modulo ϕ(n). Cu alte cuvinte, de≣1(modϕ(n)). d este cheia privata a lui Bob.
  4. Bob distribuie ambele parti ale cheii publice: n si e. d este pastrat secret.

Avand o pereche de chei publice si private, cele doua pot fi reutilizate de cate ori este nevoie.

Transmiterea mesajului:
  1. Alice converteste mesajul sau intr-un numar, m. Pentru aceasta conversie, poate folosi, spre exemplu, o codificare universala, cum ar fi ASCII, sau o codificare proprie, care mareste securitatea criptosistemului.
  2. a b c d e f g h i j k l m n o p q r s t u v w x y z
    97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122

    Daca Alice ar vrea sa transmita, spre exemplu, mesajul "salut", acesta ar fi convertit in m=(115,97,108,117,116), pentru ca s=115,a=97,l=108,u=117,t=116.

    A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
    65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90

    Daca Alice ar vrea sa transmita, spre exemplu, mesajul "HELLO", acesta ar fi convertit in m=7269767679, pentru ca h=72, e=69, l=76, o=79.

  3. Alice calculeaza apoi c ≡ me (mod n). c este textul cifrat. e si n pe care Alice le foloseste apartin lui Bob si au fost generate conform pasilor descrisi anterior (vezi Generarea cheilor: ). in afara de cheia publica, care oricum are caracter nesecret, aceasta este singura informatie pe care un atacator o poate sustrage.

  4. Bob primeste mesajul si calculeaza cd ≡ m (mod n), recuperand astfel numarul original m.

  5. Bob decodeaza apoi m inapoi in litere, folosind aceeasi codificare pe care o foloseste si Alice. Asa, Bob recupereaza mesajul original si finalizeaza decriptarea.

Presupunem ca Bob a ales numerele prime p = 11 si q = 17, impreuna cu e = 3.

  1. Bob calculeaza n = p × q = 11 × 17 = 187, care reprezinta jumatate din cheia lui publica. Bob calculeaza, de asemenea, φ(n) = (p - 1) × (q - 1) = 10 × 16 = 160. Bob calculeaza d = 107, deoarece d × e = 321 ≡ 1 (mod φ(n)) (deoarece φ(n) = 160).
  2. Bob distribuie cheia lui publica: n = 187 si e = 3.
  3. Alice doreste sa trimita lui Bob mesajul "HELLO". Deoarece n este atat de mic, Alice va trebui sa trimita mesajul caracter cu caracter.
  4. 'H' este 72 in ASCII, astfel ca textul mesajului este m = 72. Alice calculeaza me = 723 ≡ 183 (mod 187), rezultand in textul cifrat c = 183. Aceasta este singura informatie pe care Eve o poate obtine, deoarece acesta nu are cheia privata.
  5. Bob calculeaza cd = 183107 ≡ 72 (mod 187), obtinand astfel mesajul m = 72.
  6. Bob converteste, conform ASCII, valoarea 72 in 'H'.
  7. Restul literelor sunt trimise in acelasi mod.

Functii Hash

O functie HASH este un algoritm care transforma o intrare (sau mesaj) de lungime variabila intr-o iesire de lungime fixa, numita valoare HASH, cod hash, suma hash, hash sau rezumat. Aceasta valoare este, in esenta, o amprenta digitala unica a datelor originale.

😶‍🌫️ Intelegerea conceptului

  • Alice vrea sa ii trimita un mesaj important lui Bob. Ea vrea sa se asigure ca mesajul nu va fi modificat in timpul transmiterii si ca Bob va primi mesajul original, asa cum ea l-a conceput. 📝
  • Alice scrie mesajul si apoi aplica o functie HASH pe acesta. Functia HASH genereaza o valoare HASH (o secventa de caractere care este unica si apartine doar acelui mesaj). Daca mesajul ar fi modificat, chiar si cu un singur caracter, functia HASH nu va mai genera aceeasi valoare.
  • Ganditi-va la aceasta valoare HASH ca la o amprenta digitala a mesajului. ☝️ Nu exista doua degete care sa lase aceeasi amprenta. La fel, o functie hash trebuie sa genereze valori unice pentru fiecare input.
  • Desi genereaza valori unice pentru fiecare entitate asupra carora sunt aplicate, functiile HASH genereaza output de lungime fixa, indiferent de lungimea mesajului carora sunt aplicate
  • Alice trimite mesajul original lui Bob. Valoarea obtinuta cu functia HASH pentru mesajul original, i-o transmite printr-un alt transport. 📦
  • Cand Bob primeste mesajul, el aplica aceeasi functie HASH pe mesajul primit si compara valoarea HASH calculata de el cu valoarea HASH trimisa de Alice. 📨
    • Daca valorile HASH sunt identice, Bob poate fi sigur ca mesajul nu a fost modificat in timpul transmiterii. ✅
    • Daca valorile HASH difera, Bob stie ca mesajul a fost alterat. ❌

Proprietati
  • Determinismul: Aceeasi intrare va produce intotdeauna aceeasi iesire.
  • Viteza de calcul: Functia HASH trebuie sa fie eficienta si rapida in calculul valorii HASH.
  • Ireversibilitate si rezistenta la preimagine: Plecand de la outputul unei functii hash, nu se poate obtine mesajul original; dificultatea de a gasi o intrare originala corespunzatoare unei valori HASH date.
  • Rezistenta la coliziuni: Dificultatea de a gasi doua intrari distincte care produc aceeasi valoare HASH.
  • Difuzie (Avalanche Effect): O mica modificare in intrare trebuie sa produca o schimbare semnificativa in iesirea HASH.
Utilziare
  • Verificarea integritatii datelor: Compararea valorilor HASH pentru a asigura ca datele nu au fost modificate, asigurarea autenticitatii si integritatii unui mesaj sau document digital.
  • Semnaturi digitale: Functiile HASH sunt utilizate pentru a crea semnaturi digitale in care integritatea mesajului este cruciala.
  • Stocarea parolelor: in loc sa se stocheze parolele in clar, se stocheaza valoarea HASH a parolei.

MD5 (Message Digest Algorithm 5)

MD5este o functie HASH dezvoltata de Ronald Rivest in 1991.
Produce o iesire de 128 de biti (16 bytes) si este foarte rapida.
⚠️ Nu mai este considerata sigura din cauza vulnerabilitatilor la coliziuni.

Mod de functionare
  • Pasul 1: Padding - Mesajul original este extins pentru a avea o lungime ce este multipla de 512 biti. Padding-ul include un bit '1' urmat de suficiente zerouri si lungimea mesajului initial.
  • Pasul 2: Initializare - Se initializeaza patru variabile de 32 de biti (A, B, C, D) cu valori specificate.
  • Pasul 3: Procesarea Blocurilor - Mesajul este impartit in blocuri de 512 biti, iar fiecare bloc este procesat printr-o serie de transformari folosind functii non-liniare si adunari modulo 232.
  • Pasul 4: Output - Rezultatele sunt combinate pentru a produce rezumatul final de 128 de biti.

SHA-1 (Secure Hash Algorithm 1)

SHA-1 este o functie HASH dezvoltata de NSA in 1993.
Produce o iesire de 160 de biti (20 bytes).
⚠️ Desi este mai sigura decat MD5, a fost compromisa si nu mai este recomandata pentru utilizare.

Mod de functionare
  • Pasul 1: Padding - Similar cu MD5, mesajul este extins pentru a avea o lungime ce este multipla de 512 biti.
  • Pasul 2: Initializare - Se initializeaza cinci variabile de 32 de biti (H0, H1, H2, H3, H4) cu valori specificate.
  • Pasul 3: Procesarea Blocurilor - Mesajul este impartit in blocuri de 512 biti, iar fiecare bloc este procesat printr-o serie de rotatii, adunari si functii non-liniare.
  • Pasul 4: Output - Rezultatele sunt combinate pentru a produce rezumatul final de 160 de biti.

SHA-256 (Secure Hash Algorithm 256)

SHA-256 este parte a familiei SHA-2 si a fost dezvoltata de NSA.
Produce o iesire de 256 de biti (32 bytes).
⚠️ Este considerata sigura pentru majoritatea aplicatiilor curente.

Mod de functionare
  • Pasul 1: Padding - Mesajul este extins pentru a avea o lungime ce este multipla de 512 biti. Padding-ul include un bit '1' urmat de suficiente zerouri si lungimea mesajului initial codificata pe 64 de biti.
  • Pasul 2: Initializare - Se initializeaza opt variabile de 32 de biti (H0, H1, H2, H3, H4, H5, H6, H7) cu valori specifice.
  • Pasul 3: Procesarea Blocurilor - Mesajul este impartit in blocuri de 512 biti, iar fiecare bloc este procesat printr-o serie de operatii logice si aritmetice complexe, incluzand rotatii si schimburi de biti.
  • Pasul 4: Output - Rezultatele sunt combinate pentru a produce rezumatul final de 256 de biti.


Descarca CH7 de aici.


🧠AI-ul. Prieten sau dușman? 🤔 Ești Lead Security Engineer. Un AI malițios de tip APT se extinde în rețea. Gândește logic, aplică criptografia corectă și salvează infrastructura aici.