Welcome to Our Website

Criptografie 101: Criptare simetrică


Acesta este primul post într-o parte 3 serii pe bază de criptografie. Seria este prezentată după cum urmează:

  1. Criptare Simetrică
  2. Integritatea Datelor & Autentificate de Criptare
  3. Asimetric de Criptare cu chei Publice/Private Perechi

Scufundări în lumea de informatică poate fi o sarcina descurajatoare. Mai ales singur!, În această serie de bloguri, aș dori să ofer o imagine de ansamblu la nivel înalt asupra elementelor de bază ale criptografiei pentru cei care doresc să aprofundeze mai mult subiectul care nu știu neapărat de unde să înceapă. Această prezentare generală se bazează în mod special pe principalele mele takeaways de la cursul de criptografie i Stanford, așa cum a fost predat de Dan Boneh, disponibil pe Coursera.

am decis să urmez acest curs, deoarece sunt un dezvoltator de blocuri care nu a venit dintr-un fundal tradițional comp-sci. Am studiat economia în facultate, dar m-am orientat mai mult spre programarea pe calculator pe măsură ce mi-am început cariera., Încă de când am început să codific, am fost într — o misiune de a mă apropia „de computer” – de a îndepărta straturile de abstractizare care m-au bucurat ca dezvoltator web și de a înțelege ce se întâmplă sub capotă. Tranziția în criptocurrency și sisteme distribuite de la dezvoltarea web a fost un pas sălbatic și minunat în această direcție în multe feluri, nu în ultimul rând din care a fost din ce în ce mai familiarizat cu conceptele de criptografie. Cu toate acestea, am vrut o bază mai solidă., Din moment ce este un domeniu destul de vast, m-am gândit că merită să renunțe la $70 pentru a consuma aceste informații într-un forum special curatoriat de la Universitatea Stanford. De asemenea, puteți audita acest curs fără a preda gratuit SARCINI. Minunile internetului!

Să începem.în esență, criptografia este practica comunicării sigure în prezența potențialilor adversari terți. Conceptul de comunicare sigură este format din 2 puncte majore:

  1. securitate împotriva interceptării: acest lucru asigură confidențialitatea datelor.,
  2. securitate împotriva manipulării datelor: aceasta asigură integritatea datelor, ceea ce înseamnă că nimeni nu poate manipula datele pe care le-ați trimis și nu poate înșela destinatarul pentru a accepta datele manipulate ca fiind valide.confidențialitatea datelor se realizează prin criptare, care poate lua două forme: simetrice și asimetrice.criptarea simetrică utilizează o singură cheie care trebuie partajată între toți participanții care comunică.
  3. criptarea asimetrică utilizează chei personale., Fiecare participant are propria pereche de chei publice și chei private pentru a cripta și decripta mesajele atunci când comunică.
  4. (Notă: Acest blogpost va vorbi despre criptografie în contextul criptării simetrice. Într-un post de urmărire, ne vom arunca cu capul în criptare asimetrică.criptarea datelor: două tipuri de Cifruri

    criptarea asigură confidențialitatea datelor și implică două componente importante:

    1. o cheie secretă: în contextul criptării simetrice, putem presupune că participanții noștri, Alice și Bob, au o cheie secretă partajată.,
    2. un cifru: un set de algoritmi, unul pentru criptare și unul pentru decriptare.este important să rețineți că algoritmii de criptare și decriptare sunt cunoscuți public. Singurul lucru păstrat secret este cheia.

      două tipuri de cifruri sunt cifruri de flux și cifruri bloc. O condiție prealabilă potențială pentru înțelegerea adecvată a ambelor cifruri este cunoașterea operațiunilor bitwise (operații efectuate pe biți). Mai precis, conceptul de exclusiv-sau (XOR). Am găsit acest blogpost pentru a oferi o explicație foarte clară a operațiunilor bitwise., Sau puteți încerca să înțelegeți conceptul de XOR folosind imaginea de mai jos. Practic doi biți sunt combinate și în cazul în care acestea sunt diferite (unul 0 și unul 1) au ca rezultat 1, iar în cazul în care acestea sunt aceleași, (ambele 0 sau ambele 1) au ca rezultat 0. De aici încolo, o să presupun că cititorul înțelege conceptul de XOR și că universal notație pentru XOR este: ⊕

      Stream Cipher

      Un flux de cifru este o cheie simetrică cifru unde plaintext (în bytes formă) este XOR-ar bit cu bit cu cheia (de asemenea, în bytes forma) pentru a produce criptate cifrat., Același proces este folosit pentru a decripta cifrultext. Având în vedere natura operației XOR, dacă XOR cifrului cu cheia, acest lucru rezultă din nou cu plaintext original.

      Un cititor viclean s-ar putea realiza din această descriere că cheia (etichetat în ilustrația de mai sus ca „Cifru stream”) și plaintext trebuie să aibă ceva foarte important în comun. Așa e! Cheia și textul trebuie să aibă aceeași lungime., Desigur, acest lucru nu este extrem de practic.pentru a face un cifru de flux mai practic, este introdusă ideea unui generator pseudorandom. Un generator de pseudorandom este o procedură deterministă care ia o intrare și scoate un rezultat pseudorandom chiar mai mult. Fiind o procedură deterministă înseamnă că va returna întotdeauna aceeași ieșire exactă dacă este dată aceeași intrare (adică” abc123 „are ca rezultat” 8474f24e0d72e1b949ffd2… ” de fiecare dată)., Cuvântul pseudorandom înseamnă că, deși ieșirea nu este de fapt aleatorie (deoarece este determinată pe baza unei anumite intrări), este de fapt indistinguizabilă de un șir cu adevărat aleatoriu. Cu alte cuvinte, având în vedere un eșantion de intrări și ieșiri, nu există indicii cu privire la ce ieșire corespunde unei anumite intrări și invers, prin urmare este pseudorandom. Este posibil să folosiți cheia secretă partajată ca intrare pentru a produce o cheie pseudorandom și mai lungă pentru a acționa ca cheia lungă pentru a fi XOR ‘ D cu plaintext la fel de lung.,

      această implementare specifică a unui cifru de flux pe care l-am ilustrat până acum se numește „pad-ul unic”. O caracteristică extrem de importantă a pad-ului unic este că cheia pad-ului unic poate fi utilizată o singură dată. Odată ce este folosit a doua oară, securitatea acestor mesaje este compromisă.imaginea de mai jos este un diapozitiv din curs. PRG (K) denotă secvența pseudorandom generată de cheia noastră partajată K. Simbolul ⊕ denotă XOR. c denotă text cifrat. m denotă mesajul (sau plaintext).,

      de Fapt, acest slide este de a spune că, odată ce cheia este folosit de două ori, putem XOR de ciphertexts împreună, și că este exact egală cu XOR ‘ ing cele două plaintexts împreună. Deoarece există suficientă redundanță în limba engleză, un atacator priceput poate utiliza aceste informații pentru a recupera complet mesajele.

      pentru a menține o cheie secretă partajată, conceptul de nonce poate fi folosit pentru a ne asigura că nu repetăm niciodată cheia unică., Un nonce este un număr arbitrar care poate fi folosit o singură dată într-o comunicare criptografică. La trimiterea textului cifrat, expeditorul poate trimite, de asemenea, un nonce pentru a fi combinat cu cheia secretă pentru a utiliza apoi ca intrare pentru a produce o cheie pseudorandom distinctă pentru fiecare criptare.

      (este posibil să fi observat diapozitivul de mai sus spune Attack 1., Ca o parte, pentru cei care se întreabă Ce este Attack 2, Attack 2 este faptul că, în timp ce criptarea fluxului oferă confidențialitatea datelor, nu oferă integritatea datelor așa cum este definită în prima secțiune)

      cifru bloc

      al doilea tip de cifru este un cifru bloc. Un cifru bloc are o intrare cu lungime fixă și criptează iterativ textul din nou și din nou folosind o altă cheie (o „cheie rotundă”) pentru fiecare rundă și, în cele din urmă, emite un text cifrat de aceeași lungime. 3DES și AES sunt două exemple de cifruri bloc care iau o intrare de 48 de biți și 128 de biți, respectiv.,

      Slide de mai sus arată arhitectura de bază pentru un cifru bloc. Puteți vedea că un mecanism de expansiune cheie este folosit pentru a avea o cheie nouă pentru fiecare rundă. Textul plaintext, notat (m) pentru mesaj, devine criptat din nou și din nou, până când în cele din urmă este returnat textul cifrat corespunzător (c) de aceeași lungime.din motive de concizie, voi acoperi AES în acest blogpost., Deși DES / 3DES este semnificativ din punct de vedere istoric, astăzi AES este mai utilizat și acceptat pe scară mai largă.

      AES este construit ca o Substituire Permutare de Rețea. AES funcționează pe un bloc de 128 biți, egal cu 16 octeți. Așa cum este ilustrat mai sus în partea stângă sus, scriem octeții 16 ca matrice 4 by 4. Această matrice servește ca o structură de date bun pentru amestecarea datelor în jurul., În fiecare rundă, procesul este după cum urmează:

      1. Ne-am XOR runda cheie, prima (k0), cu mesajul curent
      2. Apoi vom merge printr-un proces de substituție în cazul în care blocuri de date sunt înlocuite cu alte blocuri bazate pe un anumit tabel de substituire (imaginea de mai sus (1) ByteSub).
      3. trecem printr-o permutare strat în cazul în care biții sunt permutate și amestecate în apropiere(fotografia de mai sus (2) ShiftRow & (3) MixColumn).
      4. apoi repetăm acest proces timp de 10 runde.,

      Imaginea de mai sus, veți observa că ultima rundă sare peste etapa de coloană Mix, XOR este rezultatul cu tasta finală a rundei și scoate textul cifrat rezultat. Pentru a decripta, pur și simplu inversăm procesul. Cursul oferă o imagine de ansamblu la nivel înalt a acestui proces de criptare și încurajează elevii să se uite mai adânc în ea, dacă este de interes pentru tine. Prin urmare, voi lăsa lucrările interioare AES la acest lucru. Mi-ar recomanda oameni uite în procedura de rețea Fiestel de 3DES pentru o distracție compara și contrastul diferitelor cifruri bloc.,

      În ceea ce privește hardware-ul, de la lansarea Intel Westmere, Intel a proiectat lor procesoare cu instrucțiuni speciale pentru AES optimizare construit chiar în hardware-ul lor și AMD urmat la scurt timp după aceea.

      moduri de funcționare a cifrului bloc

      spre deosebire de un cifru de flux, un cifru bloc are doar o intrare cu lungime fixă. Evident, vrem să se ocupe de date care este mai mare de 16 octeți la un moment dat. Deci, în continuare, este important să înțelegem modurile de funcționare în care putem folosi cifruri bloc pentru a cripta seturi mari de date., Pentru a aplica acest cifru bloc la un set de date mare, primul mod de operare care poate veni în minte se numește „carte de cod Electronic” (BCE). BCE împarte pur și simplu datele în blocuri de octeți 16 și efectuează criptarea AES uniform. S-ar putea face chiar și în paralel. Foarte repede! Dar de fapt nu este foarte sigur.

      E nesigur pentru că dacă o 16 byte mesajul se repetă, cifrat va avea, de asemenea, repetat de date., Aceasta divulgă informații despre datele noastre unui potențial atacator. Putem aplica această vulnerabilitate la cazul în care criptăm o imagine cu BCE. După cum puteți vedea mai jos, este clar că imaginea noastră este o lovitură de cap. În zona puternic neagră, putem vedea o siluetă prin părul și cămașa întunecată.

      Este important ca scheme de criptare sunt semantic sigur., Semantic de Securitate este conceptul că, dacă avem un text cifrat care corespunde la una din cele două diferite plaintexts, un adversar nu poate ghici cu mai bine de probabilitate de 1/2 care plaintext cifrat corespunde. În mod evident, BCE nu este sigură din punct de vedere semantic. Imaginea noastră criptată ne oferă o mulțime de informații pentru a ghici imaginea sa simplă corespunzătoare.BCE este un exemplu de mod de operare cu cheie unică (adică, ca și pad-ul unic, o cheie poate fi utilizată o singură dată). Un alt mod de operare mai sigur o singură dată-cheie este modul de contor determinist. Sunteți liberi să se uite în ea pe cont propriu., Voi trece la modurile sigure de funcționare care permit chei de mai multe ori!

      Cipher Block Chaining (CBC) este un mod de operare care leagă fiecare bloc de 16 octeți de plaintext împreună prin XOR ‘ ing textul cifrat al plaintext anterior în plaintext nostru curent înainte de a efectua criptarea cifru bloc (adică AES). Imaginea de mai jos clarifică acest concept:

      în primul rând începe cu o întâmplare IV., IV reprezintă vectorul de inițializare care poate fi definit ca: valoarea inițială utilizată pentru a începe un proces iterat. În cazul CBC, IV trebuie să fie aleatoriu (deci imprevizibil), prin urmare, trebuie să fie unic pentru fiecare tranzacție. Primul bloc de text cifrat este pur și simplu necriptate IV aleatoare. Pentru a produce restul cifrat, în primul rând, IV aleatoare este XOR cu primul bloc de text clar (m). Rezultatul este apoi criptat cu tasta rotundă k pentru a returna primul bloc de text criptat (c)., Care cifrat apoi devine XOR cu următorul bloc de text clar (m), rezultatul este criptat cu runda cheia k și returnează cel de-al doilea bloc de criptat cifrat (c). Procesul este continuat până când toate blocurile au fost criptate.

      Pentru a decripta, tocmai inversa procesul.

      o componentă importantă pentru criptarea CBC este că IV aleatoriu este imprevizibil., Dacă IV devine previzibil, atunci schema noastră de criptare devine vulnerabilă la atacurile plaintext alese. Ales Plaintext Attack (CPA) este un model de atac, care presupune că atacatorul poate obține ciphertexts arbitrare plaintexts, și de a folosi aceste pentru a descoperi informații despre mesajele criptate. Prin urmare, este necesar un IV imprevizibil pentru a asigura securitatea CPA.

      poartă-te cu mine aici în timp ce încerc să explic cum ar funcționa acest atac: este posibil să efectuezi un atac plaintext ales în prezența lui IV previzibil datorită naturii lui XOR., Dacă XOR aceeași valoare împreună (0101 ⊕ 0101) va fi întotdeauna egal 0, prin urmare, anulează. Deci, dacă bănuiți o observat cifrat c corespunde un anumit text clar m-ai pot testa ipoteza ta cu un previzibil IV. Dacă plaintext în cauză a fost criptat cu IV1 astfel că c = E(k, m ⊕ IV1) puteți trimite un nou plaintext să fie criptate și vezi dacă poți obține un rezultat de potrivire: c. Deoarece puteți prezice IV va fi IV2, trimiteți m ⊕ IV1 ⊕ IV2., CBC proces va XOR această intrare cu următorul IV, IV2, astfel încât: c = E(k, m ⊕ IV1 ⊕ IV2 ⊕ IV2), prin urmare, IV2 anulează, și încă o dată suntem criptarea E(k, IV1 ⊕ m), care ar duce din nou cu c și dacă acest lucru se întâmplă, noi am fost capabil să ghicească ce a fost criptat anterior cu IV1.

      într — adevăr minunat de locuri de muncă dacă ai trecut prin asta – ^

      cu asta, aș dori să revizuiască un alt mod de cifru bloc de funcționare, care va încheia primul blogpost în această serie 3 parte. Dacă a fost un efort mare pentru a face acest lucru departe, acum ar putea fi un moment bun pentru o pauză rapidă înainte de a continua!,

      Ok, așa că am revizuit BCE, CBC și vulnerabilitățile acestora, dar, în cele din urmă, și probabil cel mai important, voi introduce modul de contorizare randomizat (CTR). Acesta este cel mai recent și mai sigur mod de operare și este, de asemenea, mai eficient decât CBC.

      Randomizat Counter Mode, de asemenea, nevoie de o întâmplare IV. IV servește un scop diferit aici. Cheia noastră se combină (de ex., via AES) cu o versiune iterată IV-ul nostru: mai sus continuăm să adăugăm 1 la IV-ul nostru pentru fiecare iterație, altfel am obține un rezultat repetat. Facem acest lucru până când avem un pad, atâta timp cât mesajul nostru plaintext. La fel ca cifrul de flux one-time-pad, acum XOR mesajul nostru plaintext cu pad-ul nostru pseudorandom pentru a avea ca rezultat un text cifrat. Dacă hardware-ul dvs. are mai multe motoare AES, acest lucru este ultra eficient, deoarece este paralelizabil. În CBC, fiecare text cifrat depindea de blocul anterior de text cifrat, astfel încât era imposibil de paralelizat.,nici măcar nu avem nevoie neapărat de un cifru bloc pentru a combina IV-ul și cheia noastră într-un pad pseudorandom. Cifrurile bloc trebuie să fie reversibile. Dacă vă uitați atent la mecanica modului contor randomizat, veți observa că decriptarea nu ne cere să inversăm F(k, IV) . Având în vedere natura XOR, tot ce trebuie să facem este să regenerăm același pad pseudorandom și XOR-l cu cifrul nostru. Prin urmare, pentru a decripta, trebuie să repetăm operația, nu să o inversăm.,

      Abstract vorbind (până acum am evitat concepte abstracte), asta înseamnă că procedura pe care am folosi pentru a combina nostru cheie secretă și IV F(k, IV) trebuie să fie un Pseudoaleatoare Funcția (PRF), spre deosebire de o Permutare Pseudoaleatoare (PRP). De fapt, am aplicat aceste concepte pe parcursul acestui blogpost. Ambele PRPs și PRFs sunt deterministe proceduri care, având o anumită intrare, rezultatul într-un pseudoaleatoare de ieșire. (adică AES, XOR). Cu toate acestea, un PRP este mai strict în sensul că trebuie să fie reversibil., De fapt, termenii PRP și cifrul bloc (cum ar fi AES) sunt adesea folosiți sinonim. Cu toate acestea, un PRF nu trebuie să fie reversibil. Dacă reveniți la diapozitivele anterioare afișate în această postare, veți înțelege acum notația PRF și PRP.

      asta încheie prezentarea mea de ansamblu a criptării simetrice! Am acoperit cipuri flux și cifruri bloc. Apoi, deoarece cifrurile bloc pot fi efectuate doar pe aproximativ 16 octeți la un moment dat, am acoperit modurile de funcționare utilizate pentru a efectua cifruri bloc pe plaintexte mari. De asemenea, am clarificat conceptele PRPs vs PRFs.

Lasă un răspuns

Adresa ta de email nu va fi publicată. Câmpurile obligatorii sunt marcate cu *