În țara noastră, un algoritm unificat pentru reprezentarea criptografică a datelor pentru sistemele de prelucrare a informațiilor în rețele de calculatoare, sisteme de calcul individuale și calculatoare, care este determinat de GOST 28147-89.
Acest algoritm de conversie a datelor criptografice este un algoritm de bloc de 64 de biți cu o cheie de 256 de biți, conceput pentru implementarea hardware și software, îndeplinește cerințele criptografice și nu impune restricții cu privire la gradul de secretizare a informațiilor protejate.
Când descrieți algoritmul, se utilizează următoarea notație:
L şi R sunt secvenţe de biţi;
LR este concatenarea secvenţelor L şi R, în care biţii secvenţei R urmează biţii secvenţei L;
(+) - adiție pe biți modulo 2 (operație „SAU exclusivă”);
[+] - adăugarea numerelor pe 32 de biți modulo 2 32 ;
(+) - adăugarea numerelor pe 32 de biți modulo 2 32 -1.
Numerele se însumează după următoarea regulă:
A[+]B=A+B dacă A+B< 2 32 ,
A [+] B = A + B - 2 32 dacă A + B >= 2 32 . A (+) B = A + B dacă A + B< 2^32 - 1,
A {+} B = A + B - (2^32 - 1), если A + B >= 2^32 - 1.
Algoritmul oferă patru moduri de funcționare:
În orice caz, o cheie de 256 de biți K este utilizată pentru a cripta datele, care este reprezentată ca opt subchei de 32 de biți K i:
K = K 7 K 6 K 5 K 4 K 3 K 2 K 1 K 0 .
Decriptarea se realizează cu aceeași cheie ca și criptarea, dar acest proces este inversul procesului de criptare a datelor. Mod de schimb ușor
Primul și cel mai simplu mod - înlocuire. Datele de criptat sunt împărțite în blocuri de 64 de biți. Procedura de criptare pentru blocul de date deschis T 0 include 32 de cicluri (j=1...32).
Blocul T 0 este împărțit în două secvențe de 32 de biți: B(0)A(0), unde B(0) sunt biții din stânga sau cei mai semnificativi, A(0) sunt biții din dreapta sau cel mai puțin semnificativ.
Aceste secvențe sunt introduse în unitățile N 1 și N 2 înainte de începerea primului ciclu de criptare.
Primul ciclu (j=1) al procedurii de criptare pentru un bloc de date pe 64 de biți este descris prin următoarele formule:
Aici i desemnează numărul de iterație (i = 1, 2,..., 32).
Funcția f se numește funcție de criptare. Argumentul său este suma modulo 2 32 a numărului A(i) obținut la pasul de iterație anterior și numărul X(j) al cheii (dimensiunea fiecăruia dintre aceste numere este de 32 de cifre).
Funcția de criptare include două operații asupra sumei de 32 de biți rezultată. Prima operație se numește substituție K. Blocul de substituție K este format din 8 noduri de substituție K(1) ... K(8) cu o memorie de 64 de biți fiecare. Vectorul de 32 de biți care ajunge la blocul de substituție este împărțit în 8 vectori consecutivi de 4 biți, fiecare dintre care este convertit într-un vector de 4 biți de către nodul de înlocuire corespunzător, care este un tabel de 16 numere întregi în intervalul 0.. .15.
Vectorul de intrare specifică adresa rândului din tabel al cărui număr este vectorul de ieșire. Vectorii de ieșire de 4 biți sunt apoi combinați secvențial într-un vector de 32 de biți. Tabelul bloc de substituție K conține elemente cheie comune rețelei de calculatoare și rar schimbate.
A doua operație este o deplasare ciclică la stânga a vectorului de 32 de biți obținut prin substituirea K. Blocul de date criptat de 64 de biți Tw este reprezentat ca Tw =A(32)B(32).
Restul blocurilor de date deschise în modul de înlocuire simplă sunt criptate în același mod.
Rețineți că modul de înlocuire simplu poate fi utilizat pentru criptarea datelor numai în cazuri limitate. Aceste cazuri includ generarea unei chei și criptarea acesteia cu asigurarea protecției la imitație (protecție împotriva impunerii de date false) pentru transmiterea prin canale de comunicație sau stocarea în memoria computerului. Modul Gamma
Datele deschise, împărțite în blocuri de 64 de biți T(i) (i=1, 2,..., m, unde m este determinat de cantitatea de date criptate), sunt criptate în modul gamma prin adăugare pe biți modulo 2 cu cifra gamma Гw, care este produsă în blocuri de 64 de biți, adică Гw = (Г(1),Г(2),...,Г(i),...,Г(m)).
Ecuația de criptare a datelor în modul gamma poate fi reprezentată după cum urmează:
W(i) = A (Y(i-1) [+] C2, Z(i-1) (+) C1) (+) T(i) = G(i) (+) T(i).
Aici W(i) este un bloc de text cifrat pe 64 de biți,
A - funcție de criptare în modul de înlocuire simplă (argumentele acestei funcție sunt două numere de 32 de biți),
C1 și C2 - constante specificate în GOST 28147-89,
Y(i) și Z(i) sunt cantități care sunt determinate iterativ, deoarece gama se formează după cum urmează:
(Y(0), Z(0)) = A(S), unde S este o secvență binară de 64 de biți (mesaj de sincronizare);
(Y(i), Z(i)) = (Y(i-1) [+] C2, Z(i-1) (+) C1) pentru i = 1, 2,...,m.
Decriptarea datelor este posibilă numai dacă există un mesaj de sincronizare, care nu este un element secret al cifrului și poate fi stocat în memoria computerului sau transmis prin canale de comunicație împreună cu datele criptate. Modul de feedback gamma
Modul scalare Cu părere foarte asemănător cu modul gamma. Ca și în modul gamma, datele deschise împărțite în blocuri de 64 de biți T(i) (i=1, 2,..., m , unde m este determinat de cantitatea de date criptate), sunt criptate prin adăugare pe biți modulo 2 cu cifrul gamma G sh, care este produs în blocuri de 64 de biți:
Гw = (Г(1),Г(2),...,Г(i),...,Г(m)).
Numărul de biți din blocul T(m) poate fi mai mic de 64, în timp ce partea de cifră gamma din blocul G(m) care nu este utilizată pentru criptare este eliminată.
Ecuația de criptare a datelor în modul gamma cu feedback poate fi reprezentată după cum urmează:
Aici W(i) este un bloc de text cifrat pe 64 de biți,
A - funcție de criptare în modul de înlocuire simplă. Argumentul funcției de la primul pas al algoritmului iterativ este un mesaj de sincronizare pe 64 de biți, iar la toți pașii următori - blocul anterior de date criptate W(i-1).
Inserții de imitație
Proces de dezvoltare stive de imitație este uniform pentru oricare dintre modurile de criptare a datelor.
Inserția de imitație este un bloc de p biți (inserția de imitație Ip), care este produs fie înainte de criptarea întregului mesaj, fie în paralel cu criptarea bloc cu bloc. Primele blocuri de date deschise care sunt implicate în dezvoltarea simulării de inserare pot conține informații de serviciu (de exemplu, partea de adresă, ora, mesajul de sincronizare) și să nu fie criptate. Valoarea parametrului p (numărul de cifre binare din insertul simulat) este determinată de cerințele criptografice, ținând cont de faptul că probabilitatea de a impune interferențe false este de 1/2^p.
Pentru a obține o imitație de inserare, datele deschise sunt reprezentate ca blocuri de 64 de biți T(i) (i = 1, 2,..., m , unde m este determinat de cantitatea de date criptate). Primul bloc de date deschise T(1) este supus unei transformări corespunzătoare primelor 16 cicluri ale algoritmului de criptare în modul de înlocuire simplă. Mai mult, cheia folosită pentru criptarea datelor este folosită ca cheie pentru generarea inserției de imitație.
Numărul de 64 de biți obținut după 16 cicluri de lucru este însumat modulo 2 cu al doilea bloc de date deschis T(2). Rezultatul însumării este supus din nou transformării corespunzătoare primelor 16 cicluri ale algoritmului de criptare în modul de înlocuire simplă. Numărul rezultat pe 64 de biți este adăugat modulo 2 celui de-al treilea bloc de date deschis T(3) și așa mai departe. Ultimul bloc T(m), dacă este necesar, completat la un bloc complet de 64 de biți cu zerouri, este însumat modulo 2 cu rezultatul muncii la pasul m-1, după care este criptat în modul de înlocuire simplă peste primul 16 cicluri ale algoritmului. Din numărul primit pe 64 de biți, este selectat un segment Ip cu lungimea p biți.
Inserția de imitație Ip este transmisă printr-un canal de comunicație sau în memoria computerului după datele criptate. Datele criptate primite sunt decriptate, iar din blocurile primite de date deschise T(i) se generează o imitație de inserție Ip, care este apoi comparată cu imitația de inserție IR primită de la canalul de comunicație sau din memoria computerului. nu se potrivesc, toate datele decriptate sunt considerate false.
Scurtă descriere a cifrului
GOST 28147-89 - Standardul sovietic și rus pentru criptarea simetrică, introdus în 1990, este, de asemenea, un standard CIS. Nume complet - „GOST 28147-89 Sisteme de procesare a informațiilor. Protecție criptografică. Algoritmul de transformare criptografică”. Algoritm de cifrare bloc. Când se utilizează metoda de criptare cu gamma, poate îndeplini funcțiile unui algoritm de criptare de flux.
GOST 28147-89 este un cifr de bloc cu o cheie de 256 de biți și 32 de cicluri de conversie, care funcționează cu blocuri de 64 de biți. Baza algoritmului de cifrare este Rețeaua Feistel. Modul de criptare de bază în conformitate cu GOST 28147-89 este modul de înlocuire simplu (de asemenea, sunt definite moduri mai complexe - gamma, gamma cu feedback și inserare imitată).
Cum funcționează algoritmul
Algoritmul nu este fundamental diferit de DES. Conține și cicluri de criptare (sunt 32) conform schemei Feistel (Fig. 2.9.).
Orez. 2.9. Runde de criptare ale algoritmului GOST 28147-89.
Pentru a genera subchei, cheia originală de 256 de biți este împărțită în opt blocuri de 32 de biți: k 1 …k 8 . Cheile k 9 ... k 24 sunt o repetare ciclică a tastelor k 1 ... k 8 (numerotate de la cei mai puțin semnificativi biți la cei mai semnificativi). Cheile k 25 ...k 32 sunt cheile k 1 ...k 8 mergând în ordine inversă.
După ce toate cele 32 de runde ale algoritmului sunt finalizate, blocurile A 33 și B 33 sunt lipite împreună (rețineți că A 33 devine bitul cel mai semnificativ, iar B 33 devine bitul cel mai puțin semnificativ) - rezultatul este rezultatul algoritmului.
Funcţie f(A i ,K i) se calculează după cum urmează: A i și Ki sunt adăugate modulo 2 32 , apoi rezultatul este împărțit în opt subsecvențe de 4 biți, fiecare dintre acestea fiind alimentată la intrarea proprie. nodul tabel de substituție(în ordinea crescătoare a priorității biților), numită mai jos S-bloc. Numărul total de blocuri GOST S este de opt, adică același cu numărul de subsecvențe. Fiecare S-bloc reprezintă o permutare a numerelor de la 0 la 15. Prima subsecvență de 4 biți cade pe intrarea primei S-box, a doua - pe intrarea celei de-a doua, etc. Ieșirile tuturor celor opt S-box sunt combinate în un cuvânt de 32 de biți, apoi întregul cuvânt este deplasat ciclic la stânga (la cei mai semnificativi biți) cu 11 biți. Toate cele opt cutii S pot fi diferite. De fapt, ele pot fi un material cheie suplimentar, dar cel mai adesea sunt un parametru de schemă care este comun unui anumit grup de utilizatori. Textul standardului indică faptul că livrarea de umplere a unităților de înlocuire (blocuri S) se efectuează în modul prescris, de exemplu. dezvoltator de algoritmi. Comunitatea dezvoltatorilor rusi CIPF a fost de acord asupra nodurilor de înlocuire utilizate pe Internet.
Decriptarea se realizează în același mod ca și criptarea, dar ordinea subcheilor k i este inversată.
Moduri de funcționare ale algoritmului GOST 28147-89
Algoritmul GOST 28147-89 are patru moduri de funcționare.
1. Modulînlocuire simplă acceptă date ca intrare, a căror dimensiune este un multiplu de 64 de biți. Rezultatul criptării este textul de intrare, convertit în blocuri de 64 de biți în cazul criptării cu ciclul „32-3”, iar în cazul decriptării - cu ciclul „32-P”.
2. Modulscalare acceptă date de orice dimensiune ca intrare, precum și un parametru suplimentar de 64 de biți - mesaj de sincronizare. În timpul funcționării, mesajul de sincronizare este convertit în ciclul „32-Z”, rezultatul este împărțit în două părți. Prima parte se adaugă modulo 2 32 cu o valoare constantă de 1010101 16 . Dacă a doua parte este egală cu 2 32 -1, atunci valoarea sa nu se modifică, altfel se adaugă modulo 2 32 -1 cu o valoare constantă de 1010104 16 . Valoarea obținută prin combinarea ambelor părți convertite, numită gamma cifră, intră în bucla „32-3”, rezultatul acesteia este adăugat pe bit modulo 2 cu un bloc de date de intrare de 64 de biți. Dacă acesta din urmă este mai mic de 64 de biți, atunci biții suplimentari ai valorii primite sunt eliminați. Valoarea rezultată este trimisă la ieșire. Dacă încă sunt date primite, atunci acțiunea se repetă: blocul compus din părți de 32 de biți este convertit în părți și așa mai departe.
3. Modulscalare cu feedback acceptă, de asemenea, date de orice dimensiune și un mesaj de sincronizare ca intrare. Blocul de date de intrare este adăugat pe biți modulo 2 cu rezultatul transformării în ciclul „32-3” a mesajului de sincronizare. Valoarea rezultată este trimisă la ieșire. Valoarea mesajului de sincronizare este înlocuită în cazul criptării cu blocul de ieșire, iar în cazul decriptării - cu intrarea, adică criptată. Dacă ultimul bloc de date primite este mai mic de 64 de biți, atunci biții suplimentari ai gamma (ieșirea buclei „32-3”) sunt eliminați. Dacă încă există date primite, atunci acțiunea se repetă: cifrul gamma este format din rezultatul criptării valorii înlocuite și așa mai departe.
4. Modul de producțieinserții de imitație preia date de intrare care au o dimensiune de cel puțin două blocuri complete de 64 de biți și returnează un bloc de date de 64 de biți, numit uzurpare a inserției. Valoarea temporară de 64 de biți este setată la 0, apoi, în timp ce există date de intrare, este adăugată pe biți modulo 2 cu rezultatul executării ciclului "16-3", a cărui intrare este blocul de date de intrare . După încheierea introducerii, valoarea temporară este returnată ca rezultat.
Criptanaliză a cifrului
Cifrul GOST 28147-89 utilizează o cheie de 256 de biți, iar dimensiunea spațiului de cheie este 2256 . Niciun computer de uz general care există în prezent nu poate ghici o cheie în mai puțin de multe sute de ani. Standardul rus GOST 28147-89 a fost proiectat cu o marjă mare și depășește standardul DES american cu multe ordine de mărime, cu dimensiunea sa reală a cheii de 56 de biți și volumul spațiului cheie de numai 2 56 .
Există, de asemenea, atacuri asupra rundei complete GOST 28147-89 fără modificări. Unul dintre primii lucrări deschise, în care a fost efectuată analiza algoritmului, folosește punctele slabe ale procedurii de extindere a cheilor a unui număr de algoritmi de criptare bine-cunoscuți. În special, algoritmul complet GOST 28147-89 poate fi rupt folosind criptoanaliza diferențială pe chei legate, dar numai dacă sunt utilizate tabele de substituție slabe. Versiunea de 24 de runde a algoritmului (căreia îi lipsesc primele 8 runde) este deschisă în același mod pentru orice mese de înlocuire, cu toate acestea, tabelele de înlocuire puternice fac un astfel de atac complet nepractic.
Oamenii de știință autohtoni A.G. Rostovtsev și E.B. Makhovenko a propus în 2001 o metodă fundamental nouă de criptoanaliza prin formarea unei funcții obiective dintr-un text simplu cunoscut, textul cifrat corespunzând acestuia și valoarea dorită a cheii și găsirea extremului său corespunzător valorii adevărate a cheii. Ei au găsit, de asemenea, o clasă mare de chei slabe ale algoritmului GOST 28147-89, care vă permit să deschideți algoritmul folosind doar 4 texte clare selectate și textele cifrate corespunzătoare cu o complexitate destul de scăzută.
În 2004, un grup de experți din Coreea a propus un atac prin care, folosind criptoanaliza diferențială a cheilor asociate, este posibil să se obțină o cheie secretă de 12 biți cu o probabilitate de 91,7%. Atacul necesită 235 de texte clare alese și 236 de operațiuni de criptare. După cum puteți vedea, acest atac este practic inutil pentru deschiderea reală a algoritmului.
Tabelul de substituție este un element cheie pe termen lung, adică este valabil pentru mult mai mult termen lung decât o singură cheie. Se presupune că este comun tuturor nodurilor de criptare din cadrul unui sistem de protecție criptografică. Calitatea acestui tabel determină calitatea cifrului. Cu un tabel de substituție „puternic”, puterea cifrului nu scade sub o anumită limită acceptabilă, chiar dacă este dezvăluită. În schimb, utilizarea unui tabel „slab” poate reduce puterea cifrului la o limită inacceptabil de scăzută. Nu există informații despre calitatea tabelului de substituții în sigiliu deschis Rusia nu a fost publicată, dar existența tabelelor „slabe” este fără îndoială – un exemplu este tabelul de substituție „trivial”, conform căruia fiecare valoare este înlocuită de la sine. Într-o serie de lucrări, se ajunge la concluzia eronată că tabelele secrete de substituție ale algoritmului GOST 28147-89 pot face parte din cheie și pot crește lungimea efectivă a acesteia (ceea ce nu este semnificativ, deoarece algoritmul are o cheie foarte mare de 256 de biți). ).
Acest algoritm este obligatoriu pentru utilizare ca algoritm de criptare în organizatii guvernamentale RF și o serie de altele comerciale.
Descrierea algoritmului
Schema algoritmului este prezentată în fig. 3.1. După cum puteți vedea, schema acestui algoritm este destul de simplă, ceea ce simplifică fără ambiguitate implementarea software sau hardware.
Algoritmul GOST 28147-89 criptează informațiile în blocuri de 64 de biți, care sunt împărțite în două subblocuri de 32 de biți (N1 și N2). Subblocul N1 este procesat într-un anumit mod, după care se adaugă valoarea acestuia
cu valoarea subblocului N2 (adăugarea se realizează modulo 2), apoi subblocurile sunt schimbate. O astfel de transformare se realizează pentru un anumit număr de runde: 16 sau 32, în funcție de modul de funcționare al algoritmului (descris mai jos). În fiecare rundă se efectuează următoarele operații:
1. Suprapunerea tastelor. Conținutul subblocului /VI este adăugat modulo 2 32 la partea Kx a cheii.
Cheia de criptare a algoritmului GOST 28147-89 are o dimensiune de 256 de biți, iar Kx este partea sa de 32 de biți, adică o cheie de criptare de 256 de biți este reprezentată ca o concatenare a subcheilor de 32 de biți (Fig. 3.2):
SH ATI, AG2, Yu, AG4, K5, Kb, K7.
În timpul procesului de criptare, se utilizează una dintre aceste subchei, în funcție de numărul rotund și de modul de funcționare al algoritmului.
Orez. 3.1. Schema algoritmului GOST 28147-
Orez. 3.2. Cheia de criptare a algoritmului GOST 28147-89
2. Înlocuire tabulară. După suprapunerea cheii, subblocul /VI este împărțit în 8 părți de 4 biți, valoarea fiecăruia fiind înlocuită individual în conformitate cu tabelul de înlocuire pentru această parte a subblocului. Înlocuirile de masă (cutie de înlocuire, cutie S) sunt adesea folosite în algoritmi moderni criptare, așa că merită să le luați în considerare mai detaliat.
Înlocuirea tabelului este utilizată în acest fel: un bloc de date de o anumită dimensiune (în acest caz, 4 biți) este alimentat la intrare, a cărui reprezentare numerică determină numărul valorii de ieșire. De exemplu, avem o S-box de următoarea formă:
4, 11, 2, 14, 15, 0, 8, 13, 3, 12, 9, 7, 5, 10, 6, 1.
Lăsați blocul de 4 biți „0100” să vină la intrare, adică valoarea este 4. Conform tabelului, valoarea de ieșire va fi 15, adică. „1111” (0 este înlocuit cu 4, 1 este înlocuit cu 11, valoarea lui 2 nu este schimbată etc.).
După cum puteți vedea, schema algoritmului este foarte simplă, ceea ce înseamnă că cea mai mare povară a criptării datelor cade pe tabelele de înlocuire. Din păcate, algoritmul are proprietatea că există tabele de substituție „slabe”, folosindu-se de care algoritmul poate fi dezvăluit prin metode criptoanalitice. Cele slabe includ, de exemplu, un tabel în care rezultatul este egal cu intrarea:
0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15.
3. Deplasare ciclică la stânga pe biți cu 11 biți.
Moduri de algoritm
Algoritmul GOST 28147-89 are 4 moduri de funcționare:
□ mod simplu de înlocuire;
□ modul gamma;
P mod de joc cu feedback;
□ mod de producție a atașamentelor de imitație.
Aceste moduri sunt oarecum diferite de cele general acceptate (descrise în Secțiunea 1.4), așa că merită să le analizăm mai detaliat.
Aceste moduri au scopuri diferite, dar folosesc aceeași transformare de criptare descrisă mai sus.
Mod de schimb ușor
În modul de înlocuire simplă, cele 32 de runde descrise mai sus sunt efectuate pur și simplu pentru a cripta fiecare bloc de informații pe 64 de biți. Subcheile pe 32 de biți sunt utilizate în următoarea secvență:
□ KO, Kl, K2, K3, K4, K5, Kb, AG7, KO, ATI etc. - în rundele 1 la 24;
□ K1, Kb, K5, K4, K3, K2, K\, KO - în rundele 25 până la 32.
Decriptarea în modul de înlocuire simplă se face exact în același mod, dar cu o secvență ușor diferită de utilizare a subcheilor:
□ KO, K\, K2, KZ, K4, K5, Kb, KP - în rundele 1 la 8;
□ KP, Kb, K5, K4, K3, K2, K\, KO, K1, Kb etc. - în rundele 9 până la 32.
Similar cu modul standard ECB, datorită criptării separate a blocurilor, modul de înlocuire simplă nu este recomandat pentru criptarea datelor reale; ar trebui folosit doar pentru a cripta alte chei de criptare în scheme cu mai multe chei.
Modul Gamma
În modul gamma (Fig. 3.3), fiecare bloc al textului simplu este adăugat bit cu bit modulo 2 la blocul gamma al cifrului cu o dimensiune de 64 de biți. Cifrul gamma este o secvență specială care este generată folosind transformările descrise mai sus, după cum urmează:
1. În registrele N1 și N2 se scrie umplerea lor inițială - o valoare de 64 de biți, numită „mesaj de sincronizare” (un mesaj de sincronizare, de fapt, este un analog al vectorului de inițializare în modurile CBC, CFB și OFB ).
2. Conținutul registrelor /VI și N2 (în acest caz, mesajele de sincronizare) este criptat în modul de înlocuire simplă.
3. Conținutul lui N1 se adaugă modulo (2 32 - 1) cu constanta CI = 2 24 + 2 16 + 2 8 + 4 , rezultatul adunării se scrie în registrul /VI.
4. Conținutul lui N2 se adaugă modulo 2 cu constanta C2 = 2 24 + 2 16 + 2 8 +1, rezultatul adunării se scrie în registrul N2.
5. Conținutul registrelor /VI și N2 este scos ca un bloc gamma de 64 de biți (adică, în acest caz, /VI și N2 formează primul bloc gamma).
6. Dacă este necesar următorul bloc gamma (adică criptarea sau decriptarea trebuie să continue), reveniți la pasul 2.
Pentru decriptare, un gamma este generat în același mod, apoi operația XOR este din nou aplicată textului cifrat și biților gamma.
Pentru a genera aceeași cifră gamma, utilizatorul care decriptează criptograma trebuie să aibă aceeași cheie și aceeași valoare a mesajului de sincronizare care au fost folosite pentru a cripta informațiile. În caz contrar, nu veți putea obține textul original din cel criptat.
În majoritatea implementărilor algoritmului GOST 28147-89, mesajul de sincronizare nu este un element secret, dar mesajul de sincronizare poate fi la fel de secret ca și cheia de criptare. În acest caz, putem considera că lungimea efectivă a cheii algoritmului (256 de biți) este mărită cu încă 64 de biți ai mesajului de sincronizare, ceea ce poate fi considerat ca un element cheie suplimentar.
Modul de feedback gamma
În modul feedback gamma, pornind de la al 2-lea bloc, registrele /VI și L/2 sunt umplute nu cu blocul gamma anterior, ci cu rezultatul criptării blocului text simplu anterior (Fig. 3.4). Primul bloc din acest mod este generat exact în același mod ca și cel anterior.
Orez. 3.4. Generarea cifrului gamma în modul gamma cu feedback
Modul de generare a imitatorului
O falsificare este o sumă de control criptografică calculată folosind o cheie de criptare și concepută pentru a verifica integritatea mesajelor. Pentru a-l calcula, există un mod special al algoritmului GOST 28147-89.
Generarea prefixului de imitație se realizează după cum urmează:
1. Primul bloc de informații de 64 de biți, pentru care se calculează imitatorul, este scris în registrele N1 și N2 și criptat în modul de înlocuire simplă redusă, în care sunt efectuate primele 16 runde din 32.
2. Rezultatul obținut se însumează modulo 2 cu următorul bloc de informații, salvând rezultatul în N1 și N2.
3. M și N2 sunt din nou criptate în modul redus de înlocuire simplă și așa mai departe până la ultimul bloc de informații.
Un prefix este considerat conținutul rezultat pe 64 de biți al registrelor N1 și N2 sau o parte a acestuia. Cel mai adesea, se folosește un prefix de imitație de 32 de biți, adică jumătate din conținutul registrelor. Acest lucru este suficient, deoarece, ca orice sumă de control, prefixul de imitație este destinat în primul rând să protejeze împotriva distorsiunii accidentale a informațiilor. Pentru a proteja împotriva modificării deliberate a datelor, sunt utilizate alte metode criptografice - în primul rând electronice semnatura digitala(vezi secțiunea 1.1).
Prefixul de imitație este utilizat după cum urmează:
1. La criptarea oricărei informații, imitatorul de text simplu este calculat și trimis împreună cu textul cifrat.
2. După decodare, prefixul de imitație este din nou calculat și comparat cu cel trimis.
3. Dacă prefixele de imitație calculate și trimise nu se potrivesc, textul cifrat a fost distorsionat în timpul transmiterii sau au fost folosite chei incorecte în timpul decriptării.
Prefixul de imitație este util în special pentru a verifica decriptarea corectă a informațiilor cheie atunci când se utilizează scheme cu mai multe chei.
Prefixul de imitație este un analog al codului de autentificare a mesajului MAC calculat în modul CBC; diferența este că calculul prefixului nu folosește un mesaj de sincronizare, în timp ce calculul MAC folosește un vector de inițializare.
Puterea criptografică a algoritmului
În 1994, descrierea algoritmului GOST 28147-89 a fost tradusă în engleză și publicată; după aceasta au început să apară rezultatele analizelor sale efectuate de experți străini; cu toate acestea, nu au fost găsite atacuri care se apropie de practic pentru o perioadă semnificativă de timp.
□ lungime cheie mare - 256 biți; împreună cu mesajul de sincronizare secretă, lungimea efectivă a cheii crește la 320 de biți;
□ 32 de runde de transformări; deja după 8 runde, efectul complet de dispersie a datelor de intrare este atins: schimbarea unui bit din blocul de text simplu va afecta toți biții din blocul de text cifrat și invers, adică există o marjă de siguranță multiplă.
Luați în considerare rezultatele criptoanalizei algoritmului GOST 28147-89.
Analiza tabelelor de substituție
Deoarece tabelele de substituție nu sunt date în standard, o serie de lucrări (de exemplu, în) sugerează că o „organizație competentă” poate emite atât tabele de substituție „bune” cât și „rele”. Cu toate acestea, celebrul expert Bruce Schneier numește astfel de presupuneri „zvonuri”. Este clar că puterea criptografică a algoritmului depinde în mare măsură de proprietățile tabelelor de substituție utilizate, respectiv, există tabele de substituție slabe (vezi mai sus pentru un exemplu), a căror utilizare poate simplifica atacul algoritmului. Cu toate acestea, posibilitatea utilizării diferitelor tabele de substituție pare a fi o idee foarte demnă, susținută de următoarele două fapte din istoria standardului de criptare DES (a se vedea Secțiunea 3.15 pentru detalii):
□ atacurile care utilizează atât criptoanaliza liniară, cât și diferențială a algoritmului DES utilizează caracteristici specifice tabelelor de substituție; atunci când utilizați alte tabele, criptoanaliza va trebui să o ia de la capăt;
□ Au fost făcute încercări de consolidare a DES împotriva criptoanalizei liniare și diferențiale prin utilizarea tabelelor de substituție mai puternice; astfel de tabele, care sunt într-adevăr mai stabile, au fost propuse, de exemplu, în algoritmul s 5 DES; dar, din păcate, a fost imposibil să înlocuim DES cu s 5 DES, deoarece tabelele de înlocuire sunt definite rigid în standard, respectiv, implementările algoritmului probabil nu suportă capacitatea de a schimba tabelele cu altele.
Într-o serie de lucrări (de exemplu, , și ) se concluzionează în mod eronat că tabelele de substituție secrete ale algoritmului GOST 28147-89 pot face parte din cheie și pot crește lungimea efectivă a acesteia (ceea ce nu este semnificativ, deoarece algoritmul are o cheie foarte mare de 256 de biți). Cu toate acestea, lucrarea demonstrează că tabelele de substituție secretă pot fi calculate folosind următorul atac, care poate fi aplicat practic:
1. Setați cheia nulă și căutați „vectorul nul”, adică valoarea z = /(0), unde /() este funcția rotundă a algoritmului. Această etapă necesită aproximativ 2 operațiuni de criptare.
2. Folosind vectorul zero, se calculează valorile tabelelor de substituție, care nu necesită mai mult de 2 11 operații.
Modificări de algoritm și analiza acestora
În cadrul lucrării, a fost efectuată o criptoanaliza a modificărilor algoritmului GOST 28147-89:
□ algoritmul GOST-H, în care, în raport cu algoritmul inițial, se modifică ordinea de utilizare a subcheilor, și anume, în runde de la a 25-a la a 32-a subchei sunt folosite în ordine directă, adică în același mod ca în precedenta runde ale algoritmului;
□ Un algoritm GOST® cu 20 de runde care utilizează XOR în loc de modulo 2 32 pentru suprapunerea cheilor.
Pe baza rezultatelor analizei, s-a ajuns la concluzia că GOST-H și GOST© sunt mai slabe decât algoritmul GOST 28147-89 original, deoarece ambele au clase de chei slabe. Este de remarcat faptul că în ceea ce privește criptoanaliza GOST©, lucrarea repetă cuvânt cu cuvânt secțiunea despre criptoanaliza algoritmului GOST 28147-89, publicată în 2000 într-o lucrare binecunoscută (fără nicio referire la original). Aceasta pune sub semnul întrebării profesionalismul autorilor lucrării și celelalte rezultate ale acesteia.
În lucrare se propune o modificare foarte interesantă a algoritmului: tabelele S \ ... Ss trebuie neapărat să fie diferite; în fiecare rundă a algoritmului, acestea trebuie permutate conform unei anumite legi. Această permutare poate depinde de cheia de criptare sau poate fi secretă (adică să facă parte dintr-o cheie de criptare mai mare decât cheia originală de 256 de biți). Ambele opțiuni, potrivit autorilor lor, cresc semnificativ rezistența algoritmului împotriva criptoanalizei liniare și diferențiale.
Și încă o modificare legată de tabelele de substituție este dată în lucrare, în care este analizată una dintre metodele posibile de calculare a tabelelor de substituție pe baza cheii de criptare. Autorii lucrării au concluzionat că o astfel de dependență slăbește algoritmul, deoarece duce la prezența cheilor slabe și la unele potențiale vulnerabilități ale algoritmului.
Analiza algoritmului complet
Există, de asemenea, atacuri asupra rundei complete GOST 28147-89 fără modificări. Una dintre primele lucrări deschise în care s-a efectuat analiza algoritmului, o lucrare binecunoscută, este dedicată atacurilor care exploatează punctele slabe ale procedurii de extindere a cheilor a unui număr de algoritmi de criptare cunoscuți. În special, algoritmul complet GOST 28147-89 poate fi rupt folosind criptoanaliza diferențială pe chei legate, dar numai dacă sunt utilizate tabele de substituție slabe. Versiunea de 24 de runde a algoritmului (căreia îi lipsesc primele 8 runde) este deschisă în același mod pentru orice tabel de înlocuire, dar tabelele de înlocuire puternice (de exemplu, date în ) fac un astfel de atac absolut nepractic.
Oamenii de știință autohtoni A. G. Rostovtsev și E. B. Makhovenko au propus în 2001 o metodă fundamental nouă de criptoanaliza (conform autorilor, este semnificativ mai eficientă decât criptoanaliza liniară și diferențială) prin formarea unei funcții obiective dintr-un text simplu cunoscut corespunzător textului cifrat și valoarea dorită. a cheii și găsirea extremului acesteia corespunzător valorii adevărate a cheii. Ei au găsit, de asemenea, o clasă mare de chei slabe ale algoritmului GOST 28147-89, care vă permit să deschideți algoritmul folosind doar 4 texte clare selectate și textele cifrate corespunzătoare cu o complexitate destul de scăzută. Criptanaliza algoritmului este continuată în lucrare.
În 2004, un grup de experți din Coreea a propus un atac prin care, folosind criptoanaliza diferențială pe chei asociate, este posibil să se obțină cu o probabilitate de 91,7% 12 biți ai unei chei secrete. Atacul necesită 235 de texte clare alese și 236 de operațiuni de criptare. După cum puteți vedea, acest atac este practic inutil pentru deschiderea reală a algoritmului.
Algoritmul definit de GOST 28147-89 are o lungime a cheii de criptare de 256 de biți. Acesta criptează informațiile în blocuri de 64 de biți (astfel de algoritmi se numesc algoritmi bloc), care sunt apoi împărțiți în două sub-blocuri de 32 de biți (N1 și N2) (Figura 1). Subblocul N1 este procesat într-un anumit mod, după care valoarea sa este adăugată la valoarea subblocului N2 (adăugarea se efectuează modulo 2, adică se aplică operația XOR logică - „exclusiv sau”), iar apoi subblocurile sunt schimbate. Această transformare se efectuează de un anumit număr de ori ("runde"): 16 sau 32 în funcție de modul algoritmului. În fiecare rundă sunt efectuate două operații.
Figura 1. Schema algoritmului GOST 28147-89.
Primul este cheiatul. Conținutul subblocului N1 este adăugat modulo 2 la partea de 32 de biți a cheii Kx. Cheie completă criptarea este reprezentată ca o concatenare de subchei pe 32 de biți: K0, K1, K2, K3, K4, K5, K6, K7. Una dintre aceste subchei este utilizată în procesul de criptare, în funcție de numărul rotund și de modul de operare al algoritmului.
A doua operație este înlocuirea mesei. După introducere, subblocul N1 este împărțit în 8 părți a câte 4 biți, valoarea fiecăruia fiind înlocuită în conformitate cu tabelul de înlocuire pentru această parte a subblocului. Subblocul este apoi rotit la stânga cu 11 biți.
Înlocuirile de tabele (Substitution box - S-box) sunt adesea folosite în algoritmii moderni de criptare, așa că merită explicat cum este organizată o astfel de operațiune. Valorile de ieșire ale blocurilor sunt scrise în tabel. Un bloc de date de o anumită dimensiune (în cazul nostru, de 4 biți) are propria sa reprezentare numerică, care determină numărul valorii de ieșire. De exemplu, dacă S-box arată ca 4, 11, 2, 14, 15, 0, 8, 13, 3, 12, 9, 7, 5, 10, 6, 1 și un bloc de 4 biți „0100” a venit la intrare (valoarea 4), apoi, conform tabelului, valoarea de ieșire va fi 15, adică „1111” (0 a 4, 1 a 11, 2 a 2 ...).
Algoritmul definit de GOST 28147-89 prevede patru moduri de funcționare: înlocuire simplă, scalare, scalare cu feedback și generare de prefixe de imitație. Ei folosesc aceeași transformare de criptare descrisă mai sus, dar deoarece scopul modurilor este diferit, această transformare se realizează în fiecare dintre ele în mod diferit.
În modul de înlocuire simplă, cele 32 de runde descrise mai sus sunt efectuate pentru a cripta fiecare bloc de informații pe 64 de biți. În acest caz, subcheile pe 32 de biți sunt utilizate în următoarea secvență:
K0, K1, K2, K3, K4, K5, K6, K7, K0, K1 etc. - în rundele 1 până la 24;
K7, K6, K5, K4, K3, K2, K1, K0 - în rundele 25 până la 32.
Decriptarea în acest mod se realizează exact în același mod, dar cu o secvență ușor diferită de utilizare a subcheilor:
K0, K1, K2, K3, K4, K5, K6, K7 - în rundele 1 până la 8;
K7, K6, K5, K4, K3, K2, K1, K0, K7, K6 etc. - în rundele 9 până la 32.
Toate blocurile sunt criptate independent unul de celălalt, adică rezultatul criptării fiecărui bloc depinde numai de conținutul acestuia (blocul sursă corespunzător). Dacă există mai multe blocuri identice ale textului original (plat), blocurile de text cifrat corespunzătoare vor fi, de asemenea, aceleași, ceea ce oferă un Informatii utile pentru un criptoanalist care încearcă să spargă cifrul. Prin urmare, acest mod este utilizat în principal pentru a cripta cheile de criptare în sine (se implementează adesea scheme cu mai multe chei, în care, din mai multe motive, cheile sunt criptate una peste alta). Pentru a cripta informațiile în sine, sunt destinate alte două moduri de operare - gamma și gamma cu feedback.
În modul gamma, fiecare bloc de text simplu este adăugat pe biți modulo 2 la blocul gamma de cifră de 64 de biți. Cifrul gamma este o secvență specială, care se obține ca urmare a anumitor operații cu registrele N1 și N2.
- 1. În registrele N1 și N2 se scrie umplerea lor inițială - o valoare de 64 de biți numită mesaj de sincronizare.
- 2. Criptarea conținutului registrelor N1 și N2 (în acest caz, mesaje sincronizate) se realizează în modul de înlocuire simplă.
- 3. Conținutul registrului N1 se adaugă modulo (232 - 1) cu constanta C1 = 224 + 216 + 28 + 24, iar rezultatul adunării se scrie în registrul N1.
- 4. Conținutul registrului N2 se adaugă modulo 232 cu constanta C2 = 224 + 216 + 28 + 1, iar rezultatul adunării se scrie în registrul N2.
- 5. Conținutul registrelor N1 și N2 este scos ca un bloc gamma de 64 de biți (în acest caz, N1 și N2 formează primul bloc gamma).
Dacă este necesar următorul bloc gamma (adică criptarea sau decriptarea trebuie să continue), reveniți la pasul 2.
Pentru decriptare, gamma este generată într-un mod similar, iar apoi textul cifrat și biții gamma sunt din nou XORed. Întrucât această operație este reversibilă, în cazul unui gamma generat corect, se obține textul original (Tabelul 1).
Tabelul 1. Criptare și decriptare în modul gamma
Pentru a dezvolta intervalul de criptare necesar pentru decriptare, utilizatorul care decriptează criptograma trebuie să aibă aceeași cheie și aceeași valoare a mesajului de sincronizare care au fost utilizate când informația a fost criptată. În caz contrar, nu veți putea obține textul original din cel criptat.
În majoritatea implementărilor algoritmului GOST 28147-89, mesajul de sincronizare nu este secret, dar există sisteme în care mesajul de sincronizare este același element secret ca și cheia de criptare. Pentru astfel de sisteme, lungimea efectivă a cheii algoritmului (256 de biți) este mărită cu încă 64 de biți ai mesajului de sincronizare secretă, care poate fi considerat și ca element cheie.
În modul feedback gamma, pentru a umple registrele N1 și N2, începând cu al 2-lea bloc, nu se folosește blocul gamma anterior, ci rezultatul criptării blocului de text simplu anterior (Figura 2). Primul bloc din acest mod este generat exact în același mod ca și cel anterior.
![](https://i2.wp.com/studwood.ru/imag_/15/160970/image002.jpg)
Figura 2. Generarea cifrului gamma în modul feedback gamma.
Având în vedere modul de generare a prefixelor de imitație, este necesar să se definească conceptul de subiect al generației. O falsificare este o sumă de control criptografică calculată folosind o cheie de criptare și concepută pentru a verifica integritatea mesajelor. La generarea unui prefix, se efectuează următoarele operații: primul bloc de 64 de biți al matricei de informații, pentru care se calculează prefixul, este scris în registrele N1 și N2 și criptat în modul de înlocuire simplă redusă (primele 16 se efectuează runde din 32). Rezultatul obținut este însumat modulo 2 cu următorul bloc de informații, salvând rezultatul în N1 și N2.
Ciclul se repetă până la ultimul bloc de informații. Conținutul de 64 de biți al registrelor N1 și N2, sau o parte a acestuia, rezultată din aceste transformări, se numește prefix de imitație. Mărimea prefixului este aleasă în funcție de fiabilitatea necesară a mesajelor: cu o lungime a prefixului r biți, probabilitatea ca o modificare a mesajului să treacă neobservată este de 2-r. Cel mai adesea, un prefix de 32 de biți este utilizat, adică jumătate din conținutul registrelor. Acest lucru este suficient, deoarece, ca orice sumă de control, prefixul de imitație este destinat în primul rând să protejeze împotriva distorsiunii accidentale a informațiilor. Pentru a proteja împotriva modificării intenționate a datelor, altele metode criptografice- În primul rând, o semnătură digitală electronică.
La schimbul de informații, prefixul de imitație servește ca un fel de mijloc suplimentar de control. Este calculat pentru textul simplu atunci când unele informații sunt criptate și sunt trimise împreună cu textul cifrat. După decriptare, se calculează o nouă valoare a prefixului de imitație, care este comparată cu cea trimisă. Dacă valorile nu se potrivesc, înseamnă că textul cifrat a fost distorsionat în timpul transmiterii sau au fost folosite chei incorecte în timpul decriptării. Prefixul de imitație este util în special pentru verificarea decriptării corecte a informațiilor cheie atunci când se utilizează scheme cu mai multe chei.
Algoritmul GOST 28147-89 este considerat un algoritm foarte puternic - în prezent, nu au fost propuse metode mai eficiente pentru dezvăluirea sa decât metoda „forță brută” menționată mai sus. Securitatea sa ridicată este atinsă în primul rând datorită lungimii mari a cheii - 256 de biți. Când se utilizează un mesaj de sincronizare secretă, lungimea efectivă a cheii este mărită la 320 de biți, iar secretul tabelului de înlocuire adaugă biți suplimentari. În plus, puterea criptografică depinde de numărul de runde de transformări, care, conform GOST 28147-89, ar trebui să fie 32 (efectul complet al dispersării datelor de intrare este atins după 8 runde).
Avantajele GOST 28147-89 sunt prezența protecției împotriva impunerii de date false (dezvoltarea inserării imitației) și același ciclu de criptare în toți cei patru algoritmi GOST.