Differences

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

Link to this comparison view

uso:laboratoare:new:10-sec:concepts [2018/12/08 17:42]
octavian.guzu
uso:laboratoare:new:10-sec:concepts [2019/12/18 19:15] (current)
octavian.guzu [Prezentarea și securizarea datelor (encodare, criptare, hashing)]
Line 5: Line 5:
 === Encodare ===  === Encodare === 
  
-**Encodarea** este folosită când dorim să prezentăm o serie de date sub o altă formă. De exemplu, când există caractere neprintabile în datele noastre nu le putem afișa sub forma unui string. **Base64** este un cunoscut exemplu de algoritm de encodare pentru că transformă orice vector de octeți într-un string de caractere printabile. Vom prezenta în secțiunea ​de Demo cum encodam și decodăm un mesaj. ​+**Encodarea** este folosită când dorim să prezentăm o serie de date sub o altă formă. De exemplu, când există caractere neprintabile în datele noastrenu le putem afișa sub forma unui string. **Base64** este un cunoscut exemplu de algoritm de encodare pentru că transformă orice vector de octeți într-un string de caractere printabile. Vom prezenta în secțiunea ​ ​[[https://​ocw.cs.pub.ro/​courses/​uso/​laboratoare/​new/​10-sec/​demo|Demo]] cum encodam și decodăm un mesaj. ​
  
 <​note> ​ <​note> ​
Line 11: Line 11:
 </​note> ​ </​note> ​
  
-{{:​uso:​laboratoare:​new:​10-sec:​image_base64.jpg?​nolink&​300|}}+{{ :​uso:​laboratoare:​new:​10-sec:​image_base64.jpg?​500 |}}
  
 === Criptarea ===  === Criptarea === 
  
-Să presupunem că Alice și Bob doresc să comunice pe internet. Pentru început, cei doi folosesc un canal simplu prin care transmit mesajele în clar. Problema care apare este că Trudy, care este rău intenționat,​ poate asculta ce vorbesc Alice și Bob și va și înțelege mesajele deoarece ele sunt transmise în clar. +Să presupunem că Alice și Bob doresc să comunice pe Internet. Pentru început, cei doi folosesc un canal simplu prin care transmit mesajele în clar. Problema care apare este că Trudy, care este rău intenționat,​ poate asculta ce vorbesc Alice și Bob și va și înțelege mesajele deoarece ele sunt transmise în clar. 
  
-{{:​uso:​laboratoare:​new:​10-sec:​image_trudy.jpg?​nolink&​350|}}+{{ :​uso:​laboratoare:​new:​10-sec:​image_trudy.jpg?​500 |}}
  
 **Criptarea** înseamnă ascunderea datelor folosind un algoritm public și o cheie secretă. În cazul nostru, Alice **criptează** mesajul pe care dorește să îl transmită, iar Bob îl **decriptează**. Alice și Bob au aceeași cheie secretă negociată într-un moment de timp anterior comunicării. **Trudy** vede în continuare mesajele, știe algoritmul de criptare (deoarece e public), dar nu cunoaște cheia de decriptare, deci nu poate vedea conținutul lor. Un exemplu de algoritm de criptare este **AES**. ​ **Criptarea** înseamnă ascunderea datelor folosind un algoritm public și o cheie secretă. În cazul nostru, Alice **criptează** mesajul pe care dorește să îl transmită, iar Bob îl **decriptează**. Alice și Bob au aceeași cheie secretă negociată într-un moment de timp anterior comunicării. **Trudy** vede în continuare mesajele, știe algoritmul de criptare (deoarece e public), dar nu cunoaște cheia de decriptare, deci nu poate vedea conținutul lor. Un exemplu de algoritm de criptare este **AES**. ​
Line 27: Line 27:
 === Hashing ===  === Hashing === 
  
-**Hash-ul** este o funcție [[https://​en.wikipedia.org/​wiki/​One-way_function|one-way]]. Ea primește un input oricât de mare (1 byte, un cuvânt, un fișier, un întreg HDD, etc) și returnează un string de o dimensiune fixă în funcție de tipul de hash folosit. Hash-urile sunt rezistente la **coliziuni**. Și anume, este extrem de greu de găsit 2 input-uri care să producă același hash. Mai mult, un singur bit schimbat în input va genera un output complet diferit. Exemple de algoritmi de hashing: md5 (învechit),​ SHA-1, SHA-256. ​+**Hash-ul** este o funcție [[https://​en.wikipedia.org/​wiki/​One-way_function|one-way]]. Ea primește un input oricât de mare (1 byte, un cuvânt, un fișier, un întreg HDD, etc) și returnează un string de o dimensiune fixă în funcție de tipul de hash folosit. Hash-urile sunt rezistente la **coliziuni**, ​adică ​este extrem de greu de găsit 2 input-uri care să producă același hash. Mai mult, un singur bit schimbat în input va genera un output complet diferit. Exemple de algoritmi de hashing: md5 (învechit),​ SHA-1, SHA-256. ​
  
 <​note> ​ <​note> ​
Line 33: Line 33:
 </​note> ​ </​note> ​
  
-{{:​uso:​laboratoare:​new:​10-sec:​image_md5.jpg?nolink&​300|}}+{{ :​uso:​laboratoare:​new:​10-sec:​lab10_hash1.png?500 |}} 
 +==== SSH și cheile publice/​private ==== 
  
-==== SSH și chile publice/​private ====  +În laboratoarele trecute, când foloseam SSH, era mereu nevoie să introducem parola utilizatorului pe care ne conectăm. Pentru a evită acest lucru (și a și securiza mașina virtuală de Linux) putem folosi o **pereche de chei** publice și private. Aceste chei sunt folosite de un algoritm de criptare asimetric (folosește 2 chei). Numim **E(m, ​p)** criptarea ​unui mesaj cu cheia p și **D(m, ​s)** decriptarea unui mesaj cu cheia s, p = cheia publică, iar s = cheia secretă. Nu intrăm în concepte de matematică,​ ci doar vom explica simbolic cum funcționează un algoritm de criptare asimetric: ​
- +
-În laboratoarele trecute, când foloseam SSH, era mereu nevoie să introducem parola utilizatorului pe care ne conectăm. Pentru a evită acest lucru (și a și securiza mașina virtuală de linux) putem folosi o **pereche de chei** publice și private. Aceste chei sunt folosite de un algoritm de criptare asimetric (folosește 2 chei). Numim **E(m, ​k)** encriptarea ​unui mesaj cu cheia p și **D(m, ​k)** decriptarea unui mesaj cu cheia k, p = cheia publică, iar s = cheia secretă. Nu intrăm în concepte de matematică,​ ci doar vom explica simbolic cum funcționează un algoritm de criptare asimetric: ​+
  
 1. Orice mesaj criptat cu cheia **publică** poate fi decriptat doar cu cheia **privată**:​ **D(E(m, p), s) = m**  1. Orice mesaj criptat cu cheia **publică** poate fi decriptat doar cu cheia **privată**:​ **D(E(m, p), s) = m** 
Line 43: Line 42:
 2. Orice mesaj criptat cu cheia **privată** poate fi decriptat doar cu cheia **publică**. **D(E(m, s), p) = m**  2. Orice mesaj criptat cu cheia **privată** poate fi decriptat doar cu cheia **publică**. **D(E(m, s), p) = m** 
  
-Revenind la **SSH**, userul **student** își generează o pereche de chei publice/​private pe mașina sa locală și copiază **cheia publică** pe mașina virtuală. Când se autentifică pe aceasta cu userul student, primește un **challenge**:​ criptează-mi cu cheia privată a userului student mesajul ''​Salut sunt student!''​. Mașina locală criptează mesajul cu cheia privată și o trimite la server. Serverul decriptează mesajul și obține un mesaj valid. Trudy nu poate encripta ​același mesaj deoarece nu cunoaște cheia privată, și deci serverul va obține o decriptare invalida și nu îi va permite accesul. ​+Revenind la **SSH**, userul **student** își generează o pereche de chei publice/​private pe mașina sa locală și copiază **cheia publică** pe mașina virtuală. Când se autentifică pe aceasta cu userul student, primește un **challenge**:​ criptează-mi cu cheia privată a userului student mesajul ''​Salut sunt student!''​. Mașina locală criptează mesajul cu cheia privată și o trimite la server. Serverul decriptează mesajul și obține un mesaj valid. Trudy nu poate cripta ​același mesaj deoarece nu cunoaște cheia privată, și deci serverul va obține o decriptare invalida și nu îi va permite accesul. ​
   ​   ​
  
Line 62: Line 61:
 | Andrei | 96f3e4decfcd7cd02c3027f0b6416b6e |  | Andrei | 96f3e4decfcd7cd02c3027f0b6416b6e | 
  
-Abordarea este într-adevăr mai bună, dar încă nu complet sigură. Deși hash-urile nu pot fi sparte direct (dintr-un hash să obținem mesajul inițial), ele pot fi atacate folosind dicționare. Un dicționar este o mulțime de corespondențe ''​(hash_mesaj) -> (mesaj)''​. Pentru a sparge un hash, putem folosi dicționare mari online precum [[https://​crackstation.net/​|acesta]]. Dacă avem noroc că hash-ul să se afle în dicționar, atunci obținem parola în clar. Deobicei ​acest lucru se întâmplă pentru toate parolele ce folosesc cuvinte cunoscute sau au o dimensiune/​complexitate mică. ​+Abordarea este într-adevăr mai bună, dar încă nu complet sigură. Deși hash-urile nu pot fi sparte direct (dintr-un hash să obținem mesajul inițial), ele pot fi atacate folosind dicționare. Un dicționar este o mulțime de corespondențe ''​(hash_mesaj) -> (mesaj)''​. Pentru a sparge un hash, putem folosi dicționare mari online precum [[https://​crackstation.net/​|acesta]]. Dacă avem norocul ca hash-ul să se afle în dicționar, atunci obținem parola în clar. De obicei, ​acest lucru se întâmplă pentru toate parolele ce folosesc cuvinte cunoscute sau au o dimensiune/​complexitate mică. ​
  
-{{:​uso:​laboratoare:​new:​10-sec:​image_crack.png?​nolink&900|}}+{{ :​uso:​laboratoare:​new:​10-sec:​image_crack.png?​900 |}}
  
 Pentru baza de date de mai sus, parola lui Mihai a putut fi spartă, dar cea a lui Andrei nu. Andrei a avut o parola mai lungă, dar acest lucru nu asigură neapărat siguranța ei.  Pentru baza de date de mai sus, parola lui Mihai a putut fi spartă, dar cea a lui Andrei nu. Andrei a avut o parola mai lungă, dar acest lucru nu asigură neapărat siguranța ei. 
  
-3. O abordare finală ar fi să folosim un salt pentru hash-uirea parolei. Salt-ul este un string random de câteva caractere random ce se folosește în felul următor la construirea unui hash: Hash(salt | parolă), unde "​|"​ înseamnă concatenare. Astfel, salt-ul previne atacul cu dicționar de mai sus deoarece este foarte puțin probabil ca hash-ul respectiv să existe într-un dicționar. Salt-ul se stochează în clar   ​de date. +3. O abordare finală ar fi să folosim un salt pentru hash-uirea parolei. Salt-ul este un string random de câteva caractere random ce se folosește în felul următor la construirea unui hash: Hash(salt | parolă), unde "​|"​ înseamnă concatenare. Astfel, salt-ul previne atacul cu dicționar de mai sus deoarece este foarte puțin probabil ca hash-ul respectiv să existe într-un dicționar. Salt-ul se stochează în clar în baza de date. 
  
 ^  ^ Salt ^ Password ^  ^  ^ Salt ^ Password ^ 
-| Mihai | 3*6as0':​+ ​| f98ad20d2f42dcd4e53a4d1f40f9c1a5 | +| Mihai | dfd454ddf ​| f98ad20d2f42dcd4e53a4d1f40f9c1a5 | 
  
-Pentru Mihai, ​  este: Hash(3*6as0':​+mereverzi). +Pentru Mihai, ​  este: Hash(dfd454ddfmereverzi). 
  
-{{:​uso:​laboratoare:​new:​10-sec:​image_crack_2.png?​nolink&900|}}+{{ :​uso:​laboratoare:​new:​10-sec:​image_crack_2.png?​900 |}}
  
 ==== Password manager ====  ==== Password manager ==== 
  
-tot este recomandat ​ avem parole ​  ​lungi ​ complexeDiferite ​   ​parole ​diferite ​ tot așa. Pentru ​  ​folosirea de parole sigure ​ diferite este  folosirea unui password manager precum [[https://​www.lastpass.com/​business-password-manager|acesta]]. Un password manager aduce următoarele avantaje: ​+Oriunde ne-am crea un nou cont, ne este recomandat ​să ne setăm o parolă cât mai lungă și mai complexă. Totodată este bine să avem câte o parolă diferită pentru fiecare cont pe care îl avem. Refolosirea unei parole ​nu înseamnă decât creșterea riscului de ni se fura datele. Pentru folosirea de parole sigure ​și diferite este recomandată ​folosirea unui password manager precum [[https://​www.lastpass.com/​business-password-manager|acesta]]. Un password manager aduce următoarele avantaje: ​
  
--Stochează el parolele pentru fiecare ​site, astfel ​ nu vor trebui memorate ​ vor  fi folosite ​parole ​complexe ​ +  ​- Stochează el parolele pentru fiecare ​website, astfel ​utilizatorul ​nu trebuie să mai rețină ​parole ​complicate 
--Se  ​share-ui ​anumite parole cu  utilizatori ​+  - Se pot partaja ​anumite parole cu alți utilizatori ​
  
 ==== HTTP vs HTTPS ====  ==== HTTP vs HTTPS ==== 
  
-Protocolul de rețea **HTTP** aduce beneficii din multe puncte de vedere. Unul din dezavantajele lui este faptul că toate datele sunt trimise în clar. Astfel, un atacator precum Trudy va putea intercepta și înțelege un pachet HTTP. +Protocolul de rețea **HTTP** aduce beneficii din multe puncte de vedere. Unul dintre ​dezavantajele lui este faptul că toate datele sunt trimise în clar. Astfel, un atacator precum Trudy va putea intercepta și înțelege un pachet HTTP. 
  
-Acest start suplimentar necesar de criptare este aduc de **HTTPS**, detaliat mai pe larg [[https://​ro.wikipedia.org/​wiki/​HTTPS|aici]]. Funcționarea lui este asemănătoare cu ce am descris mai sus la SSH. +Acest start suplimentar necesar de criptare este adus de **HTTPS**, detaliat mai pe larg [[https://​ro.wikipedia.org/​wiki/​HTTPS|aici]]. Funcționarea lui este asemănătoare cu ce am descris mai sus la SSH. 
  
-{{:​uso:​laboratoare:​new:​10-sec:​image_https.png?​nolink&500|}}+{{ :​uso:​laboratoare:​new:​10-sec:​image_https.png?​500 |}}
  
uso/laboratoare/new/10-sec/concepts.1544283769.txt.gz · Last modified: 2018/12/08 17:42 by octavian.guzu
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