Modul de funcționare a cifrului bloc

Moduri de criptare autentificată cu date suplimentare (AEAD) Editare

Articol principal: Criptarea autentificată

Au fost concepute mai multe moduri de operare pentru a combina secretul și autentificarea într-o singură primitivă criptografică. Exemple de astfel de moduri sunt înlănțuirea extinsă a blocurilor de cifrare (XCBC), înlănțuirea blocurilor de cifrare în funcție de integritate (IACBC), modul paralelizabil în funcție de integritate (IAPM), OCB, EAX, CWC, CCM și GCM. Modurile de criptare autentificată sunt clasificate ca moduri cu o singură trecere sau moduri cu două treceri. Unii algoritmi de criptare autentificată cu o singură trecere, cum ar fi modul OCB, sunt grevați de brevete, în timp ce alții au fost special concepuți și lansați astfel încât să evite o astfel de grevare.

În plus, unele moduri permit, de asemenea, autentificarea datelor asociate necriptate, iar acestea sunt denumite scheme AEAD (criptare autentificată cu date asociate). De exemplu, modul EAX este o schemă AEAD cu două treceri, în timp ce modul OCB este cu o singură trecere.

Galois/counter (GCM)Edit

GCM

Galois/counter

Criptare paralelizabilă

Da

.

Decriptare paralelizabilă

Da

Acces aleatoriu la citire

Da

Modul galois/contor (GCM) combină modul binecunoscutul mod counter de criptare cu noul mod Galois de autentificare. Caracteristica cheie este ușurința calculării paralele a înmulțirii câmpului Galois utilizat pentru autentificare. Această caracteristică permite un randament mai mare decât algoritmii de criptare.

GCM este definit pentru cifrele în bloc cu o dimensiune a blocului de 128 de biți. Codul de autentificare a mesajelor Galois (GMAC) este o variantă de autentificare exclusivă a GCM care poate forma un cod incremental de autentificare a mesajelor. Atât GCM, cât și GMAC pot accepta vectori de inițializare de lungime arbitrară. GCM poate profita pe deplin de procesarea paralelă, iar implementarea GCM poate utiliza în mod eficient un pipeline de instrucțiuni sau un pipeline hardware. Modul de operare CBC suferă blocaje de tip pipeline care îi îngreunează eficiența și performanța.

Ca și în CTR, blocurile sunt numerotate secvențial, iar apoi acest număr de bloc este combinat cu un IV și criptat cu un cifru de bloc E, de obicei AES. Rezultatul acestei criptări este apoi XOR cu textul în clar pentru a produce textul cifrat. La fel ca toate modurile de contorizare, acesta este în esență un cifru de flux și, prin urmare, este esențial să se utilizeze un IV diferit pentru fiecare flux care este criptat.

Blocurile de text cifrat sunt considerate coeficienți ai unui polinom care este apoi evaluat la un punct H dependent de cheie, folosind aritmetica câmpurilor finite. Rezultatul este apoi criptat, producând o etichetă de autentificare care poate fi utilizată pentru a verifica integritatea datelor. Textul criptat conține apoi IV, textul cifrat și eticheta de autentificare.

Counter with cipher block chaining message authentication code (CCM)Edit

Counter with cipher block chaining message authentication code (counter with CBC-MAC; CCM) este un algoritm de criptare autentificată conceput pentru a asigura atât autentificarea, cât și confidențialitatea. Modul CCM este definit numai pentru cifrele în bloc cu o lungime a blocului de 128 de biți.

Vector sintetic de inițializare (SIV)Edit

Vector sintetic de inițializare (SIV) este un mod de cifrare în bloc rezistent la nonce-misuse.

SIV sintetizează un IV intern folosind o funcție pseudorandom S2V. S2V este un hash cu cheie se bazează pe CMAC, iar intrarea în funcție este:

  • Date autentificate suplimentare (sunt acceptate zero, unul sau mai multe câmpuri AAD)
  • Plaintext
  • Ceava de autentificare (K1).

SIV criptează ieșirea S2V și textul în clar folosind AES-CTR, cu ajutorul cheii de criptare (K2).

SIV poate suporta criptarea autentificată externă bazată pe nonce, caz în care unul dintre câmpurile de date autentificate este utilizat în acest scop. RFC5297 specifică faptul că, în scopul interoperabilității, ultimul câmp de date autentificate ar trebui să fie utilizat nonce extern.

Datorită utilizării a două chei, cheia de autentificare K1 și cheia de criptare K2, schemele de denumire pentru variantele SIV AEAD pot duce la o anumită confuzie; de exemplu, AEAD_AES_SIV_CMAC_256 se referă la AES-SIV cu două chei AES-128 și nu AES-256.

AES-GCM-SIVEdit

AES-GCM-SIV este un mod de operare pentru Standardul de criptare avansată care oferă performanțe similare cu modul Galois/contor, precum și rezistență la abuzuri în cazul reutilizării unui nonce criptografic. Construcția este definită în RFC 8452.

AES-GCM-SIV sintetizează IV-ul intern. Acesta derivă un hash al datelor autentificate suplimentare și al textului în clar utilizând funcția hash POLYVAL Galois. Hash-ul este apoi criptat o cheie AES și utilizat ca etichetă de autentificare și vector de inițializare AES-CTR.

AES-GCM-SIV este o îmbunătățire față de algoritmul cu nume foarte asemănător GCM-SIV, cu câteva modificări foarte mici (de ex. modul în care este inițializat AES-CTR), dar care aduce beneficii practice pentru securitatea sa „Această adăugire permite criptarea a până la 250 de mesaje cu aceeași cheie, față de limitarea semnificativă de numai 232 de mesaje care era permisă cu GCM-SIV.”

Moduri de confidențialitate numai pentru confidențialitateEdit

Au fost definite mai multe moduri de funcționare. Unele dintre acestea sunt descrise mai jos. Scopul modurilor de criptare este de a masca modelele care există în datele criptate, așa cum este ilustrat în descrierea slăbiciunii BCE.

Diferite moduri de criptare maschează modelele prin cascadă de ieșiri din blocul de criptare sau alte variabile deterministe la nivel global în blocul de criptare următor. Intrările modurilor enumerate sunt rezumate în tabelul următor:

Rezumat al modurilor
Mode Formule Chipertext
Carte de coduri electronice (ECB) Yi = F(PlainTexti, Key) Yi
Clanșarea blocurilor periferice (CBC) Yi = PlainTexti XOR Ciphertexti-1 F(Y, Key); Ciphertext0 = IV
Propagating CBC (PCBC) Yi = PlainTexti XOR (Ciphertexti-1 XOR PlainTexti-1) F(Y, Key); Ciphertext0 = IV
Cipher feedback (CFB) Yi = Ciphertexti-1 Plaintext XOR F(Y, Key); Ciphertext0 = IV
Reacția de ieșire (OFB) Yi = F(Yi-1, Key); Y0 = F(IV, Key) Plaintext XOR Yi
Counter (CTR) Yi = F(IV + g(i), Key); IV = token() Plaintext XOR Yi

Note: g(i) este orice funcție deterministă, adesea funcția de identitate.

Carte electronică de coduri (ECB)Edit

ECB

Carte electronică de coduri

Criptare paralelizabilă

Da

Decriptare paralelizabilă

.

Da

Acces aleatoriu la citire

Da

Cel mai simplu dintre modurile de criptare este modul carte de coduri electronice (ECB) (denumit după cărțile de coduri fizice convenționale). Mesajul este împărțit în blocuri, iar fiecare bloc este criptat separat.

Dezavantajul acestei metode este lipsa de difuzare. Deoarece ECB criptează blocuri identice de text în clar în blocuri identice de text cifrat, nu ascunde bine modelele de date.ECB nu este recomandat pentru utilizarea în protocoale criptografice.

Un exemplu izbitor al gradului în care ECB poate lăsa modele de date în text în clar în textul cifrat poate fi văzut atunci când modul ECB este utilizat pentru a cripta o imagine bitmap care utilizează zone mari de culoare uniformă. În timp ce culoarea fiecărui pixel individual este criptată, imaginea de ansamblu poate fi totuși percepută, deoarece modelul de pixeli identic colorați din original rămâne în versiunea criptată.

Imaginea originală

Criptată folosind modul ECB

Modele diferite de ECB duc la pseudo-aleatorism

Cea de-a treia imagine este modul în care ar putea apărea imaginea criptată cu CBC, CTR sau oricare dintre celelalte moduri mai sigure – imposibil de distins de zgomotul aleatoriu. Rețineți că aspectul aleatoriu al celei de-a treia imagini nu garantează că imaginea a fost criptată în mod sigur; au fost dezvoltate multe tipuri de criptare nesigură care ar produce rezultate la fel de „aleatoare”.

Modul ECB poate face, de asemenea, ca protocoalele fără protecție de integritate să fie și mai susceptibile la atacuri de reluare, deoarece fiecare bloc este decriptat exact în același mod.

Cipher block chaining (CBC)Edit

CBC

Chiaruirea blocurilor de cifru

Criptarea paralelizabilă

.

Nu

Decriptare paralelizabilă

Da

Acces aleatoriu la citire

Da

Ehrsam, Meyer, Smith și Tuchman au inventat în 1976 modul de funcționare CBC (cipher block chaining). În modul CBC, fiecare bloc de text în clar este XOR cu blocul de text cifrat anterior înainte de a fi criptat. În acest fel, fiecare bloc de text cifrat depinde de toate blocurile de text în clar procesate până în acel moment. Pentru ca fiecare mesaj să fie unic, trebuie utilizat un vector de inițializare în primul bloc.

Dacă primul bloc are indice 1, formula matematică pentru criptarea CBC este

C i = E K ( P i ⊕ C i – 1 ) , {\displaystyle C_{i}=E_{K}(P_{i}\oplus C_{i-1}),}

C 0 = I V , {\displaystyle C_{0}=IV,}

în timp ce formula matematică pentru decriptarea CBC este

P i = D K ( C i ) ⊕ C i – 1 , {\displaystyle P_{i}=D_{K}(C_{i})\oplus C_{i-1},}

C 0 = I V . {\displaystyle C_{0}=IV.}

ExempluEdit

CBC a fost cel mai frecvent utilizat mod de operare. Principalele sale dezavantaje sunt faptul că criptarea este secvențială (adică nu poate fi paralelizată) și că mesajul trebuie să fie umplut la un multiplu al dimensiunii blocului de cifrare. O modalitate de a rezolva această ultimă problemă este prin metoda cunoscută sub numele de furt de text cifrat. Rețineți că o schimbare de un bit în textul în clar sau în vectorul de inițializare (IV) afectează toate blocurile de text cifrat care urmează.

Decriptarea cu un IV incorect face ca primul bloc de text în clar să fie corupt, dar blocurile de text în clar ulterioare vor fi corecte. Acest lucru se datorează faptului că fiecare bloc este XOR cu textul cifrat al blocului anterior, nu cu textul în clar, astfel încât nu este nevoie să se decripteze blocul anterior înainte de a-l utiliza ca IV pentru decriptarea blocului curent. Aceasta înseamnă că un bloc de text în clar poate fi recuperat din două blocuri adiacente de text cifrat. În consecință, decriptarea poate fi paralelizată. Rețineți că o modificare a textului cifrat pe un bit cauzează coruperea completă a blocului corespunzător de text în clar și inversează bitul corespunzător în următorul bloc de text în clar, dar restul blocurilor rămân intacte. Această particularitate este exploatată în diferite atacuri de tip „padding oracle”, cum ar fi POODLE.

Vectori de inițializare explicită profită de această proprietate prin adăugarea anticipată a unui singur bloc aleatoriu la textul în clar. Criptarea se face în mod normal, cu excepția faptului că IV nu trebuie să fie comunicat rutinei de decriptare. Oricare ar fi IV utilizat la decriptare, numai blocul aleatoriu este „corupt”. Acesta poate fi eliminat în siguranță, iar restul decriptării este textul în clar original.

Clanșarea blocurilor de cifrare prin propagare (PCBC)Edit

PCBC

Clanșarea blocurilor de cifrare prin propagare

Criptare paralelizabilă

.

Nu

Decriptare paralelizabilă

Nu

Acces aleatoriu la citire

Nu

Clanșarea blocurilor de cifrare cu propagare sau cifrare a textului în clar.modul de înlănțuire a blocurilor de cifrare a fost conceput pentru a face ca micile modificări ale textului cifrat să se propage la nesfârșit la decriptare, precum și la criptare. În modul PCBC, fiecare bloc de text în clar este comparat prin XOR atât cu blocul de text în clar anterior, cât și cu blocul de text cifrat anterior înainte de a fi criptat. Ca și în cazul modului CBC, în primul bloc se utilizează un vector de inițializare.

Algoritmii de criptare și de decriptare sunt următorii:

C i = E K ( P i ⊕ P i – 1 ⊕ C i – 1 ) , P 0 ⊕ C 0 = I V , {\displaystyle C_{i}=E_{K}(P_{i}\oplus P_{i-1}\oplus C_{i-1}),P_{0}\oplus C_{0}=IV,}

P i = D K ( C i ) ⊕ P i – 1 ⊕ C i – 1 , P 0 ⊕ C 0 = I V . {\displaystyle P_{i}=D_{K}(C_{i})\oplus P_{i-1}\oplus C_{i-1},P_{0}\oplus C_{0}=IV.}

PCBC este utilizat în Kerberos v4 și WASTE, mai ales, dar în rest nu este comun. La un mesaj criptat în modul PCBC, dacă două blocuri adiacente de text cifrat sunt schimbate, acest lucru nu afectează decriptarea blocurilor următoare. Din acest motiv, PCBC nu este utilizat în Kerberos v5.

Cipher feedback (CFB)Edit

Complet-bloc CFBEdit

CFB

Cipher feedback

Criptare paralelizabilă

Nu

.

Decriptare paralelizabilă

Da

Acces aleatoriu la citire

Da

Modul de reacție a cifrului (CFB), în forma sa cea mai simplă constă în utilizarea întregii ieșiri a cifrului în bloc. În această variantă, care este foarte asemănătoare cu CBC, transformă un cifru în bloc într-un cifru de flux cu auto-sincronizare. Decriptarea CFB în această variantă este aproape identică cu criptarea CBC realizată în sens invers:

C i = { IV , i = 0 E K ( C i – 1 ) ⊕ P i , altfel P i = E K ( C i – 1 ) ⊕ C i , {\displaystyle {\begin{aligned}C_{i}&={\begin{cases}{\text{IV}},&i=0\\E_{K}(C_{i-1})\oplus P_{i},&{\text{otherwise}}\end{cases}}\\P_{i}&=E_{K}(C_{i-1})\oplus C_{i},\end{aligned}}}

CFB-1, CFB-8, CFB-64, CFB-128, etc.Edit

NIST SP800-38A definește CFB cu o lățime de bit. Modul CFB necesită, de asemenea, un parametru întreg, notat s, astfel încât 1 ≤ s ≤ b. În specificația modului CFB de mai jos, fiecare segment de text în clar (Pj) și segment de text cifrat (Cj) este format din s biți. Valoarea lui s este uneori încorporată în denumirea modului, de exemplu, modul CFB pe 1 bit, modul CFB pe 8 biți, modul CFB pe 64 de biți sau modul CFB pe 128 de biți.

Aceste moduri vor trunchia ieșirea cifrului bloc subiacent.

I 0 = IV . {\displaystyle I_{0}={\text{IV}}.}

I i = ( ( ( I i – 1 ≪ s ) + C i ) mod 2 b , {\displaystyle I_{i}={\big (}(I_{i-1}\ll s)+C_{i}{\big )}{\bmod {2}}^{b},}

C i = MSB s ( E K ( I i – 1 ) ⊕ P i , {\displaystyle C_{i}=\operatorname {MSB} _{s}{\big (}E_{K}(I_{i-1}){\big )}\oplus P_{i},}

P i = MSB s ( E K ( I i – 1 ) ) ⊕ C i , {\displaystyle P_{i}=\operatorname {MSB} _{s}{\big (}E_{K}(I_{i-1}){\big )}\oplus C_{i},}

CFB-1 este considerat autosincronizator și rezistent la pierderea textului cifrat; „Atunci când se utilizează modul CFB pe 1 bit, atunci sincronizarea este restabilită automat la b+1 poziții după bitul inserat sau șters. Pentru alte valori ale lui s în modul CFB și pentru celelalte moduri de confidențialitate din prezenta recomandare, sincronizarea trebuie să fie restabilită din exterior.” (NIST SP800-38A). Adică o pierdere de 1 bit într-un cifru în bloc cu o lățime de 128 de biți, precum AES, va produce 129 de biți nevalabili înainte de a emite biți valabili.

CFB se poate, de asemenea, autosincroniza în unele cazuri speciale, altele decât cele specificate. De exemplu, o schimbare de un bit în CFB-128 cu un cifru bloc de 128 de biți subiacent, se va resincroniza după două blocuri. (Cu toate acestea, CFB-128 etc. nu va gestiona cu grație pierderea de biți; o pierdere de un bit va face ca decriptorul să piardă alinierea cu decriptorul)

CFB în comparație cu alte moduriEdit

Ca și în cazul modului CBC, modificările din textul clar se propagă pentru totdeauna în textul cifrat, iar criptarea nu poate fi paralelizată. De asemenea, la fel ca și CBC, decriptarea poate fi paralelizată.

CFB, OFB și CTR au două avantaje comune față de modul CBC: cifrul în bloc este folosit numai în direcția de criptare, iar mesajul nu trebuie să fie umplut la un multiplu al dimensiunii blocului de cifrare (deși furtul de text cifrat poate fi, de asemenea, folosit pentru modul CBC pentru a face umplutura inutilă).

Feedback la ieșire (OFB)Edit

OFB

Output feedback

Criptare paralelizabilă

Nu

Decriptare paralelizabil

Nu

Acces aleatoriu la citire

Nu

Modul de feedback la ieșire (OFB) transformă un cifru în bloc într-un cifru de flux sincron. Acesta generează blocuri de flux de chei, care sunt apoi XOR cu blocurile de text în clar pentru a obține textul cifrat. La fel ca în cazul altor tipuri de cifrare în flux, inversarea unui bit din textul cifrat produce un bit inversat în textul în clar în aceeași locație. Această proprietate permite multor coduri de corecție a erorilor să funcționeze normal chiar și atunci când sunt aplicate înainte de criptare.

Din cauza simetriei operației XOR, criptarea și decriptarea sunt exact la fel:

C j = P j ⊕ O j , {\displaystyle C_{j}=P_{j}\oplus O_{j},}

P j = C j ⊕ O j , {\displaystyle P_{j}=C_{j}\oplus O_{j},}

O j = E K ( I j ) , {\displaystyle O_{j}=E_{K}(I_{j}),}

I j = O j – 1 , {\displaystyle I_{j}=O_{j-1},}

I 0 = IV . {\displaystyle I_{0}={\text{IV}}.}

Care operație de cifrare în bloc cu feedback de ieșire depinde de toate cele anterioare și, prin urmare, nu poate fi efectuată în paralel. Cu toate acestea, deoarece textul în clar sau textul cifrat este utilizat doar pentru XOR-ul final, operațiile de cifrare în bloc pot fi efectuate în avans, permițând ca etapa finală să fie efectuată în paralel odată ce textul în clar sau textul cifrat este disponibil.

Este posibil să se obțină un keystream în modul OFB prin utilizarea modului CBC cu un șir constant de zerouri ca intrare. Acest lucru poate fi util, deoarece permite utilizarea unor implementări hardware rapide ale modului CBC pentru criptarea în modul OFB.

Utilizarea modului OFB cu un bloc parțial ca feedback, ca și în cazul modului CFB, reduce lungimea medie a ciclului cu un factor de 232 sau mai mult. Un model matematic propus de Davies și Parkin și susținut de rezultate experimentale a arătat că numai cu o reacție completă se poate obține o lungime medie a ciclului apropiată de maximul posibil de obținut. Din acest motiv, suportul pentru reacție trunchiată a fost eliminat din specificațiile OFB.

Counter (CTR)Edit

CTR

Counter

Encryption parallelizable

.

Da

Decriptare paralelizabilă

Da

Acces aleatoriu la citire

Da

Nota: Modul CTR (CM) este cunoscut și sub numele de modul de contorizare a numerelor întregi (ICM) și modul de contorizare a numerelor întregi segmentate (SIC).

Ca și OFB, modul de contorizare transformă un cifru de bloc într-un cifru de flux. Acesta generează următorul bloc keystream prin criptarea valorilor succesive ale unui „contor”. Contorul poate fi orice funcție care produce o secvență despre care se garantează că nu se va repeta pentru o perioadă lungă de timp, deși un contor real increment-by-one este cel mai simplu și cel mai popular. Utilizarea unei funcții de intrare deterministe simple a fost controversată; criticii au susținut că „expunerea deliberată a unui criptosistem la o intrare sistematică cunoscută reprezintă un risc inutil”. Cu toate acestea, în prezent, modul CTR este acceptat pe scară largă, iar orice problemă este considerată o slăbiciune a cifrului bloc subiacent, care se așteaptă să fie securizat indiferent de prejudecățile sistemice de la intrarea sa. Alături de CBC, modul CTR este unul dintre cele două moduri de cifrare în bloc recomandate de Niels Ferguson și Bruce Schneier.

Modul CTR a fost introdus de Whitfield Diffie și Martin Hellman în 1979.

Modul CTR are caracteristici similare cu OFB, dar permite, de asemenea, o proprietate de acces aleatoriu în timpul decriptării. Modul CTR este bine adaptat pentru a funcționa pe o mașină cu mai multe procesoare, unde blocurile pot fi criptate în paralel. În plus, nu suferă de problema ciclului scurt care poate afecta OFB.

Dacă IV/nonce este aleator, atunci acestea pot fi combinate împreună cu contorul folosind orice operație inversabilă (concatenare, adunare sau XOR) pentru a produce blocul de contor unic real pentru criptare. În cazul unui nonce nealeatoriu (cum ar fi un contor de pachete), nonce-ul și contorul trebuie concatenate (de exemplu, stocarea nonce-ului în cei 64 de biți superiori și a contorului în cei 64 de biți inferiori ai unui bloc de contor de 128 de biți). În multe cazuri, simpla adăugare sau XOR a nonce-ului și a contorului într-o singură valoare ar încălca securitatea în cazul unui atac de tip „chosen-plaintext”, deoarece atacatorul ar putea fi capabil să manipuleze întreaga pereche IV-contor pentru a provoca o coliziune. Odată ce un atacator controlează perechea IV-contor și textul în clar, XOR a textului cifrat cu textul în clar cunoscut ar produce o valoare care, atunci când este XOR cu textul cifrat al celuilalt bloc care împarte aceeași pereche IV-contor, ar decripta acel bloc.

Rețineți că nonce-ul din această diagramă este echivalent cu vectorul de inițializare (IV) din celelalte diagrame. Cu toate acestea, dacă informația de offset/locație este coruptă, va fi imposibil să se recupereze parțial astfel de date din cauza dependenței de offsetul de octeți.

Lasă un răspuns

Adresa ta de email nu va fi publicată.