Un cifru bloc este un fel de cifru simetric [1] care operează cu grupuri de biți de lungime fixă - blocuri a căror dimensiune caracteristică variază între 64-256 de biți. Dacă textul original (sau restul acestuia) este mai mic decât dimensiunea blocului, acesta este completat înainte de criptare . De fapt, un cifru bloc este o substituție pe alfabetul blocurilor, care, în consecință, poate fi mono- sau polialfabetic. [2] Cifrul bloc este o componentă importantă a multor protocoale criptografice și este utilizat pe scară largă pentru a proteja datele transmise printr-o rețea.
Spre deosebire de un tampon de criptare , în care lungimea cheii este egală cu lungimea mesajului, un cifru bloc este capabil să cripteze unul sau mai multe mesaje cu o singură cheie cu o lungime totală mai mare decât lungimea cheii. Transmiterea unei chei care este mică în comparație cu mesajul pe un canal criptat este o sarcină mult mai simplă și mai rapidă decât transmiterea mesajului în sine sau a unei chei de aceeași lungime, ceea ce face posibilă utilizarea lui în fiecare zi. Cu toate acestea, în acest caz, cifrul încetează să mai fie indestructibil. Cifrurile bloc diferă de cifrurile flux prin faptul că procesează biții în grupuri, mai degrabă decât într-un flux. În același timp, cifrurile bloc sunt mai lente decât cifrurile în flux. [3] Sistemele simetrice au un avantaj față de cele asimetrice în viteza de criptare, ceea ce le permite să rămână relevante, în ciuda mecanismului de transmitere a cheilor mai slab (destinatarul trebuie să cunoască cheia secretă care trebuie transmisă pe un canal criptat deja stabilit. În același timp timp, în cifrurile asimetrice cheia publică necesară pentru criptare poate fi cunoscută de toată lumea și nu este nevoie să partajați cheia de criptare).
Avantajele cifrurilor bloc includ similitudinea procedurilor de criptare și decriptare , care, de regulă, diferă numai în ordinea acțiunilor. Acest lucru simplifică crearea dispozitivelor de criptare, deoarece permite utilizarea acelorași blocuri în lanțurile de criptare și decriptare. Flexibilitatea cifrurilor bloc le permite să fie folosite pentru a construi alte primitive criptografice: un generator de secvențe pseudo-aleatoare , un cifr de flux, imitații de inserare și hashuri criptografice . [patru]
Modelul modern de criptare bloc se bazează pe ideea cifrurilor bloc iterative propusă în publicația lui Claude Shannon din 1949 „ Teoria comunicării în sistemele secrete ”. Acest concept vă permite să atingeți un anumit nivel de securitate prin combinarea operațiunilor de înlocuire și permutare ușor de efectuat [ 5 ] .
Până în anii 1970, criptografia a fost lotul ofițerilor militari și de informații; practic nu existau publicații în presa deschisă [6] . Pionierul a fost cifrul „ Lucifer ”, dezvoltat în 1970 de IBM și bazat pe SP-net . Ideea cifrului a fost de a folosi combinații de operații simple și, prin urmare, rapid calculate atât în hardware, cât și în software. Cu toate acestea, schema s-a dovedit a fi nereușită: a fost prea greoaie, ceea ce a dus la o viteză scăzută de criptare în implementarea software (aproximativ 8 kb / s) și în hardware (97 kb / s).
Au început să apară îngrijorări cu privire la stabilitatea acestui algoritm. Cu toate acestea, principiile dezvoltate în timpul construcției lui Lucifer (rețeaua SP și rețeaua Feistel , numită după unul dintre dezvoltatori) au stat la baza construcției cifrurilor bloc.
În 1973, Institutul Național de Standarde și Tehnologie ( NIST ) a anunțat un concurs pentru dezvoltarea unui standard de criptare a datelor, al cărui câștigător în 1974 a fost cifrul DES (Data Encryption Standard), care este, de fapt, o versiune îmbunătățită a Lucifer. . Publicarea cifrului în 1977 a fost fundamentală pentru înțelegerea publică a modelului modern de cifrare bloc. În același timp, a dat naștere la dezvoltarea atacurilor criptoanalitice .
După ce a fost aprobat de Institutul Național American de Standarde în 1981, algoritmul a fost folosit în sectorul civil pentru o lungă perioadă de timp și chiar a depășit Statele Unite . Cu toate acestea, cifrul a avut un dezavantaj semnificativ - o lungime mică a cheii, care a dat naștere multor atacuri asociate cu enumerarea paralelă și posibilitatea apropiată de implementare a acesteia. Lipsa unei protecții adecvate împotriva atacurilor cifrului DES a dat naștere multor algoritmi care sunt atât o versiune mai complexă a DES ( 3DES ) cât și scheme complet diferite ( NewDES , FEAL , IDEA ).
1997 a fost începutul programului de adoptare AES (Advanced Encryption Standard). Competiția a constat din trei etape, al căror câștigător final a fost algoritmul RIJNDAEL dezvoltat de belgienii J. Daemen și V. Rijmen. AES, ca și predecesorii săi, este construit și folosind rețeaua SP.
Astăzi, există multe atacuri cărora cifrul bloc trebuie să le reziste, începând cu atacul cu forță brută ca fiind cel mai banal. [7]
Un cifru bloc este format din doi algoritmi perechi: criptare și decriptare . [8] Ambii algoritmi pot fi reprezentați ca funcții. Funcția de criptare E ( eng. criptare - criptare) primește un bloc de date M ( ing. mesaj - mesaj) cu o dimensiune de n biți și o cheie K ( eng. cheie - cheie) cu o dimensiune de k biți ca intrare și oferă un bloc de text cifrat C ( eng. cipher ) la ieșire - cipher) cu o dimensiune de n biți:
Pentru orice cheie K , E K este o funcție bijectivă ( permutare ) pe setul de blocuri de n - biți. Funcția de decriptare D ( eng. decriptare - decriptare) primește textul cifrat C, cheia K ca intrare și dă M la ieșire:
fiind, în același timp, inversul funcției de criptare:
șiRețineți că cheia necesară pentru criptare și decriptare este aceeași, o consecință a simetriei cifrului bloc.
„Proiectarea unui cifru bloc nu este dificilă. Dificultatea constă în proiectarea unui cifru bloc care nu este doar sigur, ci și ușor de descris și ușor de implementat.”
Bruce Schneier , criptograf și specialist în securitatea computerelor .
Pionierii dezvoltării cifrurilor bloc au fost angajați ai IBM când lucrau la cifrul „ Lucifer ”. [9] Ei au proiectat primele fundații care au fost folosite în dezvoltarea circuitelor ulterioare. În același timp, ar trebui să se țină cont de faptul că noul cifr nu ar trebui să fie doar rezistent la toate tipurile de atacuri cunoscute, ci și destul de simplu de implementat.
Majoritatea cifrurilor bloc sunt iterative. Aceasta înseamnă că cifrul dat convertește blocuri de text simplu de lungime constantă în blocuri de text cifrat de aceeași lungime prin intermediul funcțiilor ciclice reversibile cunoscute sub numele de funcții rotunde. [10] Acest lucru se datorează simplității și vitezei de execuție atât a implementărilor software, cât și a celor hardware. De obicei, funcțiile rotunde folosesc taste diferite derivate din cheia originală:
,unde C i este valoarea blocului după runda a I-a, C 0 = M este textul simplu, Ki este cheia folosită în runda a I-a și obținută din cheia originală K.
Mărimea blocului n este un parametru fix al cifrului bloc, de obicei 64 sau 128 de biți, deși unele cifruri permit mai multe valori diferite. O lungime de 64 de biți a fost acceptabilă până la mijlocul anilor 1990, când au fost utilizați 128 de biți, ceea ce corespunde aproximativ cu dimensiunea unui cuvânt de mașină și permite implementarea eficientă pe cele mai comune platforme de calcul. Diverse scheme de criptare vă permit să criptați text simplu de lungime arbitrară. Fiecare are anumite caracteristici: probabilitate de eroare, ușurință de acces, vulnerabilitate la atacuri. Începând cu 2006, o cheie de 80 de biți a fost capabilă să prevină un atac cu forță brută .
SP-network (în engleză substitution-permutation network, SPN ) este unul dintre cele mai importante tipuri de cifruri bloc iterative. Un cifru bazat pe SP-net primește un bloc și o cheie ca intrare și efectuează mai multe runde alternante, constând din etape de substituție alternante și etape de permutare [ 11 ] . O singură S-box este suficientă pentru a obține securitatea, dar un astfel de bloc va necesita o cantitate mare de memorie. Prin urmare, se folosesc cutii S mici amestecate cu cutii P [6] . Etapa de substituție neliniară amestecă biții cheie cu biții de text simplu, creând jena lui Shannon Etapa de permutare liniară distribuie redundanța în întreaga structură a datelor, dând naștere difuziei [12] [13] .
Cutia S înlocuiește un bloc mic de biți de intrare cu un alt bloc de biți de ieșire. Această înlocuire trebuie să fie una la unu pentru a garanta reversibilitatea. Scopul S-box-ului este pentru o transformare neliniară, care împiedică efectuarea criptoanalizei liniare . Una dintre proprietățile cutiei S este efectul de avalanșă , adică o modificare a unui bit la intrare duce la o modificare a tuturor biților la ieșire [14] .
P-block - permutarea tuturor biților: blocul primește ieșirea S-box-ului ca intrare, schimbă toți biții și transmite rezultatul în S-box-ul rundei următoare. O calitate importantă a unei casete P este capacitatea de a distribui ieșirea unei casete S la intrările unor casete S cât mai mari posibil.
Pentru fiecare rundă se folosește o cheie diferită , obținută din cea originală . O astfel de cheie se numește cheie rotundă. Poate fi obținut prin împărțirea cheii originale în părți egale sau printr-un fel de transformare a întregii chei.
O rețea Feistel este o metodă generală de transformare a unei funcții arbitrare F într-o permutare pe un set de blocuri. [15] Constă din celule care se repetă ciclic - runde. În cadrul fiecărei runde, blocul de text simplu este împărțit în două părți egale. Funcție rotundă
ia o jumătate (în stânga în figură), o transformă folosind tasta Ki și combină rezultatul cu a doua jumătate folosind operația SAU exclusivă (XOR). Această cheie este dată de cheia inițială K și este diferită pentru fiecare rundă. Apoi jumătățile sunt schimbate (în caz contrar, doar o jumătate din bloc va fi convertită) și sunt introduse în runda următoare. Transformarea rețelei Feistel este o operațiune reversibilă.
Există anumite cerințe pentru funcția F :
Dacă prima cerință nu este îndeplinită, rețeaua va fi supusă unor atacuri diferențiate (mesajele similare vor avea cifruri similare). În al doilea caz, acțiunile cifrului sunt liniare, iar rezolvarea unui sistem de ecuații liniare este suficientă pentru a rupe [3] .
Acest design are un avantaj tangibil: procedurile de criptare / decriptare sunt aceleași, doar derivatele cheilor originale sunt utilizate în ordine inversă. Aceasta înseamnă că aceleași blocuri pot fi folosite atât pentru criptare, cât și pentru decriptare, ceea ce cu siguranță simplifică implementarea cifrului. Dezavantajul schemei este că doar jumătate din bloc este procesat în fiecare rundă, ceea ce duce la necesitatea creșterii numărului de runde. [2]
La construirea algoritmului, se ia în considerare formarea unui grup , în care elementele sunt setul de blocuri de text cifrat cu toate cheile, iar operația de grup este alcătuirea rundelor de criptare. Dacă un cifr dat formează un grup aproape complet, nu are sens să folosești criptarea multiplă [6] .
În sine, un cifru bloc vă permite să criptați numai blocuri de date individuale de o lungime predeterminată. Dacă lungimea mesajului este mai mică decât lungimea blocului ( eng. blocklength ), atunci este adăugită la lungimea dorită. Cu toate acestea, dacă lungimea mesajului este mai mare, devine necesară împărțirea lui în blocuri. În același timp, există mai multe modalități de a cripta astfel de mesaje, numite moduri de operare cu cifrare bloc.
Cel mai simplu mod de operare al unui cifr de bloc este modul carte electronică de coduri sau modul de substituție simplă ( Eng. Electronic CodeBook, ECB ), în care toate blocurile de text simplu sunt criptate independent unele de altele. Cu toate acestea, atunci când se utilizează acest mod, proprietățile statistice ale datelor deschise sunt parțial păstrate, deoarece fiecare bloc de date identic corespunde în mod unic unui bloc de date criptat. Cu o cantitate mare de date (de exemplu, video sau sunet), acest lucru poate duce la scurgeri de informații despre conținutul acestora și poate oferi mai mult spațiu pentru criptoanaliza .
Eliminarea dependențelor statistice în text simplu este posibilă cu ajutorul arhivării preliminare, dar nu rezolvă complet problema, deoarece informațiile de serviciu ale arhivatorului rămân în fișier , ceea ce nu este întotdeauna acceptabil.
Pentru a depăși aceste probleme, au fost dezvoltate și alte moduri de operare [16] [17] , stabilite de standardul internațional ISO/IEC 10116 [18] și definite de ghidurile naționale, precum NIST 800-38A [19] și BSI TR- 02102 [20]
Ideea generală este de a folosi un număr aleatoriu, adesea denumit vector de inițializare (IV). În modul popular Cipher Block Chaining ( CBC ), IV-ul trebuie să fie aleatoriu sau pseudo-aleatoriu pentru siguranță. Odată definit, este XORed cu primul bloc de text simplu. Următorul pas este să criptăm rezultatul și să obținem primul bloc de criptare, pe care îl folosim ca IV pentru al doilea bloc și așa mai departe. În modul Cipher Feedback ( CFB ) , IV este criptat direct, după care este adăugat modulo doi (XOR, SAU exclusiv) cu primul bloc. Blocul de criptare primit este folosit ca IV pentru criptare ulterioară. Modul nu are avantaje speciale față de celelalte. Spre deosebire de modurile anterioare, modul Output Feedback ( OFB ) criptează IV-ul ciclic, formând un flux de chei adăugate blocurilor de mesaje. Avantajul modului este coincidența totală a operațiunilor de criptare și decriptare. Modul de contor ( English Counter, CTR ) este similar cu OFB, dar permite calculul paralel al cifrului: IV este combinat cu numărul blocului fără unul și rezultatul este criptat. Blocul rezultat este adăugat la blocul de mesaje corespunzător.
Rețineți că vectorul de inițializare trebuie să fie diferit în sesiuni diferite. Altfel, ajungem la problema modului ECB. Este posibil să utilizați un număr aleator, dar acest lucru necesită un generator de numere aleatoare destul de bun. Prin urmare, se stabilește de obicei un anumit număr - o etichetă cunoscută de ambele părți (de exemplu, numărul de sesiune) și numită nonce ( Număr folosit o dată ) . De obicei, secretul acestui număr nu este necesar. Mai departe IV este rezultatul criptării nonce. În cazul modului contor, nonce este folosit pentru a forma cheia rotundă Ki [ 3] :
unde i este numărul rotund.După cum sa menționat mai sus, dacă lungimea mesajului în sine, sau a ultimului bloc, este mai mică decât lungimea blocului, atunci acesta trebuie să fie completat cu . Simpla umplutură cu zero biți nu rezolvă problema, deoarece receptorul nu va putea găsi sfârșitul sarcinii utile. În plus, această opțiune duce la atacuri din partea Oracolului adăugării [21] .
Prin urmare, în practică, soluția standardizată ca „Complement Method 2” ( Bit Completion ) în ISO/IEC 9797-1 este aplicabilă, adăugând un 1 bit la sfârșitul mesajului și umplând spațiul rămas cu zerouri [22] . În acest caz, s-a dovedit rezistența la astfel de atacuri [23] .
Ca toate cifrurile ai căror algoritmi sunt cunoscuți, cifrurile bloc sunt supuse atacurilor criptografice. Scopul atacului este de a dezvolta un algoritm de cracare care este mai eficient decât căutarea exhaustivă a tuturor cheilor posibile. Dacă se găsește o astfel de soluție, atacul este considerat reușit. În același timp, cifrul este rupt dacă există un atac care permite spargerea în timpul în care informația rămâne relevantă, iar efectuarea unui astfel de atac este benefică atacatorului.
Engleză Atacul cu forța adevărată . Datorită caracteristicii unui cod bloc ca reversibilitate a funcției, ieșirea sa devine distinsă de o secvență aleatorie adevărată datorită paradoxului zilei de naștere . Această caracteristică duce la o scădere a securității cifrului și la necesitatea de a lua în considerare dimensiunea blocului. Astfel, există un compromis între blocurile mari care reduc performanța cifrului și blocurile mici nesigure [24] .
Mărimea cheii joacă un rol la fel de important. Cifrul DES timpuriu a fost caracterizat de o dimensiune a cheii de 56 de biți, care, după cum a arătat practica, nu este în mod clar suficientă pentru un transfer de date fiabil. A fost un atac cu forță brută care a spart pentru prima dată DES. Algoritmii mai moderni precum AES și GOST 28147-89 au o dimensiune a cheii de 128 de biți, respectiv 256 de biți, ceea ce face ca astfel de atacuri să nu aibă sens [25] .
Engleză Criptanaliza diferențială . În 1990, Eli Biham și Adi Shamir au definit ideea criptoanalizei diferențiale. Cu această metodă, a fost posibilă spargerea cifrului DES . Cifrurile constante S-box și codurile în modul e-book sunt susceptibile la un atac similar . Această metodă funcționează cu perechi de texte cifrate pentru care se cunoaște diferența dintre textele clare corespunzătoare și ia în considerare evoluția acestor diferențe. Alături de cel liniar, este cel mai frecvent în atacurile asupra unui cifru bloc [6] .
Engleză Criptanaliza liniară . Criptanaliza liniară este o metodă de spargere a cifrului bazată pe căutarea aproximărilor afine pentru ca algoritmul să funcționeze. Dezvoltat de matematicianul japonez Mitsuru Matsui , care a fost primul care a folosit această tehnică pentru a ataca DES și FEAL . Metoda se bazează pe aplicarea operației „SAU exclusiv” (XOR) la blocurile de text simplu, text cifrat și rezultatul acestora, ceea ce face posibilă obținerea rezultatului XOR a biților cheie. Structura blocului S are o influență puternică asupra rezistenței la atacurile de linie. Când metoda a fost dezvoltată, s-a dovedit că DES avea o slăbiciune pentru ea, deoarece nimeni nu se aștepta la astfel de atacuri când a fost dezvoltată [6] .
Engleză Criptanaliza intergală . Criptanaliza integrală este un tip de atac care este aplicabil în special cifrurilor bloc construite pe SP-net. Spre deosebire de criptoanaliza diferențială, care utilizează o pereche de texte clare alese cu o diferență fixă calculată folosind operația XOR, criptoanaliza integrală utilizează seturi de texte clare în care unele părți sunt menținute constante, în timp ce altele variază între valorile posibile. O astfel de mulțime are în mod necesar o sumă modulo 2 (XOR) de 0, în timp ce suma de text cifrat corespunzătoare conține informații despre operațiile cifrului.
Pe lângă cele descrise mai sus, există și alte tipuri de atacuri:
Orice cifr nou trebuie să demonstreze rezistență la toate tipurile cunoscute de atacuri.
În practică, un cifru bloc este evaluat în funcție de o varietate de criterii [26] [27] :
Cifrul Lucifer este în general privit ca primul cifr bloc. Algoritmul a fost dezvoltat de IBM în anii 1970 pentru propriile nevoi și se bazează pe munca lui Horst Feistel . Versiunea finalizată a fost adoptată ca standard federal de procesare a informațiilor guvernului SUA : FIPS PUB 46 Data Encryption Standard (DES) - standard de criptare a datelor.
DES are o dimensiune de bloc de 64 de biți și o cheie de 56 de biți. Ulterior, blocurile pe 64 de biți au devenit general acceptate în construcția cifrului. Lungimea cheii depindea de mai mulți factori, inclusiv restricțiile guvernamentale și, ca rezultat, a devenit un dezavantaj evident al algoritmului - nu era suficient pentru a rezista atacurilor cu forță brută. În 1993, Michael Wiener a proiectat o mașină de un milion de dolari capabilă să spargă DES în 3,5 ore cu forță brută , iar în 1998 a fost construită o capabilă să spargă . În plus, pentru cheile algoritmului, există o serie de valori care sunt considerate slabe [6] .
Există o versiune îmbunătățită a algoritmului numită Triple DES sau 3DES. Viteza algoritmului a scăzut de trei ori, dar sistemul s-a dovedit a fi mult mai rezistent la căutarea exhaustivă datorită lungimii cheii triplate (168 biți și 112 biți secreti). Opțional, puteți alege o cheie dublă (112 biți și 80 de biți secreti). Din 2011, sistemul cu trei chei își păstrează securitatea, dar versiunea cu două chei cu securitate pe 80 de biți nu mai îndeplinește cerințele moderne [28] .
GOST 28147-89, un standard de criptare rus introdus în 1990, este, de asemenea, un standard CIS. Cifrul se bazează pe o rețea Feistel de 32 de runde cu o cheie de 256 de biți. În mai 2011, criptoanalistul Nicolas Courtois a încercat un atac care a redus timpul de cracare cu un factor de 28 (256), dar a necesitat 264 de perechi text clar/ text cifrat , ceea ce nu poate fi considerat un atac de succes, deoarece cu această cantitate de text clar nu este nevoie. pentru cunoașterea textului cifrat. [29] [30]
Datorită prezenței unui număr mare de runde, atacurile bazate pe criptoanaliza diferențială și liniară nu sunt viabile, deoarece acestea din urmă sunt sensibile la numărul de runde. O căutare completă cu o astfel de lungime a cheii este complet lipsită de sens. Pentru a obține efectul de avalanșă , GOST necesită 8 runde, ceea ce poate fi o slăbiciune a algoritmului, dar la 32 de runde nu contează atât de mult. Problema siguranței GOST rămâne deschisă [6] .
Adoptat de NIST în 2001, după 5 ani de competiție publică, AES a înlocuit DES ca standard federal al Statelor Unite. Cifrul a fost dezvoltat de doi criptografi belgieni , Daimen Yoan și Raymen Vincent . Dimensiunea blocului este de 128 de biți, iar dimensiunile cheilor sunt de 128, 192 și 256 de biți, deși dimensiunea blocului poate fi specificată prin orice număr de biți multiplu de 32, cu o valoare minimă de 128 de biți. Dimensiunea maximă a blocului este de 256 de biți, în timp ce dimensiunea cheii nu are limită teoretică. Suportul pentru acest cifru a fost introdus de Intel în familia de procesoare x86 .
Cifrul bloc poate fi folosit pentru a construi alte primitive criptografice :
![]() |
---|
Criptosisteme simetrice | |
---|---|
Cifruri în flux | |
Rețeaua Feistel | |
Rețeaua SP | |
Alte |