GOST 28147-89 | |
---|---|
Creator |
KGB , Direcția a 8-a (un grup de criptografi) - Zabotin Ivan Alexandrovich (șef), Lopatin Vyacheslav Alexandrovich, Lopatkin Alexei Vasilievich, Afanasiev Alexander Alexandrovich, Fediukin Mihail Vladimirovici |
Creată | 1978 |
publicat | 1989 |
Standarde | GOST 34.12-2018 , GOST R 34.12-2015 , GOST 28147-89, RFC 5830 , RFC 8891 |
Dimensiunea cheii | 256 de biți |
Dimensiunea blocului | pe 64 de biți |
Numărul de runde | 32\16 |
Tip de | Rețeaua Feistel |
GOST 28147-89 „ Sisteme de procesare a informațiilor. Protecție criptografică. Algoritm de conversie criptografică „- standard de stat învechit (a se vedea cronologia de utilizare ) al URSS (și mai târziu standardul interstatal al CSI ), care descrie algoritmul de criptare a blocurilor simetrice și modurile sale de funcționare .
Este un exemplu de criptosisteme asemănătoare DES , create conform schemei iterative clasice Feistel .
Istoria creării cifrului și criteriile dezvoltatorilor au fost prezentate pentru prima dată public în 2014 de șeful grupului de dezvoltatori ai algoritmului Zabotin Ivan Alexandrovich, la o prelegere dedicată aniversării a 25 de ani de la adoptarea standardului rus pentru criptare simetrică [1] [2] .
Lucrările la algoritm, care ulterior a stat la baza standardului, au început ca parte a temei Magma (protecția informațiilor prin metode criptografice în calculatoarele din seria Sistem unificat ) în numele Consiliului Științific și Tehnic al Direcției a VIII-a Principală a KGB al URSS (acum în structura FSB ), în martie 1978 , după un lung studiu preliminar al standardului DES publicat în 1976 . De fapt, lucrările la crearea unui algoritm (sau a unui grup de algoritmi) similar cu algoritmul DES au început deja în 1976 .
Inițial, lucrările au fost etichetate „ Top Secret ”. Apoi au fost retrogradați la ștampila „ Secret ”. În 1983, algoritmul a fost retrogradat la „ Restricționat ”. Cu ultima notă a fost pregătit algoritmul pentru publicare în 1989 . La 9 martie 1987, un grup de criptografi (solicitant - unitate militară 43753) a primit un certificat de drept de autor cu prioritate Nr. 333297 pentru o invenție pentru un dispozitiv de criptare folosind algoritmul Magma-2 [3] .
Aprobat prin Decretul Standardului de Stat al URSS nr. 1409 din 2 iunie 1989 , intrat în vigoare la 1 iulie 1990 [4] .
La 31 martie 1996, a fost reeditat și pus în vigoare ca standard interstatal al CSI [5] .
Prin Decretul Standardului de Stat al Republicii Belarus nr. 3 din 17 decembrie 1992, acesta a fost pus în vigoare ca standard de stat al Republicii Belarus . Reeditată în martie 2011 [6] .
Prin ordinul Standardelor de stat pentru consumatori din Ucraina nr. 495 din 22 ianuarie 2008, GOST 28147-89 a fost reeditat pe teritoriul Ucrainei și a intrat în vigoare la 1 februarie 2009 sub denumirea DSTU GOST 28147:2009 [ 7] . Conform comenzilor curente, DSTU GOST 28147:2009 va fi valabil până la 1 ianuarie 2022 [8] . Există o înlocuire treptată cu DSTU 7624:2014 ( cod „Kalina”).
Standardul a fost anulat pe teritoriul Rusiei și CSI începând cu 31 mai 2019 din cauza adoptării de noi standarde interstatale care îl înlocuiesc complet GOST 34.12-2018 (descrie cifrurile Magma și Grasshopper ) și GOST 34.13-2018 (descrie moduri de operare ale cifrurilor bloc ).
Conform notificării FSB privind procedura de utilizare a algoritmului de criptare bloc GOST 28147-89, instrumentele de protecție a informațiilor criptografice concepute pentru a proteja informațiile care nu conțin informații care constituie un secret de stat , inclusiv cele care implementează algoritmul GOST 28147-89 , nu ar trebui să fie dezvoltat după 1 iunie 2019 , cu excepția cazului în care algoritmul GOST 28147-89 din astfel de instrumente este conceput pentru a asigura compatibilitatea cu instrumentele existente care implementează acest algoritm [9] .
În 2015, împreună cu noul algoritm „ Grasshopper ”, a fost publicată o variantă a algoritmului GOST 28147-89 sub numele de „ Magma ” ca parte a standardului GOST R 34.12-2015 și mai târziu ca parte a GOST 34.12-2018. standard . În 2020, algoritmul Magma a fost publicat ca RFC 8891 .
Particularitati:
GOST 28147-89 este un cifru bloc cu o cheie de 256 de biți și 32 de runde (numite runde) de transformare, care operează pe blocuri de 64 de biți. Baza algoritmului de cifrare este rețeaua Feistel .
Există patru moduri de funcționare GOST 28147-89:
Pentru a cripta în acest mod, un bloc de text simplu de 64 de biți este mai întâi împărțit în două jumătăți: T o = ( A 0 , B 0 ) [10] . În ciclul i -lea, se utilizează subcheia X i :
( = binar " exclusiv sau "),Pentru a genera subchei, cheia originală de 256 de biți este împărțită în opt numere de 32 de biți: K 0 ... K 7 .
Subcheile X 0 ... X 23 sunt repetarea ciclică a lui K 0 ... K 7 . Dopurile X 24 ... X 31 sunt K 7 ... K 0 .
Rezultatul tuturor celor 32 de runde ale algoritmului este un bloc de text cifrat pe 64 de biți : Tw = ( A 32 , B 32 ) .
Decriptarea se realizează conform aceluiași algoritm ca și criptarea, cu schimbarea că ordinea subcheilor este inversată: X 0 ... X 7 sunt K 7 ... K 0 , iar X 8 ... X 31 sunt repetiții ciclice de K 7 ... K 0 .
În datele de intrare și de ieșire, numerele de 32 de biți sunt reprezentate în ordine de la bitul cel mai puțin semnificativ la cel mai semnificativ ( little endian ).
Funcția se calculează astfel:
A i și X i se adaugă modulo 2 32 .
Rezultatul este împărțit în opt subsecvențe de 4 biți, fiecare dintre acestea fiind transmisă la intrarea nodului său de tabel de substituție (în ordinea crescătoare a priorității biților), numită mai jos S-box . Numărul total de casete S din standard este de opt, care este același cu numărul de subsecvențe. Fiecare S-box este o permutare a numerelor de la 0 la 15 (forma specifică a S-box-urilor nu este definită în standard). Prima subsecvență de 4 biți este intrarea primei S-box, a doua este intrarea celei de-a doua și așa mai departe.
Dacă nodul S-box arată astfel:
1, 15, 13, 0, 5, 7, 10, 4, 9, 2, 3, 14, 6, 11, 8, 12
iar intrarea S-box-ului este 0, atunci ieșirea va fi 1; dacă intrarea este 4, atunci ieșirea va fi 5; dacă intrarea este 12, atunci ieșirea este 6 etc.
Ieșirile tuturor celor opt casete S sunt combinate într-un cuvânt de 32 de biți, apoi întregul cuvânt este rotit la stânga (în ordinea înaltă) cu 11 biți.
Modul de înlocuire simplă are următoarele dezavantaje:
Astfel, utilizarea GOST 28147-89 în modul de înlocuire simplu este de dorit numai pentru criptarea datelor cheie [11] .
Când GOST 28147-89 funcționează în modul gamma , se formează un gamma criptografic în modul descris mai sus, care este apoi adăugat bit cu bit modulo 2 cu textul simplu original pentru a obține un text cifrat . Criptarea în modul gamma este lipsită de dezavantajele inerente modului de înlocuire simplu [11] . Așadar, chiar și blocurile identice ale textului sursă dau un text cifrat diferit, iar pentru textele cu o lungime care nu este un multiplu de 64 de biți, biții gamma „extra” sunt aruncați. În plus, gama poate fi generată în avans, ceea ce corespunde funcționării cifrului într-un mod de streaming.
Gama este generată pe baza cheii și a așa-numitului mesaj de sincronizare, care stabilește starea inițială a generatorului. Algoritmul de generare este următorul:
Pentru a-l decripta, trebuie să elaborați același gamma și apoi să îl adăugați bit cu bit modulo 2 cu textul cifrat. Evident, pentru aceasta trebuie să utilizați același mesaj de sincronizare ca și pentru criptare. În acest caz, pe baza cerințelor unicității gamma, este imposibil să utilizați un mesaj de sincronizare pentru a cripta mai multe matrice de date. De regulă, mesajul de sincronizare este transmis într-un fel sau altul împreună cu textul cifrat.
O caracteristică a GOST 28147-89 în modul gamma este că atunci când un bit din textul cifrat se modifică, doar un bit din textul decriptat se schimbă. Pe de o parte, acest lucru poate avea un efect pozitiv asupra imunității la zgomot; pe de altă parte, un atacator poate face unele modificări textului fără măcar să-l descifreze [11] .
Algoritmul de criptare este similar cu modul gamma, dar gama se bazează pe blocul anterior de date criptate, astfel încât rezultatul criptării blocului curent depinde și de blocurile anterioare. Din acest motiv, acest mod de operare este denumit și scalare interblocare.
Algoritmul de criptare este următorul:
La modificarea unui bit din textul cifrat obținut folosind algoritmul de feedback gamma, doar un bit este modificat în blocul corespunzător de text decriptat și blocul următor de text simplu este de asemenea afectat. În acest caz, toate celelalte blocuri rămân neschimbate [11] .
Când utilizați acest mod, rețineți că mesajul de sincronizare nu poate fi reutilizat (de exemplu, atunci când criptați blocuri de informații separate logic - pachete de rețea, sectoare de hard disk etc.). Acest lucru se datorează faptului că primul bloc al textului cifrat este obținut doar prin adăugare modulo doi cu mesajul de sincronizare criptat; astfel, cunoașterea doar a primilor 8 octeți ai textului original și ai textului cifrat permite citirea primilor 8 octeți ai oricărui alt text cifrat după reutilizarea mesajului de sincronizare.
Acest mod nu este un mod de criptare în sensul convențional. Când lucrați în modul de simulare a inserției, este creat un bloc suplimentar care depinde de întregul text și de datele cheie. Acest bloc este folosit pentru a verifica dacă textul cifrat nu a fost manipulat accidental sau intenționat. Acest lucru este deosebit de important pentru criptarea în modul gamma, unde un atacator poate schimba biți specifici fără să cunoască măcar cheia; totuși, atunci când funcționează în alte moduri, distorsiunile probabile nu pot fi detectate dacă nu există informații redundante în datele transmise.
Imitația este generată pentru M ≥ 2 blocuri de text simplu de 64 de biți. Algoritmul este următorul:
Pentru verificare, partea care primește efectuează o procedură similară celei descrise. Dacă rezultatul nu se potrivește cu inserția de simulare trecută, toate blocurile M corespunzătoare sunt considerate false.
Generarea unei imitații de inserție poate fi realizată în paralel cu criptarea utilizând unul dintre modurile de operare descrise mai sus [11] .
Toate cele opt cutii S pot fi diferite. Unii cred că ar putea fi un material cheie suplimentar care mărește lungimea efectivă a cheii; există totuși atacuri practice care permit determinarea lor [12] . Cu toate acestea, nu este nevoie să măriți lungimea cheii, 256 de biți este destul de suficient în prezent [13] . De obicei, tabelele de înlocuire sunt o setare de schemă pe termen lung, care este comună unui anumit grup de utilizatori.
Textul standardului GOST 28147-89 indică faptul că livrarea unităților de înlocuire a umplerii (blocuri S) este efectuată în modul prescris, adică de către dezvoltatorul algoritmului.
OID: 1.2.643.2.2.31.1
Număr de bloc S | Sens | |||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | unu | 2 | 3 | patru | 5 | 6 | 7 | opt | 9 | A | B | C | D | E | F | |
unu | 9 | 6 | 3 | 2 | opt | B | unu | 7 | A | patru | E | F | C | 0 | D | 5 |
2 | 3 | 7 | E | 9 | opt | A | F | 0 | 5 | 2 | 6 | C | B | patru | D | unu |
3 | E | patru | 6 | 2 | B | 3 | D | opt | C | F | 5 | A | 0 | 7 | unu | 9 |
patru | E | 7 | A | C | D | unu | 3 | 9 | 0 | 2 | B | patru | F | opt | 5 | 6 |
5 | B | 5 | unu | 9 | opt | D | F | 0 | E | patru | 2 | 3 | C | 7 | A | 6 |
6 | 3 | A | D | C | unu | 2 | 0 | B | 7 | 5 | 9 | patru | opt | F | E | 6 |
7 | unu | D | 2 | 9 | 7 | A | 6 | 0 | opt | C | patru | 5 | F | 3 | B | E |
opt | B | A | F | 5 | 0 | C | E | opt | 6 | 2 | 3 | 9 | unu | 7 | D | patru |
Acest nod de substituție este utilizat de CryptoPRO CSP în mod implicit. De asemenea, acest nod de substituție este utilizat în software-ul Verba-O [14] .
ID: id-Gost28147-89-CryptoPro-B-ParamSetOID: 1.2.643.2.2.31.2
Număr de bloc S | Sens | |||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | unu | 2 | 3 | patru | 5 | 6 | 7 | opt | 9 | A | B | C | D | E | F | |
unu | opt | patru | B | unu | 3 | 5 | 0 | 9 | 2 | E | A | C | D | 6 | 7 | F |
2 | 0 | unu | 2 | A | patru | D | 5 | C | 9 | 7 | 3 | F | B | opt | 6 | E |
3 | E | C | 0 | A | 9 | 2 | D | B | 7 | 5 | opt | F | 3 | 6 | unu | patru |
patru | 7 | 5 | 0 | D | B | 6 | unu | 2 | 3 | A | C | F | patru | E | 9 | opt |
5 | 2 | 7 | C | F | 9 | 5 | A | B | unu | patru | 0 | D | 6 | opt | E | 3 |
6 | opt | 3 | 2 | 6 | patru | D | E | B | C | unu | 7 | F | A | 0 | 9 | 5 |
7 | 5 | 2 | A | B | 9 | unu | C | 3 | 7 | patru | D | 0 | 6 | F | opt | E |
opt | 0 | patru | B | E | opt | 3 | 7 | unu | A | 2 | 9 | 6 | F | D | 5 | C |
Acest nod de substituție este utilizat de CryptoPRO CSP.
Identificator: id-Gost28147-89-CryptoPro-C-ParamSetOID: 1.2.643.2.2.31.3
Număr de bloc S | Sens | |||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | unu | 2 | 3 | patru | 5 | 6 | 7 | opt | 9 | A | B | C | D | E | F | |
unu | unu | B | C | 2 | 9 | D | 0 | F | patru | 5 | opt | E | A | 7 | 6 | 3 |
2 | 0 | unu | 7 | D | B | patru | 5 | 2 | opt | E | F | C | 9 | A | 6 | 3 |
3 | opt | 2 | 5 | 0 | patru | 9 | F | A | 3 | 7 | C | D | 6 | E | unu | B |
patru | 3 | 6 | 0 | unu | 5 | D | A | opt | B | 2 | 9 | 7 | E | F | C | patru |
5 | opt | D | B | 0 | patru | 5 | unu | 2 | 9 | 3 | C | E | 6 | F | A | 7 |
6 | C | 9 | B | unu | opt | E | 2 | patru | 7 | 3 | 6 | 5 | A | 0 | F | D |
7 | A | 9 | 6 | opt | D | E | 2 | 0 | F | 3 | 5 | B | patru | unu | C | 7 |
opt | 7 | patru | 0 | 5 | A | 2 | F | E | C | 6 | unu | B | D | 9 | 3 | opt |
Acest nod de substituție este utilizat de CryptoPRO CSP.
ID: id-Gost28147-89-CryptoPro-D-ParamSetOID: 1.2.643.2.2.31.4
Număr de bloc S | Sens | |||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | unu | 2 | 3 | patru | 5 | 6 | 7 | opt | 9 | A | B | C | D | E | F | |
unu | F | C | 2 | A | 6 | patru | 5 | 0 | 7 | 9 | E | D | unu | B | opt | 3 |
2 | B | 6 | 3 | patru | C | F | E | 2 | 7 | D | opt | 0 | 5 | A | 9 | unu |
3 | unu | C | B | 0 | F | E | 6 | 5 | A | D | patru | opt | 9 | 3 | 7 | 2 |
patru | unu | 5 | E | C | A | 7 | 0 | D | 6 | 2 | B | patru | 9 | 3 | F | opt |
5 | 0 | C | opt | 9 | D | 2 | A | B | 7 | 3 | 6 | 5 | patru | E | F | unu |
6 | opt | 0 | F | 3 | 2 | 5 | E | B | unu | A | patru | 7 | C | 9 | D | 6 |
7 | 3 | 0 | 6 | F | unu | E | 9 | 2 | D | opt | C | patru | B | A | 5 | 7 |
opt | unu | A | 6 | opt | F | B | 0 | patru | C | 3 | 5 | 9 | 7 | D | 2 | E |
Acest nod de substituție este utilizat de CryptoPRO CSP.
Nod de înlocuire, definit de Comitetul Tehnic de Standardizare „Protecția informațiilor criptografice” (abreviat ca TC 26) al lui Rosstandart [15] .
Identificator: id-tc26-gost-28147-param-ZOID: 1.2.643.7.1.2.5.1.1
Număr de bloc S | Sens | |||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | unu | 2 | 3 | patru | 5 | 6 | 7 | opt | 9 | A | B | C | D | E | F | |
unu | C | patru | 6 | 2 | A | 5 | B | 9 | E | opt | D | 7 | 0 | 3 | F | unu |
2 | 6 | opt | 2 | 3 | 9 | A | 5 | C | unu | E | patru | 7 | B | D | 0 | F |
3 | B | 3 | 5 | opt | 2 | F | A | D | E | unu | 7 | patru | C | 9 | 6 | 0 |
patru | C | opt | 2 | unu | D | patru | F | 6 | 7 | 0 | A | 5 | 3 | E | 9 | B |
5 | 7 | F | 5 | A | opt | unu | 6 | D | 0 | 9 | 3 | E | B | patru | 2 | C |
6 | 5 | D | F | 6 | 9 | 2 | C | A | B | 7 | opt | unu | patru | 3 | E | 0 |
7 | opt | E | 2 | 5 | 6 | 9 | unu | C | F | patru | B | 0 | D | A | 3 | 7 |
opt | unu | 7 | E | D | 0 | 5 | opt | 3 | patru | F | A | 6 | 9 | C | B | 2 |
Acest nod este fixat așa cum se recomandă în orientările TK26 [16] și ca singurul din noua revizuire a standardelor GOST R 34.12-2015 [17] și GOST 34.12-2018 [18] , precum și RFC 7836 și RFC 8891 .
Nodul de înlocuire nr. 1 ( DKE nr. 1 - element cheie ucraineană dublu șir ) , definit în „Instrucțiunile privind procedura de furnizare și utilizare a cheilor pentru instrumentele de protecție a informațiilor criptografice ” [19] .
Număr de bloc S | Sens | |||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | unu | 2 | 3 | patru | 5 | 6 | 7 | opt | 9 | A | B | C | D | E | F | |
unu | A | 9 | D | 6 | E | B | patru | 5 | F | unu | 3 | C | 7 | 0 | opt | 2 |
2 | opt | 0 | C | patru | 9 | 6 | 7 | B | 2 | 3 | unu | F | 5 | E | A | D |
3 | F | 6 | 5 | opt | E | B | A | patru | C | 0 | 3 | 7 | 2 | 9 | unu | D |
patru | 3 | opt | D | 9 | 6 | B | F | 0 | 2 | 5 | C | A | patru | E | unu | 7 |
5 | F | opt | E | 9 | 7 | 2 | 0 | D | C | 6 | unu | 5 | B | patru | 3 | A |
6 | 2 | opt | 9 | 7 | 5 | F | 0 | B | C | unu | D | E | A | 3 | 6 | patru |
7 | 3 | opt | B | 5 | 6 | patru | E | A | 2 | C | unu | 7 | 9 | F | D | 0 |
opt | unu | 2 | 3 | E | 6 | D | B | opt | F | A | C | 5 | 7 | 9 | 0 | patru |
Conform ordinului Serviciului de Stat pentru Comunicații Speciale al Ucrainei nr. 1273/35556 din 21 decembrie 2020 „Specificații tehnice pentru RFC 5652 ”, acest nod de înlocuire este utilizat implicit și este conținut sub formă de pachete (64 de octeți) în parametrii certificatului de cheie publică , generat conform DSTU 4145-2002 [20 ] .
Se crede [21] că GOST este rezistent la metode atât de utilizate pe scară largă precum criptoanaliza liniară și diferențială. Ordinea inversă a tastelor utilizate în ultimele opt runde oferă protecție împotriva atacului de alunecare și a atacului de reflexie. Rostovtsev A. G., Makhovenko E. B., Filippov A. S., Chechulin A. A. în lucrarea lor [22] au descris tipul de criptoanaliza, care se reduce la construirea unei funcții obiective algebrice și la găsirea extremului acesteia. Au fost identificate clase de chei slabe, în special, s-a demonstrat că cheile rare (cu o predominanță semnificativă de 0 sau 1) sunt slabe. Potrivit autorilor, metoda lor este în orice caz mai bună decât enumerarea exhaustivă, dar fără estimări numerice.
În mai 2011, cunoscutul criptoanalist Nicolas Courtois a dovedit existența unui atac asupra acestui cifr, care are o complexitate de 2 8 (256) ori mai mică decât complexitatea enumerarii directe a cheilor, cu condiția să existe 2. 64 de perechi de text „text simplu/închis” [23] [24 ] . Acest atac nu poate fi efectuat în practică din cauza complexității prea mari de calcul. Mai mult decât atât, cunoașterea a 264 de perechi text simplu/text privat permite în mod evident să citești texte cifrate fără măcar a calcula cheia . Majoritatea celorlalte lucrări descriu, de asemenea, atacuri care sunt aplicabile numai în anumite ipoteze, cum ar fi un anumit tip de chei sau tabele de înlocuire, unele modificări ale algoritmului original sau necesită totuși cantități de memorie sau calcul de neatins. Întrebarea dacă există atacuri practice fără a exploata slăbiciunea cheilor individuale sau a tabelelor de înlocuire rămâne deschisă [12] .
Principalele probleme ale standardului sunt legate de caracterul incomplet al standardului în ceea ce privește generarea cheilor și a tabelelor de substituție. Se crede că standardul are chei „slabe” și tabele de substituție [22] [25] , dar standardul nu descrie criteriile pentru selectarea și eliminarea celor „slabe”.
În octombrie 2010, la o reuniune a Primului Comitet Tehnic Comun al Organizației Internaționale de Standardizare (ISO / IEC JTC 1 / SC 27), GOST a fost nominalizat pentru includerea în standardul internațional de cifră bloc ISO / IEC 18033-3. În acest sens, în ianuarie 2011, s-au format seturi fixe de noduri de înlocuire și au fost analizate proprietățile criptografice ale acestora. Cu toate acestea, GOST nu a fost acceptat ca standard, iar tabelele de substituție corespunzătoare nu au fost publicate [26] .
Astfel, standardul existent nu specifică un algoritm pentru generarea tabelelor de substituție (S-boxes). Pe de o parte, aceasta poate fi informații secrete suplimentare (pe lângă cheie), iar pe de altă parte, ridică o serie de probleme:
Criptosisteme simetrice | |
---|---|
Cifruri în flux | |
Rețeaua Feistel | |
Rețeaua SP | |
Alte |