Standard de criptare a datelor interne. Standard intern pentru criptarea datelor Creșterea vitezei algoritmului

Algoritmul GOST 28147-89 și codul „Magma” (GOST R 34.12-2015)

Schema generală a algoritmului. Algoritmul descris de GOST 28147-89 „Sisteme de procesare a informațiilor. Protecție criptografică. Cryptographic Transformation Algorithm” este un standard intern de criptare simetrică (până la 1 ianuarie 2016) și este necesar pentru implementarea în instrumentele certificate de protecție a informațiilor criptografice utilizate în sistemele informaționale guvernamentale și, în unele cazuri, în sistemele comerciale. Certificarea mijloacelor de securitate a informațiilor criptografice este necesară pentru a proteja informațiile care constituie secret de stat al Federației Ruse și informațiile a căror confidențialitate trebuie asigurată în conformitate cu legislația în vigoare. De asemenea, în Federația Rusă Utilizarea algoritmului GOST 28147-89 este recomandată pentru protejarea sistemelor de informații bancare.

Algoritmul GOST 28147-89 (Fig. 2.21) se bazează pe schema Feistel și criptează informațiile în blocuri de 64 de biți, care sunt împărțite în două subblocuri de 32 de biți (I și R). Subbloc R, este procesat de funcția de transformare rotundă, după care valoarea sa este adăugată la valoarea subblocului Lj, apoi subblocurile sunt schimbate. Algoritmul are 16 sau 32 de runde în funcție de modul de criptare (calcul de simulare sau alte moduri de criptare).

Orez. 2.21.

În fiecare rundă a algoritmului, sunt efectuate următoarele transformări.

1. Aplicație cheie. Subblocarea conținutului R i pliază modulo 2 32 cu cheia rotundă K. Kj este partea de 32 de biți a cheii originale, folosită ca cheie rotundă. Algoritmul GOST 28147-89 ns utilizează o procedură de extindere a cheii, cheia originală de criptare de 256 de biți este reprezentată ca o concatenare (înlănțuire) a opt subchei de 32 de biți (Fig. 2.22): K 0, K (, Kt K, K A, K 5, K 6, K 7.

Procesul de criptare folosește una dintre aceste subchei LA

De la runda 1 până la a 24-a - în secvență directă:

Din runda a 25-a până în a 32-a - în ordine inversă:

Orez. 2.22. Structura cheii de criptare a algoritmului GOST 28147-89

2. Înlocuirea mesei. După aplicarea cheii, subblocul R i este împărțit în opt părți, dar în 4 biți, valoarea fiecăruia fiind înlocuită individual în conformitate cu tabelul său de înlocuire (S-box). Sunt utilizate în total opt blocuri S - S 0, S, S 2, S 3, S 4, S 5, S 6, S 7. Fiecare S-box a algoritmului GOST 28147-89 este un vector (matrice unidimensională) cu ^ elemente numerotate de la 0 la 15. Valorile S-box-ului sunt numere de 4 biți, adică. numere întregi de la 0 la 15.

Din tabelul S-box este luat un element al cărui număr de serie coincide cu valoarea care a venit la intrarea de substituție.

Exemplul 2.6.

Să existe un bloc S de următoarea formă:

Fie ca valoarea 0100 2 = 4 să fie aplicată la intrarea acestui bloc S Ieșirea blocului S va fi al 4-lea element al tabelului de substituție, adică. 15 = 1111 2 (numerotarea elementelor începe de la zero).

Persoanele de substituție nu sunt definite de standard, așa cum se face, de exemplu, în cifrul DES. Valorile interschimbabile ale tabelelor de înlocuire complică semnificativ criptoanaliza algoritmului. În același timp, robustețea algoritmului depinde în mod semnificativ de alegerea corectă a acestora.

Din păcate, algoritmul GOST 28147-89 are tabele de înlocuire „slabe”, cu ajutorul cărora algoritmul poate fi spart destul de ușor folosind metode criptoanalitice. Printre cele „slabe” se numără, de exemplu, un tabel de substituție trivial în care intrarea este egală cu rezultatul (Tabelul 2.16).

Tabelul 2.16

Exemplu de cutie S slabă

Se crede că valori specifice Tabelele de înlocuire trebuie păstrate secrete și reprezintă un element cheie pe termen lung, adică. sunt valabile pentru o perioadă mult mai lungă decât cheile individuale. Cu toate acestea, valorile secrete ale tabelelor de înlocuire nu fac parte din cheie și nu pot crește lungimea efectivă a acesteia.

Într-adevăr, tabelele de înlocuire secrete pot fi calculate folosind următorul atac, care poate fi folosit în practică:

  • tasta zero este setată și se efectuează o căutare a „vectorului zero”, adică. valorile z = F( 0), unde F- funcția de transformare rotundă a algoritmului. Acest lucru necesită aproximativ 2 32 de operațiuni de testare a criptării;
  • folosind vectorul zero, se calculează valorile tabelelor de înlocuire, care nu necesită mai mult de 2 11 operații.

Cu toate acestea, chiar dacă confidențialitatea tabelelor de înlocuire este încălcată, puterea cifrului rămâne extrem de mare și nu scade sub limita permisă.

De asemenea, se presupune că tabelele de înlocuire sunt comune tuturor nodurilor de criptare din cadrul aceluiași sistem de securitate criptografică.

Îmbunătățirea structurii cutiilor S este una dintre problemele cele mai intens cercetate în domeniul cifrurilor bloc simetrice. În esență, necesită ca orice modificări aduse intrărilor S-box să aibă ca rezultat Aleatoriu după tipul de modificare a datelor de ieșire. Pe de o parte, cu cât cutiile S sunt mai mari, cu atât algoritmul este mai rezistent la metodele de criptoanaliza liniară și diferențială. Pe de altă parte, o masă mare de înlocuire este mai dificil de proiectat.

ÎN algoritmi moderni Cutiile S sunt de obicei un vector (matrice unidimensională) care conține 2" t- elemente de biți. Intrarea blocului determină numărul elementului, a cărui valoare servește ca ieșire a blocului S.

Au fost propuse o serie de criterii pentru proiectarea cutiilor S. Tabelul de înlocuire trebuie să satisfacă:

  • criterii stricte de avalanșă;
  • criteriul de independență a biților;
  • cerința de neliniaritate din valorile de intrare.

Pentru a îndeplini ultima cerință, s-a propus să se specifice o combinație liniară i biți ( i = 1, ..., T) valorile tabelului de substituție funcții îndoite(Engleză, îndoit - deviind, în acest caz, de la funcțiile liniare). Se formează funcții îndoite clasa speciala Funcții booleene caracterizate prin cea mai înaltă clasă de neliniaritate și respectarea criteriului strict de avalanșă.

Unele lucrări pentru S-box-uri propun verificarea implementării unui efect de avalanșă garantat de ordinul y - atunci când un bit de intrare se modifică, cel puțin biții de ieșire ai S-box-ului se schimbă. Proprietatea unui efect de avalanșă garantat de ordinul y de la 2 la 5 oferă caracteristici de difuzie destul de bune ale S-box-urilor pentru orice algoritm de criptare.

Atunci când proiectați mese de înlocuire suficient de mari, pot fi utilizate următoarele abordări:

  • selecție aleatorie (pentru S-box nu marime mare poate duce la tabele de înlocuire slabe);
  • selecție aleatorie urmată de testarea conformității cu diverse criterii și respingerea S-box-urilor slabe;
  • selectare manuală (pentru S-box dimensiuni mari prea intensivă în muncă);
  • abordare matematică, de exemplu generarea folosind funcții îndoite (această abordare este utilizată în algoritmul CAST).

Putem propune următoarea procedură pentru proiectarea blocurilor S individuale ale algoritmului GOST 28147-89:

  • fiecare S-box poate fi descrisă de patru funcții logice, fiecare dintre funcții trebuie să aibă patru argumente logice;
  • este necesar ca aceste funcţii să fie suficient de complexe. Această cerință de complexitate nu poate fi exprimată formal, dar ca o condiție necesară se poate cere ca funcțiile logice corespunzătoare, scrise într-o formă minimă (adică, cu lungimea minimă posibilă a expresiei) folosind operații logice de bază, să nu fie mai scurte decât o anumită valoare cerută. ;
  • funcțiile individuale, chiar și cele utilizate în diferite tabele de înlocuire, trebuie să difere într-o măsură suficientă între ele.

În 2011, a fost propus un nou atac „întâlnire reflexivă la mijloc”, care reduce ușor rezistența GOST 28147-89 (de la 2256 la 2225). Cel mai bun rezultat al criptoanalizei al algoritmului din 2012 permite ca puterea acestuia să fie redusă la 2.192, necesitând o dimensiune relativ mare a textului cifrat și un volum de date preformate. În ciuda atacurilor propuse, la nivelul actual de dezvoltare a tehnologiei informatice, GOST 28147-89 rămâne practic.

Cod „Magma” (GOST R 34.12-2015). Standardul GOST 28147-89 este în vigoare în Rusia de mai bine de 25 de ani. În acest timp, a demonstrat o durabilitate suficientă și o eficiență bună a implementărilor software și hardware, inclusiv pe dispozitive cu resurse reduse. Deși au fost propuse atacuri criptoanalitice care îi reduc cotele de rezistență (cel mai bun este la 2.192), acestea sunt departe de a fi practice. Prin urmare, s-a decis includerea algoritmului GOST 28147-89 în standardul de criptare simetric nou dezvoltat.

În 2015, magazinul a adoptat două noi standarde criptografice naționale: GOST R 34.12-2015 „Tehnologia informației. Protecția informațiilor criptografice. Block ciphers” și GOST R 34.13-2015 „Tehnologia informației. Protecția informațiilor criptografice. Moduri de operare ale cifrurilor bloc”, care intră în vigoare la 1 ianuarie 2016.

Standardul GOST R 34.12-2015 conține o descriere a două cifruri bloc cu o lungime a blocului de 128 și 64 de biți. Cifrul GOST 28147-89 cu blocuri de substituție neliniare fixe este inclus în noul GOST R 34.12-2015 ca un cifr pe 64 de biți numit „Magma”.

Mai jos sunt blocurile de înlocuire specificate în standard:

Setul de cutii S din standard prevede cele mai bune caracteristici, care determină rezistența algoritmului criptografic la criptoanaliza diferențială și liniară.

Potrivit comitetului tehnic pentru standardizare „Protecția informațiilor criptografice” (TK 26), fixarea blocurilor de substituție neliniară va face algoritmul GOST 28147-89 mai unificat și va ajuta la eliminarea utilizării blocurilor de substituție neliniare „slabe”. În plus, fixarea tuturor parametrilor de criptare pe termen lung în standard este în concordanță cu practica internațională acceptată. Noul standard GOST R 34.12-2015 este legat din punct de vedere terminologic și conceptual de standardele internaționale ISO/IEC 10116 " Tehnologia de informație. Metode de securitate. Moduri de operare pentru „cifruri bloc de biți” (ISO/IEC 10116:2006 Tehnologia informației - Tehnici de securitate - Moduri de operare pentru un cifr bloc de n biți) și seria ISO/IEC 18033 „Tehnologii informaționale. Metode și mijloace de asigurare a securității. Algoritmi de criptare”: ISO/IEC 18033-1:2005 „Partea 1. Dispoziții generale„(ISO/IEC 18033-1:2005 Tehnologia informației – Tehnici de securitate – Algoritmi de criptare – Partea 1: General) și ISO/IEC 18033-3:2010 „Partea 3. Cifre bloc” (ISO/IEC 18033-3:2010 ( Tehnologia informației - Tehnici de securitate - Algoritmi de criptare - Partea 3: Cifre bloc)).

Standardul GOST P 34.12-2015 include, de asemenea, un nou cifru bloc („Grasshopper”) cu o dimensiune a blocului de 128 de biți. Acest cifru este de așteptat să fie rezistent la toate atacurile cunoscute în prezent asupra cifrurilor bloc.

Moduri de operare ale cifrurilor bloc (înlocuire simplă, gamma, gamma cu părere la ieșire, gamma cu feedback de text cifrat, înlocuire simplă cu legătură și generare de inserare imitativă) sunt incluse într-un standard separat GOST R 34.13-2015, care corespunde practicii internaționale acceptate. Aceste moduri se aplică atât cifrului Magma, cât și noului cifru Grasshopper.

  • O deplasare ciclică pe biți este efectuată spre stânga cu 11 biți. Decriptarea se efectuează conform aceleiași scheme, dar cu un program diferit de utilizare a cheilor: de la prima până la a opta rundă de decriptare - în ordine directă: de la a 9-a până la a 32-a rundă de decriptare - în ordine inversă: În comparație cu Cifrul DES din GOST 28147-89 are următoarele avantaje: o cheie semnificativ mai lungă (256 de biți față de 56 pentru cifrul DES), atac asupra căruia prin căutarea exhaustivă a setului de chei pare imposibil în acest moment; un program simplu de utilizare a cheii, care simplifică implementarea algoritmului și mărește viteza de calcul. Proiectarea blocurilor S GOST 28147-89. Este evident că schema algoritmului GOST 28147-89 este foarte simplă. Aceasta înseamnă că cea mai mare sarcină de criptare cade pe tabelele de înlocuire. Valori de tabel
  • Panasepko S.P. Algoritmi de criptare: o carte de referință specială. Sankt Petersburg: BHV-Petersburg, 2009.
  • Kara O. Reflection Attacks on Product Ciphers. URL: http://eprint.iacr.org/2007/043.pdf
  • Standard rusesc de criptare: putere redusă. URL: http://cryptofaq.ru/index.php/2010-12-23-18-20-21/2010-12-23-18-22-09/90-2011-02-01-07-47- 27
  • Achekseev E.K., Smyshlyaev S.V. GOST 28147-89: „Nu te grăbi să-l îngropi”.

). În același timp, în mass-media și bloguri ruse utilizatori ruși Numărul de note despre acest algoritm este în creștere: atât acoperă rezultatele atacurilor la standardul rus cu diferite grade de fiabilitate, cât și conțin opinii cu privire la caracteristicile sale operaționale. Autorii (și, în consecință, cititorii) acestor note au adesea impresia că algoritmul de criptare autohton este depășit, lent și are vulnerabilități care îl fac semnificativ mai susceptibil la atacuri decât algoritmii de criptare străini cu o lungime de cheie similară. Cu această serie de note am dori să vă spunem într-o formă accesibilă despre situația actuală a standardului rus. Prima parte va acoperi toate atacurile asupra GOST 28147-89 cunoscute comunității criptografice internaționale și evaluările actuale ale puterii sale. În publicațiile viitoare vom analiza în detaliu proprietățile standardului din punctul de vedere al posibilității de a construi implementări eficiente.

Nicolas Courtois - „cel mare și teribil”

Să începem cu o poveste despre activitățile lui Nicolas Courtois, care este autorul unei serii întregi de lucrări dedicate standardului rus de criptare bloc ().

În octombrie 2010, a început procesul de luare în considerare a includerii algoritmului GOST 28147-89 în standardul internațional ISO/IEC 18033-3. Deja în mai 2011, pe arhiva electronică ePrint a apărut un articol al celebrului criptograf Nicolas Courtois, marcat de o atitudine foarte ambiguă față de el din partea comunității criptografice mondiale. Publicațiile lui Courtois sunt un exemplu trist de manipulare a conceptelor, care nu dezvăluie nicio proprietăți noi ale obiectului în cauză, dar cu pretenția de senzație provoacă răspândirea unor opinii eronate despre proprietățile sale reale într-un mediu incompetent.

Metoda algebrică

Raționamentul lui Courtois este construit în jurul a două clase de metode de criptoanaliza: metode algebrice și metode diferențiale. Să ne uităm la prima clasă de metode.

Simplificată, metoda criptoanalizei algebrice poate fi descrisă ca compilare și rezolvare sistem mare ecuații, ale căror soluții corespund scopului criptoanalistului (de exemplu, dacă un sistem este compilat folosind o pereche de text simplu și text cifrat, atunci toate soluțiile acestui sistem corespund cheilor la care acest text simplu este convertit într-un text cifrat dat). Adică, în cazul problemei criptoanalizei unui cifr în bloc, esența metodei algebrice a criptoanalizei este că cheia este găsită ca urmare a rezolvării unui sistem de ecuații polinomiale. Principala dificultate este să poți crea un sistem cât mai simplu, ținând cont de caracteristicile unui anumit cifr, astfel încât procesul de rezolvare a acestuia să dureze cât mai puțin. Aici rolul cheie este jucat de caracteristicile fiecărui cifr specific analizat.

Metoda algebrică folosită de Courtois poate fi descrisă pe scurt după cum urmează. În prima etapă, astfel de proprietăți ale GOST 28147-89 sunt utilizate ca existență a unui punct fix pentru o parte a transformării de criptare, precum și așa-numitul punct de reflexie. Datorită acestor proprietăți, există suficient cantitate mare Sunt selectate mai multe perechi de text clar-texte cifrate, care fac posibilă luarea în considerare a transformărilor nu în 32, ci doar în 8 runde. A doua etapă este aceea că, pe baza rezultatelor a 8 transformări rotunde obținute în prima etapă, se construiește un sistem de ecuații neliniare, în care biții cheie sunt necunoscuți. Apoi, acest sistem este rezolvat (sună simplu, dar în realitate este cea mai consumatoare parte a metodei, deoarece sistemul constă din ecuații neliniare).

După cum sa menționat mai sus, nu există nicăieri în lucrare descriere detaliatași analiza complexității celei de-a doua și principalele etape de determinare a cheii. Complexitatea celei de-a doua etape este cea care determină complexitatea întregii metode în ansamblu. În schimb, autorul furnizează „faptele” notorii pe baza cărora face estimări ale intensității muncii. Se spune că aceste „fapte” se bazează pe rezultate experimentale. O analiză a „faptelor” din opera lui Courtois în ansamblu este dată în lucrările autorilor autohtoni. Autorii acestei lucrări notează că multe dintre „faptele” lui Courtois prezentate fără nicio dovadă s-au dovedit a fi false în timpul testelor experimentale. Autorii articolului au mers mai departe și, în urma lui Courtois, au efectuat o analiză a complexității etapei a doua folosind algoritmi și estimări bine fundamentate. Estimările de complexitate rezultate arată inaplicabilitatea completă a atacului prezentat. Pe lângă autorii autohtoni, marile probleme pe care le are Courtois cu evaluările și justificarea metodelor sale au fost remarcate, de exemplu, în lucrare.

Metoda diferențială

Să luăm în considerare a doua metodă Courtois, care se bazează pe criptoanaliza diferențială.

Metoda generală de criptoanaliza diferențială se bazează pe exploatarea proprietăților mapărilor neliniare utilizate în primitivele criptografice, asociate cu influența valorii cheii asupra dependențelor dintre diferențele dintre perechile de valori de intrare și perechile de valori de ieșire ale acestor mapări. . Să descriem ideea principală a metodei diferențiale de analiză criptografică a unui cifru bloc. De obicei, cifrurile bloc transformă datele de intrare în etape folosind un număr de așa-numitele transformări rotunde, iar fiecare transformare rotundă nu folosește întreaga cheie, ci doar o parte a acesteia. Să luăm în considerare un cifr ușor „trunchiat”, care diferă de cel original prin faptul că nu are ultima rundă. Să presupunem că a fost posibil să se stabilească că criptarea a două texte clare care diferă în anumite poziții fixe folosind un astfel de cifru „trunchiat” va duce cel mai probabil la texte cifrate care diferă și în unele poziții fixe. Această proprietate arată că un cifru „trunchiat” lasă cel mai probabil o dependență între unele texte clare și rezultatele criptării lor. Pentru a recupera o parte a cheii folosind acest defect evident, este necesar să putem cripta textele clare preselectate pe cheia pe care dorim să o recuperăm (așa-numitul „atac cu text clar ales”). La începutul procedurii de „deschidere a cheii”, un număr de perechi de texte clare sunt generate aleatoriu, care diferă în aceleași poziții fixe. Toate textele sunt criptate folosind un cifru „complet”. Perechile de text cifrat rezultate sunt folosite pentru a recupera acele biți cheie care au fost utilizați în ultima rundă de transformare, după cum urmează. Folosind o valoare selectată aleatoriu a biților cheie doriti, tuturor textelor cifrate se aplică o transformare inversă ultimei runde. De fapt, dacă am ghicit valoarea dorită a biților cheii, vom obține rezultatul unui cifru „trunchiat”, iar dacă nu am ghicit, vom „cripta și mai mult datele”, ceea ce va reduce doar dependența dintre blocurile notate mai sus (diferența este în unele poziții fixe). Cu alte cuvinte, dacă printre rezultatele unei astfel de „prelucrări suplimentare” a textelor cifrate au existat destul de multe perechi care diferă în pozițiile fixe cunoscute de noi, atunci aceasta înseamnă că am ghicit biții cheie necesari. În caz contrar, vor fi semnificativ mai puține astfel de perechi. Deoarece doar o parte din cheie este utilizată în fiecare rundă, biții căutați (adică biții cheie utilizați în ultima rundă) nu sunt la fel de numeroși ca biții din cheia completă și pot fi repetați pur și simplu prin repetarea pașilor de mai sus. . În acest caz, cu siguranță ne vom împiedica cândva de sensul corect.

Din descrierea de mai sus rezultă că cel mai important lucru în metoda analizei diferențiale este numărul acelor poziții în texte clare și texte cifrate, diferențele în care joacă un rol cheie în recuperarea biților cheie. Prezența fundamentală a acestor poziții, precum și mulțimea numerelor lor, depinde direct de proprietățile acelor transformări neliniare care sunt utilizate în orice cifră bloc (de obicei toată „neliniaritatea” este concentrată în așa-numitele cutii S sau noduri de înlocuire).

Courtois folosește o versiune ușor modificată a metodei diferențiale. Să observăm imediat că Courtois își realizează analiza pentru S-box-uri care sunt diferite de cele actuale și de cele propuse în ISO. Lucrarea oferă caracteristici diferențiale (acele numere în care blocurile ar trebui să difere) pentru un număr mic de runde. Justificarea extinderii caracteristicilor pentru mai multe runde se bazează, ca de obicei, pe „fapte”. Courtois exprimă, din nou, cu nimic altceva decât autoritatea sa, o presupunere nesusținută că schimbarea S-box-urilor nu va afecta rezistența GOST 28147-89 împotriva atacului său (în timp ce, din motive necunoscute, S-box-urile din primul proiect de lucru al adăugarea la standardul ISO/IEC 18033-3 nu a fost luată în considerare). Analiza efectuată de autorii articolului arată că, chiar dacă luăm „faptele” nefondate ale lui Courtois despre credință și analizăm GOST 28147-89 cu alte blocuri S, atacul se dovedește din nou a fi cu nimic mai bun decât o căutare completă.

O analiză detaliată a lucrărilor lui Courtois cu o fundamentare detaliată a lipsei de temei a tuturor afirmațiilor despre scăderea rezistenței standardului rus a fost efectuată în lucrări [,].

În același timp, chiar și Courtois însuși admite lipsa absolută de acuratețe în calcule! Următorul diapozitiv este preluat din prezentarea lui Courtois la secțiunea de anunț scurt FSE 2012.

Trebuie remarcat faptul că munca lui Courtois a fost criticată în mod repetat de cercetători străini. De exemplu, munca sa de construire a atacurilor asupra algoritmului de criptare a blocurilor AES folosind metoda XSL conținea aceleași defecte fundamentale ca și munca de analiză a standardului rus: majoritatea estimărilor privind intensitatea muncii apar în text complet nefondate și nefondate - detaliate critica poate fi găsită, de exemplu, în muncă. În plus, Courtois însuși recunoaște refuzurile larg răspândite de a-și publica lucrările la conferințe importante de criptografie și în reviste consacrate evaluate de colegi, lăsându-i adesea doar oportunitatea de a vorbi în secțiunea de anunț scurt. De exemplu, puteți citi despre acest lucru în secțiunea 3 a lucrării. Iată câteva citate din însuși Courtois referitoare la munca sa:

  • „Cred că publicul Asiacrypt nu va simți că este interesant.” Revizor Asiacrypt 2011.
  • „… există o mare, mare, mare problemă: acest atac, care este principala contribuție a lucrării, a fost deja publicat la FSE’11 (a fost chiar și cea mai bună lucrare), …”. Revizor pentru Crypto 2011.

Astfel, partea profesională a comunității criptografice internaționale privește calitatea lucrării lui Courtois cu nu mai puțin de îndoială decât, să zicem, declarațiile unor specialiști ruși cu privire la capacitatea lor de a sparge AES pentru 2.100, care nu sunt confirmate de niciun calcul consistent, sau ultima „dovadă” a unei ipoteze de două pagini privind inegalitatea claselor de complexitate P și NP.

Atacurile lui Isobe și Dinur-Dankelman-Shamir

Ideea generală a atacurilor Isobe () și Dinur-Dankelman-Shamir (denumit în continuare: atac DDS) () este de a construi pentru un anumit set îngust (dependent de cheie) de texte clare o transformare echivalentă pe acest set, care are o structură mai simplă decât transformarea de criptare în sine. În cazul metodei Isobe, acesta este setul de blocuri de 64 de biți x astfel încât F 8 -1 (Swap(F 8 (z))) = z, unde z = F 16 (x), prin F 8 ( x) și F 16 ( x) indică primele 8 și, respectiv, primele 16 runde de criptare GOST 28147-89, prin Swap - operația de schimbare a jumătăților unui cuvânt de 64 de octeți. Dacă textul simplu este inclus în acest set, rezultatul transformării complete de 32 de runde a GOST 28147-89 coincide cu rezultatul celui de 16 runde, care este ceea ce exploatează autorul atacului. În cazul metodei DDS, aceasta este mulțimea lui x astfel încât F 8 (x) = x (punctul fix al transformării F 8). Pentru orice text simplu din acest set, transformarea GOST 28147-89 funcționează exact la fel ca ultimele 8 runde ale sale, ceea ce simplifică analiza.

Complexitatea atacului Isobe este de 2.224 de operațiuni de criptare, atacul DDS este de 2.192. Cu toate acestea, toate întrebările despre dacă atacurile Isobe și DDS introduc noi restricții privind condițiile de utilizare a algoritmului nostru sunt eliminate prin evaluarea cerințelor pentru volumul de material necesar pentru a efectua fiecare dintre atacuri: metoda Isobe necesită 2 32 de perechi de text simplu. și text cifrat, iar pentru metoda DDS - 2 64. Procesarea unor astfel de volume de material fără schimbarea cheii este a priori inacceptabilă pentru orice cifră bloc cu o lungime a blocului de 64: pe materialul volumului 2 32, ținând cont de problema zilelor de naștere (a se vedea, de exemplu, ), probabilitatea de apariție. de blocuri repetate este aproape de 1/2, ceea ce va oferi atacatorului să poată trage anumite concluzii despre textele simple din textele cifrate fără a determina cheia. Prezența a 2 64 de perechi de texte simple și cifrate obținute pe o cheie permite de fapt inamicului să efectueze operațiuni de criptare și decriptare fără a cunoaște deloc această cheie. Acest lucru se datorează unei proprietăți pur combinatorii: inamicul în acest caz are întreaga tabelă de conversie a criptării. Această situație este absolut inacceptabilă în orice condiții rezonabile de funcționare. De exemplu, în CSP CryptoPro Există o limitare tehnică a volumului de material criptat (fără conversia cheii) de 4 MB (vezi). Astfel, o interdicție strictă a utilizării unei chei pe material de un astfel de volum este inerentă oricărui cifru bloc cu o lungime a blocului de 64 de biți și, prin urmare, atacurile Isobe și DDS nu restrâng în niciun fel domeniul de utilizare al algoritmului GOST 28147-89. menținând în același timp rezistența maximă posibilă de 2.256.

Desigur, trebuie remarcat faptul că cercetătorii (Isobe și Dinur-Dankelman-Shamir) au arătat că unele proprietăți ale algoritmului GOST 28147-89 fac posibilă găsirea căilor de analiză care nu au fost luate în considerare de creatorii algoritmului. Forma simplă a programului de chei, care simplifică semnificativ sarcina de a construi implementări eficiente, permite, de asemenea, ca unele cazuri rare de chei și texte clare să construiască mai multe descrieri simple transformări efectuate de algoritm.

Lucrarea demonstrează că această proprietate negativă a algoritmului poate fi eliminată cu ușurință cu păstrarea completă a caracteristicilor operaționale, dar, din păcate, este o parte integrantă a algoritmului în forma sa utilizată în mod obișnuit.

Rețineți că o anumită neglijență în estimările intensității medii a muncii este prezentă și în lucrările lui Dinur, Dunkelman și Shamir. Astfel, la construirea unui atac, nu se acordă atenția cuvenită următorului punct: pentru o proporție semnificativă de chei, setul de texte clare x, astfel încât F 8 (x) = x, este gol: pur și simplu nu pot exista puncte fixe. pentru 8 runde de transformare. Existența punctelor fixe depinde și de alegerea nodurilor de înlocuire. Astfel, atacul este aplicabil doar pentru anumite noduri și chei de înlocuire.

De asemenea, merită menționată încă o lucrare cu un atac asupra GOST 28147-89. În februarie 2012, o versiune actualizată a articolului (datat noiembrie 2011) a apărut în arhiva electronică ePrint a asociației internaționale de criptografie, care conținea un nou atac asupra GOST 28147-89. Caracteristicile atacului prezentat sunt următoarele: volumul materialului este de 2 32 (ca Isobe), iar complexitatea este de 2 192 (ca DDS). Astfel, acest atac a îmbunătățit atacul DDS cu record de timp în ceea ce privește volumul de material de la 2 64 la 2 32. Remarcăm separat că autorii au prezentat cu onestitate toate calculele cu justificare pentru complexitatea și volumul materialului. După 9 luni s-a constatat o eroare fundamentală în calculele de mai sus, iar din noiembrie 2012, versiunea actualizată a articolului din arhiva electronică nu mai conține niciun rezultat privind algoritmul intern.

Atacuri presupunând că atacatorul știe „ceva” despre chei

În cele din urmă, să remarcăm că în literatură există și o serie de lucrări (a se vedea, de exemplu, și ) dedicate atacurilor asupra GOST 28147-89 în așa-numitul model cheie legată. Acest model practic conține ipoteza că un atacator poate obține acces pentru analiză nu doar la perechile de text simplu și criptate folosind cheia dorită, ci și la perechile de text simplu și ciphertext obținute folosind chei (de asemenea necunoscute) care diferă de cea căutată într-un obișnuit cunoscut. mod (de exemplu, la poziții fixe de biți). În acest model, este într-adevăr posibil să obțineți rezultate interesante despre GOST 28147-89, dar în acest model pot fi obținute rezultate nu mai puțin puternice despre, de exemplu, cel care a primit cel mai mult utilizare largăîn rețelele publice moderne folosind standardul AES (vezi, de exemplu,). Rețineți că condițiile pentru efectuarea acestui tip de atac apar atunci când se utilizează un cifr într-un anumit protocol. Trebuie remarcat faptul că rezultatele de acest fel, deși prezintă un interes academic indubitabil din punctul de vedere al studierii proprietăților transformărilor criptografice, nu sunt de fapt relevante pentru practică. De exemplu, toate instrumentele de protecție a informațiilor criptografice certificate de FSB al Rusiei îndeplinesc cele mai stricte cerințe pentru schemele de generare a cheilor de criptare (a se vedea, de exemplu,). După cum s-a indicat în rezultatele analizei, dacă există 18 chei asociate și 2 10 perechi de blocuri de text simplu și criptat, complexitatea deschiderii complete a cheii private, cu o probabilitate de succes de 1-10 -4, este de fapt 2 26 . Cu toate acestea, dacă cerințele menționate mai sus pentru dezvoltarea materialului cheie sunt îndeplinite, probabilitatea de a găsi astfel de chei este de 2 -4352, adică de 24096 de ori mai puțin decât dacă încercați pur și simplu să ghiciți cheia secretă la prima încercare.

Lucrările legate de modelul cu chei legate includ și lucrări, care în 2010 au provocat mult zgomot în publicațiile electronice rusești, care nu suferă de obiceiul de a verifica cu atenție materialul în cursa pentru senzații. Rezultatele prezentate în acesta nu au fost susținute de nicio justificare riguroasă, ci au conținut declarații puternice despre capacitatea de a pirata standardul de stat al Federației Ruse pe un laptop slab în câteva secunde - în general, articolul a fost scris în cele mai bune tradiții. lui Nicolas Courtois. Dar, în ciuda lipsei absolute de temeință a articolului pentru cititorul care este mai mult sau mai puțin familiarizat cu principiile de bază ale publicațiilor științifice, tocmai pentru a asigura publicul rus după lucrare, Rudsky a scris un text detaliat și amănunțit, care conține o analiză cuprinzătoare. a acestui neajuns. Articolul cu titlul auto-explicativ „Despre semnificația practică zero a lucrării „Atacul de recuperare cheie pe cifrul bloc GOST complet cu timp și memorie zero”” oferă o justificare că complexitatea medie a metodei prezentate nu este mai mică decât complexitatea. a unei căutări complete.

Reziduuri uscate: ce este durabilitatea în practică?

În concluzie, prezentăm un tabel care conține date despre toate rezultatele atacurilor strict descrise și justificate asupra GOST 28147-89 cunoscute comunității criptografice internaționale. Rețineți că complexitatea este dată în operațiunile de criptare ale algoritmului GOST 28147-89, iar memoria și materialul sunt indicate în blocuri de algoritm (64 biți = 8 octeți).

Atac Intensitatea muncii Memorie Material necesar
Isobe 2 224 2 64 2 32
Dinur-Dankelman-Shamir, FP, 2DMitM 2 192 2 36 2 64
Dinur-Dankelman-Shamir, FP, memorie scăzută 2 204 2 19 2 64
2 224 2 36 2 32
Dinur-Dankelman-Shamir, Reflection, 2DMitM 2 236 2 19 2 32
Căutare completă 2 256 1 4
Numărul de nanosecunde de la crearea Universului 2 89

În ciuda unui ciclu de cercetare la scară destul de mare în domeniul stabilității algoritmului GOST 28147-89, acest moment Nu se cunoaște niciun atac care să poată fi realizat în conformitate cu cerințele operaționale ale unei lungimi de bloc de 64 de biți. Restricțiile privind volumul de material care poate fi procesat pe o singură cheie rezultând din parametrii de cifrare (lungimea biților cheii, lungimea biților blocului) sunt semnificativ mai stricte decât volumul minim necesar pentru a efectua orice atac cunoscut în prezent. În consecință, atunci când întrunesc cerințele operaționale existente, niciuna dintre metodele de criptoanaliza propuse până în prezent GOST 28147-89 nu permite determinarea unei chei cu o intensitate a muncii mai mică decât căutarea exhaustivă.

„Cât timp ești în viață, nu muri, uită-te la lumea asta.
Mulți aici au un suflet mort - sunt morți în interior.
Dar ei merg și râd, fără să știe că nu sunt acolo,
Nu vă grăbi ora morții”, mi-a spus ea.

Aria, „Acolo sus”

  1. Introducere
  1. Introducere în Cifrurile bloc

2.1 rețele Feistel.
2.2 Cifrul bloc GOST 28147-89

  1. Minimum teoretic

3.1 Informatie cheie
3.2 Pasul de bază al conversiei cripto

3.3 Cicluri de bază:32-Z, 32-P.

  1. Practică

4.1 Implementarea etapei principale de conversie cripto
4.2 Creșterea vitezei algoritmului
5.
6. Lista literaturii folosite
7. Mulțumiri

Introducere.

Acest document este încercarea mea de a descrie o metodă pentru pur și simplu înlocuirea algoritmului de criptare GOST 28147-89 cu cel mai simplu limbaj, dar totuși competent din punct de vedere tehnic. Cititorul își va spune părerea despre cât de bine am reușit după ce a citit primele șase puncte.

Pentru ca munca mea să fie mai utilă, vă recomand să vă înarmați cu lucrările autorilor indicați în lista literaturii folosite. De asemenea, este recomandat un calculator pentru ca acesta să aibă o funcție pentru calcularea operației XOR, deoarece citirea articolului presupune că cititorul intenționează să studieze acest algoritm de criptare. Deși este potrivit și ca ghid de referință, am scris acest articol special ca unul de instruire.

Introducere în cifrurile bloc.

Înainte de a începe să privim algoritmul, trebuie să ne familiarizăm cu istoria creării acestui tip de cifruri. Algoritmul aparține categoriei de cifruri bloc, în arhitectura cărora informațiile sunt împărțite într-un număr finit de blocuri, cel final poate să nu fie complet. Procesul de criptare are loc exact pe blocuri complete, care formează cifra cifrogramă. Blocul final, dacă este incomplet, este completat cu ceva (despre nuanțele completării lui voi vorbi mai jos) și este criptat în același mod ca și blocurile complete. Prin cifrgramă mă refer la rezultatul funcției de criptare care acționează asupra unei anumite cantități de date pe care utilizatorul le-a trimis pentru criptare. Cu alte cuvinte, o cifrgramă este rezultatul final al criptării.

Istoria dezvoltării cifrurilor bloc este asociată cu începutul anilor '70, când IBM, realizând nevoia de a proteja informațiile atunci când transmite date prin canalele de comunicație computerizate, a început să implementeze propriul program. cercetare științifică, dedicat protecției informațiilor în rețelele electronice, inclusiv criptografie.

Un grup de cercetători și dezvoltatori de la IBM, care a început să cerceteze sisteme de criptare cu o schemă de chei simetrice, a fost condus de Dr. Horst Feistel.

2.1 Rețele Feistel

Arhitectura noii metode de criptare propusă de Feistel în literatura clasică a fost numită „Arhitectura Feistel”, dar în prezent în literatura rusă și străină este folosit un termen mai consacrat - „Rețea Feistel” sau Feistel`s NetWork. Ulterior, cifrul „Lucifer” a fost construit folosind această arhitectură - care a fost publicată ulterior și a provocat un nou val de interes în criptografie în general.

Ideea arhitecturii rețelei Feistel este următoarea: fluxul de informații de intrare este împărțit în blocuri de n biți în dimensiune, unde n este un număr par. Fiecare bloc este împărțit în două părți - L și R, apoi aceste părți sunt introduse într-un cifr de bloc iterativ, în care rezultatul etapei j-a este determinat de rezultatul etapei anterioare j-1! Acest lucru poate fi ilustrat cu un exemplu:

Orez. 1

Unde, funcția A este acțiunea principală a unui cifru bloc. Poate fi o acțiune simplă, cum ar fi operația XOR, sau poate avea o formă mai complexă și poate fi o succesiune a unui număr de acțiuni simple - adăugare modulo, deplasare la stânga, înlocuire de elemente etc., împreună aceste acțiuni simple formează așa-numita etapă principală a conversiei cripto.

Trebuie remarcat faptul că elementele cheie ale funcționării funcției sunt furnizarea de elemente cheie și operația XOR, iar cât de bine sunt gândite aceste operațiuni indică puterea criptografică a cifrului în ansamblu.

Pentru ca ideea rețelelor Feistel să fie complet clară, să luăm în considerare cel mai simplu caz descris în orez. 1, unde în funcția A – vor apărea operațiile „mod 2” (“xor”), dar aceasta cel mai simplu caz, într-o situație mai gravă, de exemplu, ascunderea informațiilor de importanță națională, funcția A poate fi mai complexă (din câte am văzut, funcția A poate fi de fapt foarte complexă):

Date inițiale:

L=1110b, R=0101, K=1111b

Obțineți codul de criptare

  1. (R + K) mod 2 4 = Smod, Smod = 0100b
  2. (Smod + L) mod 2 = Sxor, Sxor = 1010b
  3. L=R, R=Sxor

L=0101b, R=1010b

Să explicăm acțiunile noastre:

  1. Această operație este modul de adăugare 2 4. În practică, o astfel de operație se reduce la o simplă adunare, în care trebuie să adunăm două numere și să ignorăm transportul în a 5-a cifră. Deoarece, dacă punem exponenți deasupra cifrelor reprezentării binare a unui număr, va exista un exponent patru deasupra celei de-a cincea cifre, să ne uităm la figura de mai jos, care arată acțiunile operației noastre:

Orez. 2

Aici am indicat cu o săgeată către exponenți, după cum puteți vedea, rezultatul ar fi trebuit să fie 10100, dar din moment ce operațiunea mod 2 4 ignoră transportul, obținem 0100.

  1. Această operație se numește mod 2 în literatură și este implementată în limbaj de asamblare de către comandă XOR. Dar numele său mai corect este mod 2 1. Fără această operațiune unică, cu greu este posibil să construiești un algoritm de criptare rapid, ușor de implementat și, în același timp, să fie destul de rezistent la criptografie. Unicitatea acestei operațiuni constă în faptul că este opusul ei! De exemplu, dacă numărul A este XORED cu numărul B, rezultatul este B. În viitor, este suficient să XOR numerele B și C între ele pentru a obține valoarea anterioară a lui A!

În această operație am obținut 1010 cu numerele 1110 și 0100, pentru a obține 1110 înapoi, este suficient să XOR numerele 0100 și 1010 unul cu celălalt! Mai multe despre această operațiune puteți citi în articolul atașat site-ului. www.wasm.ru, « Ghid de bază pentruAlgoritmi de detectare CRC_error» autorul care Ross N. Williams. În această lucrare există un punct - „ 5. Aritmetică binară fără transporturi" În acest articol este descrisă operația. xor! Exclam pentru că în acest articol această operațiune este atât de descrisă încât cititorul nu numai că înțelege cum funcționează această operație, ci chiar o începe vezi, auzi si simti!

  1. Această acțiune este necesară pentru ca atunci când decriptați cifra cifrată, să poată fi obținute valorile originale.

2.2 Cifrul bloc GOST 28147-89

Algoritmul de criptare GOST 28147 – 89 aparține categoriei de cifruri bloc care funcționează conform arhitecturii rețelelor Feistel echilibrate, unde două părți ale blocului de informații selectat sunt de dimensiune egală. Algoritmul a fost dezvoltat în măruntaiele celui de-al optulea departament al KGB, acum transformat în FAPSI și a fost stabilit ca standard de criptare al Federației Ruse încă din 1989 sub URSS.

Pentru munca aceasta metoda Algoritmul trebuie să împartă informațiile în blocuri de 64 de biți. Generați sau introduceți în sistemul de criptare următoarele informații cheie: cheie și tabel de înlocuire. Alegerea cheii și a tabelului de înlocuire la criptare ar trebui luată foarte în serios, deoarece Aceasta este baza pentru securitatea informațiilor dvs. Pentru informații despre cerințele impuse cheii și tabelului de înlocuire, consultați paragraful „Cerințe pentru informațiile cheie”.

Când luăm în considerare metoda, nu ne vom concentra asupra acestui lucru, deoarece acest articol, așa cum am spus mai sus, a fost scris cu scopul de a învăța cititorul cum să cripteze datele folosind metoda simplă de înlocuire a acestui algoritm criptare, dar cu siguranță vom aborda această problemă la sfârșitul articolului.

Minimum teoretic.

3.1 Informații cheie

După cum am spus mai sus, următoarele participă activ la criptarea datelor:

3.1.1. O cheie este o secvență de opt elemente, fiecare având o dimensiune de 32 de biți. Mai departe îl vom desemna prin simbolul K, iar elementele din care constă sunt k1, k2, k3, k4, k5, k6, k7, k8.

3.1.2 Tabel de înlocuire – o matrice de opt rânduri și șaisprezece coloane, denumită în continuare Hij. Fiecare element de la intersecția rândului i și coloanei j ocupă 4 biți.

Acțiunea principală în procesul de criptare este pasul principal al conversiei cripto. Aceasta nu este altceva decât acțiunea de a cripta datele folosind un anumit algoritm, doar dezvoltatorii au introdus un nume foarte greoi :).

Înainte de a începe criptarea, blocul este împărțit în două părți L și R, câte 32 de biți fiecare. Ei selectează un element cheie și abia apoi introduc aceste două părți ale blocului, elementul cheie și tabelul de înlocuire în funcția pas principal. Rezultatul pasului principal este o iterație a ciclului de bază, care va fi discutată în continuare paragraf. Pasul principal constă în următoarele:

  1. Partea de adăugare a blocului R este însumată cu elementul cheie K mod 2 32. Am descris o operație similară mai sus, aici același lucru, doar exponentul nu este „4”, ci „32” - rezultatul acestei operații va fi notat în continuare cu Smod.
  2. Împărțim rezultatul Smod obținut anterior în elemente de patru biți s7, s6, s5, s4, s3, s2, s1, s0 și îl introducem în funcția de înlocuire. Înlocuirea are loc astfel: selectați elementul Smod - s i , începeți de la început cu elementul cel mai de jos și înlocuiți-l cu valoarea din tabelul de înlocuire pentru i - rândul și coloana indicate de valoarea elementului s i . Mergem la s i +1 element și procedăm în același mod și continuăm până când înlocuim valoarea ultimului element Smod - rezultatul acestei operații va fi notat ca, Ssimple.
  3. În această operație, valoarea lui Ssimple este deplasată ciclic la stânga cu 11 biți și obținem Srol.
  4. Selectăm a doua parte a blocului L și adăugăm mod 2 cu Srol, ca urmare avem Sxor.
  5. În această etapă, partea L a blocului devine egală cu valoarea părții R, iar partea R la rândul ei este inițializată de rezultatul lui Sxor și acesta este sfârșitul funcției pasului principal!

3.3 Cicluri de bază: „32-Z”, „32-R”.

Pentru a cripta informațiile, acestea trebuie împărțite în blocuri de 64 de biți în mod natural, ultimul bloc poate fi mai mic de 64 de biți; Acest fapt este călcâiul lui Ahile al acestei metode de „înlocuire simplă”. Deoarece adăugarea sa la 64 de biți este o sarcină foarte importantă în creșterea puterii criptografice a cifrgramei, acest loc sensibil, dacă este prezent în matricea de informații, și poate să nu fie (de exemplu, un fișier de 512 octeți în dimensiune !), ar trebui tratat cu mare grijă responsabilitate!

După ce ați împărțit informațiile în blocuri, ar trebui să împărțiți cheia în elemente:

K = k1,k2,k3,k4,k5,k6,k7,k8

Criptarea în sine constă în utilizarea așa-numitelor cicluri de bază. Care, la rândul lor, includ al n-lea număr de pași de conversie cripto de bază.

Ciclurile de bază sunt, cum pot spune, marcate: n – m. Unde n este numărul de pași principali de conversie criptografică din ciclul de bază, iar m este „tipul” ciclului de bază, de exemplu. Despre ce vorbim, criptarea „Z” sau criptarea „R” a datelor.

Ciclul de criptare de bază 32-3 constă din 32 de pași principali de cripto-transformare. Funcția care implementează acțiunile pasului este furnizată cu blocul N și elementul cheie K, unde primul pas are loc cu k1, al doilea deasupra rezultatului obținut cu elementul k2 etc. conform următoarei scheme:

k1,k2,k3,k4,k5,k6,k7,k8,k1,k2,k3,k4,k5,k6,k7,k8,k1,k2,k3,k4,k5,k6,k7,k8k8,k7, k6,k5,k4,k3,k2,k1

Procesul de decriptare pentru 32-P are loc într-un mod similar, dar elementele cheie sunt furnizate în ordine inversă:

k1,k2,k3,k4,k5,k6,k7,k8,k8,k7,k6,k5,k4,k3,k2,k1,k8,k7,k6,k5,k4,k3,k2,k1,k8, k7,k6,k5,k4,k3,k2,k1

Practică.

După ce ne-am familiarizat cu teoria modului de criptare a informațiilor, era timpul să vedem cum are loc criptarea în practică.

Date inițiale:

Să luăm blocul de informații N = 0102030405060708h, aici părțile L și R sunt egale:

L = 01020304h, R =05060708h, luați cheia:

K = ' ca28 zw37 q839 7342ui23 8e2t wqm2 ewp1’ (acestea sunt coduri ASCII, pentru a vizualiza reprezentarea hexazecimală, puteți deschide acest fișier în modul de vizualizare în Comandant total prin apăsarea butonului „ F3"și apoi cheia" 3 "). În această cheie, valorile elementului vor fi:

k1 = „as28”, k2 = „zw37”, k3 = „q839”, k4 = „7342”

k5 = „ui23”, k6 = „8e2t”, k7 = „wqm2”, k8 = „ewp1”

Să luăm și următorul tabel de înlocuire:

Orez. 3

Aici rândurile sunt numerotate de la 0 la 7, coloanele de la 0 la F.

Avertizare: Toate informațiile, inclusiv cheia cu tabelul de înlocuire, sunt luate ca exemplu pentru luarea în considerare a algoritmului!

Folosind „Date de intrare”, este necesar să obțineți rezultatul etapei principale de cripto-conversie.

  1. Selectăm partea R = 05060708h și elementul cheie k1 = ‘as28’, în formă hexazecimală elementul cheie va arăta astfel: 61733238h. Acum efectuăm operația de însumare mod 2 32:

Orez. 4

După cum puteți vedea în figură, nu am avut un transfer la 33 de biți marcați cu roșu și cu exponentul „ 32 " Și dacă am avea alte valori pentru R și elementul cheie, acest lucru s-ar putea întâmpla foarte bine, apoi l-am ignora, iar pe viitor am folosi doar biții marcați cu galben.

Efectuez această operație folosind comanda assembler adăuga:

; eax = R, ebx = ‘as28’

Rezultatul acestei operațiuni este Smod = 66793940h

  1. Acum aceasta este cea mai dificilă operațiune, dar dacă te uiți mai atent, nu mai este atât de înfricoșătoare pe cât pare la început. Să ne imaginăm Smod în următoarea formă:

FIGURA NU S-A SALVAT

Orez. 5

Am încercat să vizualizez elementele Smod din figură, dar voi explica oricum:

s0 = 0, s1 = 4, s2 = 9 etc.

Acum, pornind de la elementul cel mai de jos s0, facem înlocuirea. Amintind punctul „ 3.2 Etapa de bază a conversiei cripto» i – rând, s i – coloană, căutați valoarea în rândul zero și coloana zero:

Fig.6

Deci valoarea actuală a Smod nu este 6679394 0 h, a 6679394 5 h.

Să începem să înlocuim s1, adică. patru. Folosind primul rând și a patra coloană (s1= 4!). Să ne uităm la poză:

Orez. 7

Acum valoarea este Smod, nu 667939 4 5h, 667939 2 5h. Presupun că algoritmul de înlocuire este acum clar pentru cititor și pot spune că după aceasta rezultatul final al lui Ssimple va avea următoarea valoare - 11e10325h.

Voi vorbi despre modul în care acest lucru poate fi cel mai ușor implementat sub formă de comenzi de asamblare mai târziu în paragraful următor, după ce voi vorbi despre tabelul extins.

  1. Trebuie să deplasăm valoarea Ssimple rezultată cu 11 biți la stânga.

Orez. 8

După cum puteți vedea, această acțiune este destul de simplă și este implementată cu o comandă în limbaj de asamblare - rol iar rezultatul acestei operațiuni Srol este 0819288Fh.

  1. Acum tot ce rămâne este să XOR partea L a blocului nostru de informații cu valoarea Srol. Iau un calculator de la w2k sp4 și iau Sxor = 091b2b8bh.
  2. Această acțiune este finală și pur și simplu atribuim, curățăm R, valoarea părții L și inițializam partea L cu valoarea lui Sxor.

Rezultat final:

L = 091b2b8bh, R = 01020304h

4.2 Creșteți viteza algoritmului

Acum să vorbim despre optimizarea algoritmului pentru viteză. La implementarea oricărui proiect, trebuie să ții cont de faptul că un program care funcționează cu registre mai des decât cu memorie funcționează cel mai rapid și aici este foarte importantă și această judecată, deoarece peste un bloc de informații există până la 32 de acțiuni de criptare!

Când am implementat algoritmul de criptare în programul meu, am făcut următoarele:

  1. Am selectat o parte din blocul L în registrul eax și R în registrul edx.
  2. Registrul esi a fost inițializat cu adresa cheii extinse, mai multe despre aceea de mai jos.
  3. Registrului ebx i s-a atribuit valoarea adresei tabelului de înlocuire extins, mai multe despre cele de mai jos
  4. S-au transmis informațiile de la punctele 1,2, 3 la funcția ciclului de bază 32 - Z sau 32 - R, în funcție de situație.

Dacă te uiți la diagrama de alimentare a elementelor cheie din paragraful „ Cicluri de bază: „32-Z”, „32-R”", atunci cheia noastră pentru ciclul de bază 32 - Z poate fi reprezentată după cum urmează:

K 32-Z =

'as28','zw37','q839','7342','ui23','8e2t','wqm2','ewp1',

'as28','zw37','q839','7342','ui23','8e2t','wqm2','ewp1',

'ewp1','wqm2','8e2t','ui23','7342','q839','zw37','as28'

Acestea. de la început sunt k1, k2, k3, k4, k5, k6, k7, k8 - ca28’, ‘zw37’, ‘q839', '7342', 'ui23', '8e2t', 'wqm2', 'ewp1' Această secvență se repetă de trei ori. Apoi elementele merg în ordine inversă, adică: k8,k7,k6,k5,k4,k3,k2,k1 - „ewp1”, „wqm2”, „8e2t”, „ui23”, „7342”, „q839”, „zw37”, „as28”.

Am pre-aranjat elementele din matrice în ordinea în care ar trebui să fie introduse în 32 - Z. Astfel, am crescut memoria necesară pe tură, dar m-am salvat de unele procese de gândire de care nu aveam nevoie și am crescut viteza algoritm, pentru reducerea timpului de acces la memorie! Aici am descris doar cheia pentru 32 - Z, pentru ciclul 32 - P am făcut același lucru, dar folosind o schemă diferită pentru furnizarea elementelor, pe care am descris-o și în paragraful „ Cicluri de bază: „32-З”, „32-Р”».

Este timpul să descriem implementarea funcției de înlocuire, așa cum am promis mai sus. Nu l-aș putea descrie mai devreme, pentru că... aceasta necesită introducerea unui nou concept - un tabel de substituție extins. Nu pot să-ți explic ce este. În schimb, ți-l arăt și poți formula singur ce este - un tabel extins de înlocuire?

Deci, pentru a înțelege ce este o masă de înlocuire extinsă, avem nevoie de o masă de înlocuire, de exemplu, o voi lua pe cea prezentată în Fig. 3.

De exemplu, trebuia să înlocuim numărul 66793940h. O voi prezenta sub următoarea formă:

FIGURA NU S-A SALVAT

Orez. 9

Acum, dacă luăm elementele s1, s0, i.e. octet mic, atunci rezultatul funcției de înlocuire va fi egal cu 25h! După ce am citit articolul lui Andrei Vinokurov, pe care l-am citat în paragraful „ Lista literaturii folosite", veți descoperi într-adevăr că, dacă luați două șiruri, puteți obține o matrice care vă permite să găsiți rapid elemente de înlocuire folosind o comandă de asamblare xlat. Se spune că există o altă cale mai rapidă, dar Andrei Vinokurov a cheltuit pe cercetare algoritmi rapizi Este nevoie de aproximativ patru ani pentru a implementa GOST! Cred că nu este nevoie să reinventăm roata când aceasta există deja.

Deci, despre matrice:

Să luăm primele două linii, zero și prima, și să creăm o matrice de 256 de octeți. Acum observăm o particularitate: dacă trebuie să convertim 00h, atunci rezultatul va fi 75h (ne bazăm pe Fig. 3) - punem această valoare în matrice la offset 00h. Luăm valoarea 01h, rezultatul funcției de înlocuire 79h, o punem în tablou la offset 01 și tot așa până la 0FFh, care ne va da 0FCh, pe care îl punem în tablou la offset 0FFh. Deci am primit un tabel extins de înlocuiri pentru primul grup de rânduri: primul și zero. Dar există încă trei grupuri: a doua pagină 2, pagina 3, a treia pagină 4, pagina 5, a patra pagina 6, pagina 7. Ne ocupăm de aceste trei grupuri în același mod ca și cu primul. Rezultatul este un tabel de înlocuire extins!

Acum puteți implementa un algoritm care va efectua înlocuirea. Pentru asta luăm codurile sursă, pe care Andrei Vinokurov a postat-o ​​pe pagina sa, vezi „ Bibliografie».

lea ebx,extended_table_simple

mov eax,[puneți numărul de înlocuit]

adăugați ebx,100h;săriți la următoarele două noduri

sub ebx,300h ; astfel încât în ​​viitor ebx va indica tabelul

Acum mai există o caracteristică: cu acțiunile anterioare nu numai că am înlocuit, dar am mutat și numărul de 8 biți la stânga! Tot ce trebuie să facem este să deplasăm numărul încă 3 biți la stânga:

si obtinem rezultatul operatiei rol eax,11!

Nu mai pot adăuga nimic în ceea ce privește optimizarea, singurul lucru pe care îl pot sublinia este ceea ce am spus mai sus - folosiți registrele mai des decât accesarea memoriei. Cred că aceste cuvinte sunt doar pentru începători, înțeleg perfect acest lucru fără cuvintele mele :).

Cerințe pentru informațiile cheie.

După cum se precizează în articolul lui Andrey Vinokurov, cheia este selectată în funcție de două criterii:

— un criteriu pentru distribuția equiprobabilă a biților între valorile 1 și 0. În mod obișnuit, criteriul Pearson („chi-pătrat”) este utilizat ca criteriu pentru distribuția equiprobabilă a biților.

Aceasta înseamnă că cheia, în principiu, poate fi orice număr. Adică, atunci când următorul bit al cheii este format, probabilitatea inițializării acesteia la unu sau zero este 50/50!

Vă rugăm să rețineți că cheia este formată din opt elemente, fiecare de 32 de biți, deci în total sunt 32 * 8 = 256 de biți în cheie și numărul de chei posibile este de 2.256! Nu te uimește asta? 🙂

- criteriul seriei.

Dacă ne uităm la cheia noastră, pe care am furnizat-o în paragraful „ 4.1 Implementarea etapei principale de conversie cripto", atunci veți observa că următoarea notație este adevărată:

Orez. 10

Într-o frază, valoarea lui k 1 nu trebuie repetată în k 2 sau în orice alt element cheie.

Adică, cheia pe care am ales să o considerăm ca algoritm de criptare îndeplinește pe deplin cele două criterii de mai sus.

Acum despre alegerea unei mese de înlocuire:

Acum să vorbim despre cum să alegeți tabelul de înlocuire potrivit. Principala cerință pentru alegerea tabelelor de înlocuire este fenomenul de „nerepetare” a elementelor, fiecare având o dimensiune de 4 biți. După cum ați văzut deja mai sus, fiecare rând al tabelului de înlocuire este format din valorile 0h, 1h, 2h, 3h, ..., 0fh. Deci, principala cerință prevede că fiecare linie conține valorile 0h, 1h, 2h, ..., 0fh și fiecare astfel de valoare într-o singură copie. De exemplu, secvența:

1 2 3 4 5 6 7 8 9 A B C D E F

Îndeplinește pe deplin această cerință, dar totuși! Nu este recomandat să selectați o astfel de secvență ca șir. Pentru că dacă introduceți o valoare la intrarea unei funcții care se bazează pe un astfel de șir, atunci veți obține aceeași valoare ca și rezultatul! Nu mă crezi? Apoi luați numărul 332DA43Fh și opt astfel de rânduri ca tabel de înlocuiri. Efectuați operația de înlocuire și vă asigur că rezultatul pe care îl veți obține este 332DA43Fh! Adică, la fel cu ceea ce ați trimis ca intrare la operațiune! Dar acesta nu este un semn de bune maniere atunci când criptați, și nu-i așa? 🙂

Aceasta a fost o cerință, următorul criteriu spune că - fiecare bit al blocului de ieșire trebuie să fie independent statistic de fiecare bit al blocului de intrare!

Cum arată asta mai simplu? Și iată cum, de exemplu, am selectat elementul s0 = 0Fh, 01111b din numărul de mai sus. Probabilitatea ca acum să înlocuim primul bit cu unul sau zero este de 0,5! Probabilitatea înlocuirii celui de-al doilea, al treilea și al patrulea bit, fiecare bit, pe care îl considerăm separat, cu unu sau zero, este de asemenea de 0,5 Când alegem s1 = 0Eh, probabilitatea ca bitul zero să fie înlocuit, iar acesta este „0”. zero sau unul prea egal cu – 0,5! Astfel, conform acestui criteriu, nu există un model între înlocuirea biților zero ai elementelor s0, s1! Da, ai putea înlocui cele, dar ai putea înlocui și zerouri. 🙂

Pentru a evalua tabelul conform acestui criteriu, puteți construi un tabel de coeficienți de corelație calculati folosind formula:

— dacă p = 1, atunci valoarea bitului j la ieșire este egală cu valoarea bitului i la intrare pentru orice combinație de biți la intrare;

— dacă p = -1, atunci valoarea bitului j la ieșire este întotdeauna inversul bitului i de intrare;

— dacă p = 0, atunci bitul de ieșire j cu probabilitate egală ia valorile 0 și 1 pentru orice valoare fixă ​​a bitului de intrare i.

Să luăm un exemplu cu o singură linie:

D B 4 1 3 F 5 9 0 A E 7 6 8 2 C

Să-l împărțim în „componente”:

Să calculăm un coeficient folosind formula dată mai sus. Pentru a fi mai ușor de înțeles cum se face acest lucru, voi explica mai detaliat:

— luăm bitul 0 al numărului 0 (0) la intrare și bitul 0 al numărului 0 la ieșire (1) și efectuăm operația 0 XOR 1 = 1.

— luăm bitul 0 al primului număr (1) la intrare și al 0-lea bit al primului număr la ieșire (1) și efectuăm operația 1 XOR 1 = 0.

— luăm bitul 0 al numărului 2 (0) la intrare și bitul 0 al numărului 2 la ieșire (0) și efectuăm operația 0 XOR 0 = 0.

— luăm bitul 0 al numărului 3 (1) la intrare și bitul 0 al numărului 3 la ieșire (1) și efectuăm operația 1 XOR 1 = 0.

După ce am efectuat operații XOR secvențiale în această secvență, numărăm numărul tuturor valorilor diferite de zero, obținem valoarea 6. Prin urmare, P 00 = 1-(6/2 4-1) = 0,25. Deci, s-a dovedit că valoarea bitului 0 la ieșire este egală cu valoarea bitului 0 la intrare în 4 cazuri din 16;

Tabelul final de cote:

Tabelul de coeficienți va fi după cum urmează (cine nu este prea leneș poate recalcula)

Intrare
Ieșire 0 1 2 3
0 -0,25 0,00 0,00 0,00
1 0,00 1,00 0,00 0,00
2 0,00 0,00 1,00 0,00
3 0,00 0,00 0,00 -0,50

Ei bine, în acest tabel lucrurile sunt și mai rele - biții 1 și 2 din grup rămân neschimbați! Criptanalistul are loc să se întoarcă 🙂 Ținând cont de toate aceste cerințe, prin simplă căutare brute-force, s-au găsit tabele de permutare corespunzătoare teoriei specificate (până în prezent - 1276 de combinații).

09 0D 03 0E-06 02 05 08-0A 07 00 04-0C 01 0F 0B
00 05 0A 07-03 08 0F 0C-0E 0B 04 09-0D 06 01 02
06 0B 0F 00-0C 01 02 0D-08 07 09 04-05 0A 03 0E
04 0E 00 09-0B 01 0F 06-03 0D 07 0A-0C 02 08 05
04 02 08 0E-05 0F 03 09-0B 01 0D 07-0A 0C 06 00
07 03 09 0C-08 00 06 0F-0E 04 01 0A-0D 0B 02 05
06 0F 03 08-0D 04 0A 01-09 02 05 0C-00 0B 0E 07
0C 06 08 01-03 09 07 0E-0B 05 0F 02-04 0A 00 0D
04 0B 09 06-0E 01 00 0F-0A 05 03 0C-0D 02 07 08
00 0E 0F 01-07 08 09 06-04 0B 0A 05-03 0D 0C 02
0F 09 01 07-04 0A 08 06-0E 00 02 0C-05 03 0B 0D
0A 03 04 01-05 0C 0B 0E-08 06 0F 0D-07 09 00 02
0B 06 0F 01-04 0A 08 05-00 0D 0C 02-07 09 03 0E
0C 03 02 08-0D 06 0B 05-07 09 04 0F-0A 00 01 0E
02 0B 0F 04-09 00 06 0D-05 0E 01 08-0C 07 0A 03

Lista literaturii folosite.

  1. Articol de Andrey Vinokurov:

Algoritmul de criptare GOST 28147-89, utilizarea și implementarea acestuia

pentru calculatoare Platforme Intel x86.

(poate fi găsit la: http://www.enlight.ru/crypto/frame.htm).

Iată codurile sursă pentru implementarea algoritmului de criptare.

  1. Articol de Horst Feistel:

Criptografie și securitate informatică.

(poate fi găsit la aceeași adresă ca articolul precedent)

  1. Ross N. Williams:

Un ghid de bază pentru algoritmii de detectare a erorilor CRC

Postat pe site www.wasm.ru.

Mulțumiri

Aș dori să-mi exprim recunoștința tuturor vizitatorilor forumului www.wasm.ru. Dar aș vrea să-i mulțumesc în special lui ChS, care în prezent este cunoscut sub numele de SteelRat, m-a ajutat să înțeleg lucruri pe care probabil nu le-aș fi înțeles niciodată, precum și a ajutat la scrierea paragrafului: „ Cerințe de informații cheie„, partea principală a acestui paragraf a fost scrisă de el. De asemenea, îi sunt profund recunoscător angajatului KSTU. UN. Tupolev Anikin Igor Vyacheslavovich și ar fi un păcat să nu mai vorbim de Chris Kaspersky pentru ceea ce este și de Volodya / wasm.ru pentru instrucțiunile sale. Oh, și am primit de la el :). De asemenea, vreau să menționez Sega-Zero / Callipso pentru că mi-au adus niște junglă matematică în minte.

Asta este probabil tot ce aș vrea să vă spun.

Aș fi recunoscător pentru critici sau întrebări legate de acest articol sau doar sfaturi. Datele mele de contact: [email protected], ICQ – 337310594.

Salutări, Evil's Interrupt.

P.S.: Nu am încercat să depășesc pe nimeni cu acest articol. A fost scris cu intenția de a facilita studiul GOST, iar dacă aveți dificultăți, asta nu înseamnă că eu sunt de vină pentru asta. Fii rezonabil și ai răbdare, toate cele bune pentru tine!

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ă subblocuri 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ă cu 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 este efectuată de un anumit număr de ori („runde”): 16 sau 32, în funcție de modul de funcționare al algoritmului. În fiecare rundă se efectuează două operații.

Figura 1. Schema algoritmului GOST 28147-89.

Primul este cheiatul. Conținutul subblocului N1 este adăugat modulo 2 cu 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. Î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.

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 cu 11 biți spre stânga.

Substituțiile de tabel (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 înregistrate î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 blocul 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, oferă patru moduri de funcționare: înlocuire simplă, gamma, gamma cu feedback și generarea de atașamente de imitație. Ei folosesc aceeași transformare de criptare descrisă mai sus, dar deoarece scopul modurilor este diferit, această transformare se realizează diferit în fiecare dintre ele.

Î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 corespunzător al textului original). Dacă există mai multe blocuri identice de text original (plat), blocurile de text cifrat corespunzătoare vor fi, de asemenea, identice, ceea ce oferă Informatii utile pentru un criptoanalist care încearcă să spargă un cifr. Prin urmare, acest mod este utilizat în principal pentru criptarea cheilor de criptare în sine (se implementează foarte des schemele cu mai multe chei, în care, din mai multe motive, cheile sunt criptate una pe cealaltă). Alte două moduri de operare sunt destinate criptării informațiilor în sine - gamma și gamma cu feedback.

În modul gamma, fiecare bloc de text simplu este adăugat bit cu bit modulo 2 la un bloc gamma cifru de 64 de biți. O gamma cifră este o secvență specială care se obține ca urmare a anumitor operații cu registrele N1 și N2.

  • 1. Umplerea lor inițială este scrisă în registrele N1 și N2 - o valoare de 64 de biți numită mesaj de sincronizare.
  • 2. Conținutul registrelor N1 și N2 (în acest caz, mesajele de sincronizare) este criptat î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 al cifrului (în acest caz, N1 și N2 formează primul bloc gamma).

Dacă este necesar următorul bloc gamma (adică, criptarea sau decriptarea trebuie să continue), se revine la pasul 2.

Pentru decriptare, gamma este generată într-o manieră similară, iar apoi textul cifrat și biții gamma sunt din nou XOR. Întrucât această operație este reversibilă, în cazul unei scale corect dezvoltate, se obține textul original (Tabelul 1).

Tabelul 1. Criptare și decriptare în modul gamma

Pentru a dezvolta cifrul necesar pentru decriptarea gamma, utilizatorul care decriptează criptograma trebuie să aibă aceeași cheie și aceeași valoare a mesajului de sincronizare care au fost folosite la criptarea informațiilor. În caz contrar, nu se va putea obține textul original din cel criptat.

În majoritatea implementărilor algoritmului GOST 28147-89, mesajul de sincronizare nu este secret, cu toate acestea, 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 a algoritmului (256 de biți) este mărită cu alți 64 de biți ai mesajului secret de sincronizare, care poate fi considerat și ca element cheie.

În modul gamma în buclă închisă, pentru a umple registrele N1 și N2, pornind de la al 2-lea bloc, nu este folosit blocul gamma anterior, ci rezultatul criptării blocului de text simplu anterior (Figura 2). Primul bloc din acest mod este generat complet similar cu cel anterior.

Figura 2. Generarea unui gamma de cifră în modul gamma în buclă închisă.

Când se consideră modul de generare al prefixelor de imitație, este necesar să se definească conceptul de subiect al generației. Un prefix este o sumă de control criptografică calculată folosind o cheie de criptare și concepută pentru a verifica integritatea mesajelor. La generarea unui prefix de imitație, se efectuează următoarele operații: primul bloc de 64 de biți al matricei de informații, pentru care se calculează prefixul de imitație, este scris în registrele N1 și N2 și criptat în modul de înlocuire simplă redusă ( sunt efectuate primele 16 runde din 32). Rezultatul rezultat este însumat modulo 2 cu următorul bloc de informații și rezultatul este stocat în N1 și N2.

Ciclul se repetă până la ultimul bloc de informații. Conținutul rezultat pe 64 de biți al registrelor N1 și N2 sau o parte a acestora ca urmare a acestor transformări se numește prefix de imitație. Mărimea prefixului de imitație este selectată în funcție de fiabilitatea necesară a mesajelor: cu lungimea prefixului de imitație r biți, probabilitatea ca o schimbare a mesajului să treacă neobservată este de 2-r. Se folosește prefixul de imitație de biți, adică jumătate din conținutul registrelor. Acest lucru este suficient, deoarece, ca orice sumă de control, atașamentul 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, sunt utilizate alte 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 mijloace suplimentare Control. Este calculat pentru textul simplu atunci când orice informație este criptată și este trimisă împreună cu textul cifrat. După decriptare, o nouă valoare a prefixului de imitație este calculată și comparată cu cea trimisă. Dacă valorile nu se potrivesc, înseamnă că textul cifrat a fost corupt î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 utilizați un mesaj de sincronizare secretă, lungimea efectivă a cheii crește la 320 de biți, iar criptarea tabelului de înlocuire adaugă biți suplimentari. În plus, puterea criptografică depinde de numărul de runde de transformare, 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 (generarea de imitații) și același ciclu de criptare în toți cei patru algoritmi GOST.

Algoritmul de criptare GOST 28147-89, utilizarea acestuia și implementarea software-ului pentru computere pe platforma Intel x86.


Andrei Vinokurov

Descrierea algoritmului.

Termeni și denumiri.

O descriere a standardului de criptare al Federației Ruse este conținută într-un document foarte interesant intitulat „Algoritmul de conversie criptografică GOST 28147-89”. Faptul că în numele său, în locul termenului „criptare”, apare un concept mai general „ conversie criptografică ”, nu este deloc întâmplătoare. În plus față de câteva proceduri de criptare strâns legate, documentul descrie un algoritm de generare imitații de inserții . Acesta din urmă nu este altceva decât o combinație de control criptografic, adică un cod generat din datele originale folosind o cheie secretă în scopul de a protectie la imitatie , sau protejarea datelor de modificări neautorizate.

La diferiți pași ai algoritmilor GOST, datele pe care aceștia operează sunt interpretate și utilizate în moduri diferite. În unele cazuri, elementele de date sunt tratate ca șiruri de biți independenți, în alte cazuri ca un întreg fără semn, în altele ca un element complex structurat format din mai multe elemente mai simple. Prin urmare, pentru a evita confuzia, este important să cădeți de acord asupra notației utilizate.

Elementele de date din acest articol sunt desemnate cu majuscule cu un stil italic (de exemplu, X). Prin | X| denotă dimensiunea elementului de date Xîn biți. Astfel, dacă interpretăm elementul de date X Ca număr întreg nenegativ, putem scrie următoarea inegalitate:.

Dacă un element de date este format din mai multe elemente mai mici, atunci acest fapt este indicat după cum urmează: X=(X 0 ,X 1 ,…,Xn –1)=X 0 ||X 1 ||…||Xn-1 . Procesul de combinare a mai multor elemente de date într-unul este numit concatenare date și este indicată prin simbolul „||”. Desigur, pentru dimensiunile elementelor de date trebuie îndeplinită următoarea relație: | X|=|X 0 |+|X 1 |+…+|Xn-1 |. La specificarea elementelor de date complexe și a operațiunii de concatenare, elementele de date constitutive sunt listate în ordine crescătoare de prioritate. Cu alte cuvinte, dacă interpretăm elementul compus și toate elementele sale de date ca numere întregi fără semn, atunci putem scrie următoarea egalitate:

În algoritm, un element de date poate fi interpretat ca o matrice de biți individuali, caz în care biții sunt notați cu aceeași literă ca și matricea, dar într-o versiune cu litere mici, așa cum se arată în exemplul următor:

X=(X 0 ,X 1 ,…,x n –1)=X 0 +2 1 · X 1 +…+2 n-1 · x n –1 .

Astfel, dacă ați observat, așa-numitul GOST a fost adoptat. numerotarea „little-endian” a cifrelor, adică În cuvintele de date pe mai mulți biți, biții individuali și grupurile de biți cu numere mai mici sunt mai puțin semnificative. Acest lucru este afirmat direct în paragraful 1.3 al standardului: „La adăugarea și deplasarea ciclică a vectorilor binari, cei mai semnificativi biți sunt considerați a fi biții unităților cu numere mari.” În plus, clauzele standardului 1.4, 2.1.1 și altele necesită începerea umplerii registrelor de stocare ale dispozitivului virtual de criptare cu date de la cele mai mici, de exemplu. categorii mai putin semnificative. Exact aceeași ordine de numerotare este adoptată în arhitectura microprocesorului Intel x86, motiv pentru care atunci când implementați un cifr în software pe această arhitectură, nu sunt necesare permutări suplimentare de biți în cuvintele de date.

Dacă pe elementele de date se efectuează o operație care are sens logic, atunci se presupune că această operațiune se realizează pe biţii corespunzători ai elementelor. Cu alte cuvinte A B=(A 0 b 0 ,A 1 b 1 ,…,un n –1 b n–1), unde n=|A|=|B|, iar simbolul „ ” denotă o operație logică binară arbitrară; de regulă, aceasta înseamnă o intervenție chirurgicală exclusiv sau , care este și operația de însumare modulo 2:

Logica construirii unui cifr și structura informațiilor cheie GOST.

Dacă studiați cu atenție GOST 28147–89 original, veți observa că acesta conține o descriere a algoritmilor la mai multe niveluri. În partea de sus există algoritmi practici menționați să cripteze matricele de date și să dezvolte inserții imitative pentru acestea. Toate se bazează pe trei algoritmi de nivel scăzut, numiți în textul GOST cicluri . Acești algoritmi fundamentali sunt denumiți în acest articol ca cicluri de bază pentru a le distinge de toate celelalte cicluri. Au următoarele nume și simboluri, acestea din urmă sunt date între paranteze și semnificația lor va fi explicată mai târziu:

  • ciclu de criptare (32-З);
  • ciclu de decriptare (32-P);
  • ciclul de producere a insertului de imitație (16-З).

La rândul său, fiecare dintre ciclurile de bază este o repetare multiplă a unei singure proceduri, solicitată mai departe în această lucrare. pasul principal al conversiei cripto .

Astfel, pentru a înțelege GOST, trebuie să înțelegeți următoarele trei lucruri:

  • ce s-a întâmplat pas de bază conversii criptografice;
  • cum se formează ciclurile de bază din etapele de bază;
  • de la trei cicluri de bază se adună toți algoritmii GOST practici.

Înainte de a trece la studiul acestor probleme, ar trebui să vorbim despre informațiile cheie utilizate de algoritmii GOST. În conformitate cu principiul lui Kirchhoff, care este satisfăcut de toate cifrurile moderne cunoscute publicului larg, secretul acestuia este cel care asigură secretul mesajului criptat. În GOST, informațiile cheie constau din două structuri de date. Pe lângă real cheie , necesar pentru toate cifrurile, mai conține tabel de înlocuire . Mai jos sunt principalele caracteristici ale structurilor cheie ale GOST.

Pasul principal al conversiei cripto.

Pasul de bază al conversiei criptografice este în esență o declarație care specifică conversia unui bloc de date pe 64 de biți. Parametru suplimentar Acest operator este un bloc de 32 de biți, care este folosit ca element cheie. Diagrama algoritmului pasului principal este prezentată în Figura 1.


Figura 1. Schema etapei principale de cripto-conversie a algoritmului GOST 28147-89.

Mai jos sunt explicații ale algoritmului pasului principal:

Pasul 0

  • N– un bloc de date pe 64 de biți convertit, în timpul execuției pasului său minor ( N 1) și senior ( N 2) părțile sunt tratate ca numere întregi fără semn pe 32 de biți. Astfel, putem scrie N=(N 1 ,N 2).
  • X– element cheie pe 32 de biți;

Pasul 1

Adaos cu o cheie. Jumătatea inferioară a blocului convertit este adăugată modulo 2 32 cu elementul cheie utilizat la pas, rezultatul este transferat la pasul următor;

Pasul 2

Înlocuire bloc. Valoarea de 32 de biți obținută în pasul anterior este interpretată ca o matrice de opt blocuri de cod de 4 biți: S=(S 0 , S 1 , S 2 , S 3 , S 4 , S 5 , S 6 , S 7), și S 0 îi conține pe cei 4 mai tineri și S 7 – 4 biți cei mai semnificativi S.

Apoi, valoarea fiecăruia dintre cele opt blocuri este înlocuită cu unul nou, care este selectat din tabelul de înlocuire după cum urmează: valoarea blocului S i schimbări la S i- al-lea element în ordine (numerotare de la zero) i- acel nod de înlocuire (adică i-linia a tabelului de înlocuire, numerotarea tot de la zero). Cu alte cuvinte, este selectat ca înlocuitor un element din tabelul de înlocuire cu un număr de rând egal cu numărul blocului înlocuit și un număr de coloană egal cu valoarea blocului înlocuit ca număr întreg nenegativ pe 4 biți pentru valoarea blocului. Acest lucru face ca dimensiunea tabelului de înlocuire să fie clară: numărul de rânduri din acesta este egal cu numărul de elemente de 4 biți dintr-un bloc de date de 32 de biți, adică opt, iar numărul de coloane este egal cu numărul de valori diferite ale unui bloc de date pe 4 biți, despre care se știe că este 2 4, șaisprezece.

Pasul 3

Rotiți 11 biți spre stânga. Rezultatul pasului anterior este deplasat ciclic cu 11 biți către cei mai semnificativi biți și este transmis la pasul următor. În diagrama algoritmului, simbolul indică funcția de deplasare ciclică a argumentului său cu 11 biți la stânga, adică. spre rangurile superioare.

Pasul 4

Adăugarea pe biți: Valoarea obținută în pasul 3 este adăugată pe biți modulo 2, jumătatea superioară a blocului fiind convertită.

Pasul 5

Schimbarea de-a lungul lanțului: partea inferioară a blocului convertit este deplasată în locul celui mai vechi, iar rezultatul pasului anterior este plasat în locul său.

Pasul 6

Valoarea rezultată a blocului convertit este returnată ca rezultat al executării algoritmului pasului principal de conversie cripto.

Cicluri de bază ale transformărilor criptografice.

După cum sa menționat la începutul acestui articol, GOST aparține clasei de cifruri bloc, adică unitatea de procesare a informațiilor din ea este un bloc de date. Prin urmare, este destul de logic să ne așteptăm că va defini algoritmi pentru transformările criptografice, adică pentru criptarea, decriptarea și „contabilitatea” pentru o combinație de control a unui bloc de date. Acești algoritmi sunt numiți cicluri de bază GOST, care subliniază importanța lor fundamentală pentru construcția acestui cifr.

Buclele de bază sunt construite din pașii principali transformarea criptografică discutată în secțiunea anterioară. În timpul etapei principale, este utilizat doar un element cheie de 32 de biți, în timp ce cheia GOST conține opt astfel de elemente. Prin urmare, pentru ca cheia să fie utilizată pe deplin, fiecare dintre buclele de bază trebuie să execute în mod repetat pasul principal cu diferitele sale elemente. În același timp, pare destul de natural ca în fiecare ciclu de bază toate elementele cheie să fie utilizate de același număr de ori din motive de putere a cifrului, acest număr ar trebui să fie mai mult de unul;

Toate ipotezele făcute mai sus, bazate pur și simplu pe bunul simț, s-au dovedit a fi corecte. Buclele de bază constau în execuții repetate pasul principal folosind elemente cheie diferite și diferă între ele doar prin numărul de repetări ale pașilor și ordinea în care sunt utilizate elementele cheie. Mai jos este această ordine pentru diferite cicluri.

Ciclul de criptare 32-З:

K 0 ,K 1 ,K 2 ,K 3 ,K 4 ,K 5 ,K 6 ,K 7 ,K 0 ,K 1 ,K 2 ,K 3 ,K 4 ,K 5 ,K 6 ,K 7 ,K 0 ,K 1 ,K 2 ,K 3 ,K 4 ,K 5 ,K 6 ,K 7 ,K 7 ,K 6 ,K 5 ,K 4 ,K 3 ,K 2 ,K 1 ,K 0 .


Figura 2a. Schema ciclului de criptare 32-З

Ciclul de decriptare 32-P:

K 0 ,K 1 ,K 2 ,K 3 ,K 4 ,K 5 ,K 6 ,K 7 ,K 7 ,K 6 ,K 5 ,K 4 ,K 3 ,K 2 ,K 1 ,K 0 ,K 7 ,K 6 ,K 5 ,K 4 ,K 3 ,K 2 ,K 1 ,K 0 ,K 7 ,K 6 ,K 5 ,K 4 ,K 3 ,K 2 ,K 1 ,K 0 .


Figura 2b. Schema ciclului de decriptare 32-P

Ciclul de producție al insertului de imitație 16-Z:

K 0 ,K 1 ,K 2 ,K 3 ,K 4 ,K 5 ,K 6 ,K 7 ,K 0 ,K 1 ,K 2 ,K 3 ,K 4 ,K 5 ,K 6 ,K 7 .


Figura 2c. Schema ciclului de producție al insertului de imitație 16-Z.

Fiecare dintre cicluri are propria sa denumire alfanumerica corespunzătoare modelului " n-X", unde primul element al denumirii ( n), specifică numărul de repetări ale pasului principal din ciclu și al doilea element de desemnare ( X), litera, specifică ordinea de criptare („Z”) sau de decriptare („P”) în utilizarea elementelor cheie. Această comandă necesită explicații suplimentare:

Ciclul de decriptare trebuie să fie inversul ciclului de criptare, adică aplicarea secvențială a acestor două cicluri la un bloc arbitrar trebuie să producă în cele din urmă blocul original, care se reflectă în următoarea relație: C 32-Р ( C 32-З ( T))=T, Unde T– bloc de date arbitrar pe 64 de biți, C X ( T) – rezultatul execuției buclei X deasupra blocului de date T. Pentru a îndeplini această condiție pentru algoritmi similari cu GOST, este necesar și suficient ca ordinea de utilizare a elementelor cheie de către ciclurile corespunzătoare să fie reciproc inversă. Este ușor de verificat validitatea condiției scrise pentru cazul în cauză, comparând secvențele de mai sus pentru ciclurile 32-З și 32-Р. Din cele de mai sus rezultă o consecință interesantă: proprietatea unui ciclu de a fi inversă unui alt ciclu este reciprocă, adică ciclul 32-Z este invers cu ciclul 32-P. Cu alte cuvinte, criptarea unui bloc de date poate fi efectuată teoretic folosind un ciclu de decriptare, caz în care decriptarea unui bloc de date trebuie efectuată printr-un ciclu de criptare. Dintre cele două cicluri reciproc inverse, oricare poate fi folosit pentru criptare, apoi al doilea trebuie utilizat pentru a decripta datele, cu toate acestea, standardul GOST 28147-89 atribuie roluri ciclurilor și nu oferă utilizatorului dreptul de a alege în acest sens. materie.

Ciclul de producere a unei inserții imitative este pe jumătate cât ciclurile de criptare, ordinea de utilizare a elementelor cheie în acesta este aceeași ca în primii 16 pași ai ciclului de criptare, ceea ce este ușor de verificat luând în considerare secvențele de mai sus, prin urmare această ordine în desemnarea ciclului este codificată cu aceeași literă „Z”.

Schemele ciclurilor de bază sunt prezentate în figurile 2a-c. Fiecare dintre ele ia drept argument și returnează ca rezultat un bloc de date pe 64 de biți, indicat în diagrame N. Simbol Pas ( N,X) denotă executarea etapei principale de cripto-transformare pentru un bloc de date N folosind elementul cheie X. Mai există o diferență între ciclurile de calcul de criptare și inserție imitativă, nemenționate mai sus: la sfârșitul ciclurilor de criptare de bază, părțile superioare și inferioare ale blocului rezultat sunt schimbate, acest lucru este necesar pentru reversibilitatea lor reciprocă.

Moduri de criptare de bază.

GOST 28147-89 oferă următoarele trei moduri de criptare a datelor:

  • înlocuire simplă,
  • jocuri de noroc,
  • jocuri de noroc cu feedback,

și un mod suplimentar pentru generarea de inserții de imitație.

În oricare dintre aceste moduri, datele sunt procesate în blocuri de 64 de biți, în care matricea este împărțită și supusă transformării criptografice, motiv pentru care GOST se referă la cifrurile bloc. Cu toate acestea, în două moduri gamma este posibil să se proceseze un bloc incomplet de date cu o dimensiune mai mică de 8 octeți, ceea ce este esențial atunci când se criptează matrice de date de dimensiune arbitrară, care poate să nu fie un multiplu de 8 octeți.

Înainte de a trece la o discuție despre algoritmi specifici de transformare criptografică, este necesar să clarificăm notația folosită în diagramele din următoarele secțiuni:

T O, T w – matrice de date deschise și respectiv criptate;

, – i- blocuri secvențiale de 64 de biți de date deschise și respectiv criptate: , , ultimul bloc poate fi incomplet: ;

n– numărul de blocuri de 64 de biți din matricea de date;

C X – funcția de conversie a unui bloc de date pe 64 de biți utilizând algoritmul ciclului de bază „X”.

Acum vom descrie principalele moduri de criptare:

Înlocuire ușoară.

Criptarea în acest mod constă în aplicarea ciclului 32-З la blocurile de date deschise, decriptarea - ciclul 32-Р la blocurile de date criptate. Acesta este cel mai simplu dintre moduri; blocurile de date pe 64 de biți sunt procesate independent unul de celălalt. Schemele algoritmilor de criptare și decriptare în modul de înlocuire simplă sunt prezentate în figurile 3a și, respectiv, sunt banale și nu necesită comentarii.


Desen. 3a. Algoritm de criptare a datelor în modul de înlocuire simplă


Desen. 3b. Algoritm de decriptare a datelor în modul de înlocuire simplă

Dimensiunea matricei de date deschise sau criptate, supuse criptării sau, respectiv, decriptării, trebuie să fie un multiplu de 64 de biți: | T o |=| T w |=64· n , după efectuarea operației, dimensiunea matricei de date rezultate nu se modifică.

Modul de criptare de înlocuire simplă are următoarele caracteristici:

  • Deoarece blocurile de date sunt criptate independent unul de celălalt și poziția lor în matricea de date, criptarea a două blocuri de text simplu identice are ca rezultat blocuri de text cifrat identice și invers. Proprietatea menționată va permite criptoanalistului să facă o concluzie despre identitatea blocurilor de date originale dacă întâlnește blocuri identice în matricea de date criptate, ceea ce este inacceptabil pentru un cifru serios.
  • Dacă lungimea matricei de date criptate nu este un multiplu de 8 octeți sau 64 de biți, apare problema cum și cum să se completeze ultimul bloc de date incomplet al matricei la cei 64 de biți complet. Această sarcină nu este atât de simplă pe cât pare la prima vedere. Soluții evidente precum „suplimentarea unui bloc incomplet cu zero biți” sau, mai general, „suplimentarea unui bloc incomplet cu o combinație fixă ​​de zero și un biți” pot, în anumite condiții, să ofere criptoanalistului posibilitatea de a utiliza metode de forță brută pentru a determina conținutul acestui bloc foarte incomplet, iar acest fapt înseamnă o scădere a cifrului de securitate. În plus, lungimea textului cifrat se va modifica, crescând la cel mai apropiat multiplu întreg de 64 de biți, ceea ce este adesea nedorit.

La prima vedere, caracteristicile enumerate mai sus fac aproape imposibilă utilizarea modului de înlocuire simplu, deoarece poate fi folosit doar pentru a cripta matrice de date cu o dimensiune care este un multiplu de 64 de biți și nu conține blocuri repetate de 64 de biți. Se pare că pentru orice date reale este imposibil să se garanteze îndeplinirea acestor condiții. Acest lucru este aproape adevărat, dar există o excepție foarte importantă: amintiți-vă că dimensiunea cheii este de 32 de octeți, iar dimensiunea tabelului de înlocuire este de 64 de octeți. În plus, prezența blocurilor repetate de 8 octeți într-o cheie sau un tabel de înlocuire va indica calitatea lor foarte slabă, astfel încât o astfel de repetiție nu poate exista în elementele cheie reale. Astfel, am aflat că modul de înlocuire simplu este destul de potrivit pentru criptarea informațiilor cheie, mai ales că alte moduri sunt mai puțin convenabile în acest scop, deoarece necesită prezența unui element de date de sincronizare suplimentar - un mesaj de sincronizare (vezi secțiunea următoare) . GOST prescrie utilizarea modului de înlocuire simplu exclusiv pentru criptarea datelor cheie.

Gumarea.

Cum poți scăpa de deficiențele modului simplu de înlocuire? Pentru a face acest lucru, este necesar să faceți posibilă criptarea blocurilor cu o dimensiune mai mică de 64 de biți și să vă asigurați că blocul de text cifrat depinde de numărul său, cu alte cuvinte, randomizare proces de criptare. În GOST acest lucru se realizează în două moduri diferite în două moduri de criptare, oferind jocuri de noroc . Gumarea - aceasta este impunerea (înlăturarea) unei scale criptografice pe date deschise (criptate), adică o secvență de elemente de date generate folosind un algoritm criptografic pentru a obține date criptate (deschise). Pentru a aplica gamma în timpul criptării și a-l elimina în timpul decriptării, trebuie utilizate operații binare inverse reciproc, de exemplu, adunarea și scăderea modulo 2 64 pentru blocuri de date pe 64 de biți. În GOST, în acest scop, este utilizată operația de adăugare pe biți modulo 2, deoarece este inversă și, în plus, este cel mai simplu implementată în hardware. Gamma rezolvă ambele probleme menționate: în primul rând, toate elementele gamma sunt diferite pentru matricele criptate reale și, prin urmare, rezultatul criptării chiar și a două blocuri identice într-o matrice de date va fi diferit. În al doilea rând, deși elementele gamma sunt generate în porțiuni egale de 64 de biți, poate fi utilizată o parte a unui astfel de bloc cu o dimensiune egală cu dimensiunea blocului criptat.

Acum să trecem direct la descrierea modului gamma. Gama pentru acest mod se obține astfel: cu ajutorul unor generatoare algoritmice de secvențe de numere recurente (RNGN), sunt generate blocuri de date pe 64 de biți, care sunt apoi convertite folosind ciclul 32-3, adică criptate în modul simplu. modul de înlocuire, rezultând blocuri gamma. Datorită faptului că aplicarea și eliminarea gamma sunt efectuate folosind aceeași exclusivitate sau operație pe biți, algoritmii de criptare și decriptare în modul gamma sunt identici, schema lor generală este prezentată în Figura 4.

RGPG utilizat pentru generarea scalei este o funcție recurentă: – elemente ale secvenței recurente, f– funcția de transformare. În consecință, se pune inevitabil întrebarea despre inițializarea acestuia, adică despre elementul S, și se numește în criptografie trimitere sincronizată și în GOST-ul nostru – umplerea inițială unul dintre registrele codificatorului. Din anumite motive, dezvoltatorii GOST au decis să folosească nu mesajul de sincronizare direct pentru a inițializa RGFC, ci rezultatul conversiei acestuia în conformitate cu ciclul 32-Z: . Secvența elementelor generate de RGPC depinde în întregime de umplerea sa inițială, adică elementele acestei secvențe sunt o funcție de numărul lor și de umplerea inițială a RGPC: unde f i(X)=f(f i –1 (X)), f 0 (X)=X. Luând în considerare transformarea folosind algoritmul de înlocuire simplu, se adaugă și o dependență de cheie:

Unde Г ii-al-lea element al scalei, K- cheie.

Astfel, secvența elementelor gamma care trebuie utilizate în modul gamma este determinată în mod unic de datele cheie și de mesajul de sincronizare. Desigur, pentru ca procedura de criptare să fie reversibilă, același mesaj de sincronizare trebuie utilizat în procesele de criptare și decriptare. Din cerința de unicitate a gamma, nerespectarea acesteia duce la o scădere catastrofală a puterii cifrului, rezultă că, pentru a cripta două matrice de date diferite pe aceeași cheie, este necesar să se asigure utilizarea diferite mesaje de sincronizare. Acest lucru duce la necesitatea stocării sau transmiterii mesajului de sincronizare de-a lungul canalelor de comunicație împreună cu datele criptate, deși în unele cazuri speciale poate fi predeterminat sau calculat într-un mod special dacă este exclusă criptarea a două matrice cu aceeași cheie.

Acum să aruncăm o privire mai atentă la RGPC-ul folosit în GOST pentru a genera elemente din gama. În primul rând, trebuie remarcat faptul că nu este necesară furnizarea de caracteristici statistice ale secvenței de numere generate. RGHR a fost proiectat de dezvoltatorii GOST pe baza necesității de a îndeplini următoarele condiții:

  • perioada de repetare a secvenței de numere generate de RGPC nu trebuie să difere foarte mult (în termeni procentuali) de valoarea maximă posibilă pentru o dimensiune de bloc dată de 2 64;
  • valorile adiacente produse de RGPG trebuie să difere între ele în fiecare octet, altfel sarcina criptoanalistului va fi simplificată;
  • RGPC ar trebui să fie destul de ușor de implementat atât în ​​hardware cât și în software pe cele mai comune tipuri de procesoare, dintre care majoritatea sunt cunoscute a fi pe 32 de biți.

Pe baza principiilor enumerate, creatorii GOST au conceput un RGHR de mare succes, care are următoarele caracteristici:

Unde C 0 =1010101 16 ;

Unde C 1 =1010104 16 ;

Indicele dintr-un număr indică sistemul său numeric, astfel încât constantele utilizate în acest pas sunt scrise în hexazecimal.

A doua expresie are nevoie de comentarii, deoarece textul GOST conține altceva: , cu aceeași valoare a constantei C 1 . Dar mai departe în textul standardului este dat un comentariu că, se dovedește, în cadrul operației de a lua restul modulo 2 32 –1 Acolo nu este înțeles la fel ca în matematică. Diferența este că conform GOST (2 32 –1) mod(2 32 –1)=(2 32 –1), nu 0. De fapt, acest lucru simplifică implementarea formulei, iar expresia corectă din punct de vedere matematic este dată mai sus.

  • perioada de repetare a secvenței pentru partea inferioară este 2 32, pentru partea mai veche 2 32 –1, pentru întreaga secvență perioada este 2 32 (2 32 –1), dovada acestui fapt este foarte simplă, obțineți-o tu. Prima dintre cele două formule este implementată într-o singură comandă, a doua, în ciuda aparentei sale greoaie, în două comenzi pe toate procesoarele moderne pe 32 de biți - prima comandă efectuează adăugarea obișnuită modulo 2 32 cu stocarea bitului de transport, iar a doua comanda adaugă bitul de transport la semnificația rezultată.

Diagrama algoritmului de criptare în modul gamma este prezentată în Figura 4, mai jos sunt explicații pentru schema:


Figura 4. Algoritm pentru criptarea (decriptarea) datelor în modul gamma.

Pasul 0

Definește datele de intrare pentru pasul principal de conversie criptografică:

  • T o(w) – o matrice de date deschise (criptate) de dimensiune arbitrară, supusă unei proceduri de criptare (decriptare) în timpul procedurii, matricea este convertită în porțiuni de 64 de biți;
  • S mesaj de sincronizare , un element de date pe 64 de biți necesar pentru a inițializa generatorul gamma;

Pasul 1

Transformarea inițială a mesajului de sincronizare, efectuată pentru a-l „randomiza”, adică pentru a elimina tiparele statistice prezente în acesta, rezultatul este folosit ca umplere inițială a RGPC;

Pasul 2

Un pas al operațiunii RGPC, implementând algoritmul său recurent. În timpul acestui pas, cel mai mare ( S 1) și juniori ( S 0) părți ale secvenței de date sunt generate independent unele de altele;

Pasul 3

Gumarea. Următorul element de 64 de biți generat de RGPC este supus unei proceduri de criptare folosind ciclul 32-3, rezultatul este utilizat ca element gamma pentru a cripta (decripta) următorul bloc de date deschise (criptate) de aceeași dimensiune.

Pasul 4

Rezultatul algoritmului este o matrice de date criptate (decriptate).

Următoarele sunt caracteristicile gama ca mod de criptare:

  1. Blocurile identice dintr-o matrice de date deschise vor produce diferite blocuri de text cifrat atunci când sunt criptate, ceea ce va face posibilă ascunderea faptului identității lor.
  2. Deoarece suprapunerea gamma se realizează pe biți, criptarea unui bloc parțial de date este ușor de realizat prin criptarea biților acelui bloc parțial utilizând biții corespunzători ai blocului gamma. Astfel, pentru a cripta un bloc incomplet de 1 bit, conform standardului, ar trebui utilizat bitul cel mai puțin semnificativ din blocul gamma.
  3. Mesajul de sincronizare folosit pentru criptare trebuie să fie transmis cumva pentru a fi utilizat în decriptare. Acest lucru poate fi realizat în următoarele moduri:
  • stocarea sau transmiterea unui mesaj de sincronizare împreună cu o matrice de date criptată, ceea ce va duce la o creștere a dimensiunii matricei de date atunci când este criptată cu dimensiunea mesajului de sincronizare, adică cu 8 octeți;
  • utilizați o valoare predeterminată a mesajului de sincronizare sau generați-o sincron de către sursă și receptor conform unei anumite legi, în acest caz nu există nicio modificare a dimensiunii matricei de date transmise sau stocate;

Ambele metode se completează reciproc, iar în acele cazuri rare în care prima, cea mai comună nu funcționează, se poate folosi cea de-a doua, mai exotică. A doua metodă are mult mai puțină aplicație, deoarece este posibil să se facă un mesaj de sincronizare predeterminat numai dacă nu este criptată mai mult de o matrice de date pe un anumit set de informații cheie, ceea ce nu se întâmplă foarte des. De asemenea, nu este întotdeauna posibil să se genereze un mesaj de sincronizare sincron la sursa și destinatarul unei matrice de date, deoarece necesită o conexiune strictă la ceva din sistem. Astfel, la prima vedere, o idee bună este să folosiți numărul mesaj transmis nu este potrivit, deoarece mesajul se poate pierde și nu ajunge la destinatar, caz în care sistemele de criptare ale sursei și receptorului vor deveni desincronizate. Prin urmare, în cazul luat în considerare, nu există nicio alternativă la transmiterea mesajului de sincronizare împreună cu mesajul criptat.

Pe de altă parte, se poate aduce și exemplu invers. Să presupunem că criptarea datelor este folosită pentru a proteja informațiile de pe disc și este implementată la un nivel scăzut pentru a asigura accesul independent, datele sunt criptate pe sector; În acest caz, este imposibil să stocați mesajul de sincronizare împreună cu datele criptate, deoarece dimensiunea sectorului nu poate fi modificată, dar poate fi calculată ca o anumită funcție a numărului capului de citire a discului, a numărului pistei (cilindrului) și a numărului sectorului. pe pistă. În acest caz, mesajul de sincronizare este legat de poziția sectorului de pe disc, care este puțin probabil să se schimbe fără reformatarea discului, adică fără distrugerea datelor de pe acesta.

Modul gamma are o altă caracteristică interesantă. În acest mod, biții matricei de date sunt criptați independent unul de celălalt. Astfel, fiecare bit al textului cifrat depinde de bitul corespunzător al textului simplu și, desigur, de numărul de secvență al bitului din matrice: . Aceasta implică faptul că schimbarea unui bit de text cifrat la valoarea opusă va avea ca rezultat o modificare similară a valorii opuse a unui bit de text simplu:

unde denotă inversat în raport cu t valoarea biților ().

Această proprietate oferă atacatorului posibilitatea, prin influențarea biților de text cifrat, de a face modificări previzibile și chiar direcționate ale textului clar corespunzător obținut după decriptare, fără a deține cheia secretă. Acest lucru ilustrează faptul bine-cunoscut în criptologie că secretul și autenticitatea sunt proprietăți diferite sisteme criptografice . Cu alte cuvinte, proprietățile unui criptosistem de a oferi protecție împotriva accesului neautorizat la conținutul unui mesaj și împotriva modificărilor neautorizate ale unui mesaj sunt independente și se pot suprapune doar în anumite cazuri. Aceasta înseamnă că există algoritmi criptografici care asigură o anumită secretizare a datelor criptate și, în același timp, nu protejează în niciun fel împotriva modificărilor și invers, asigurând autenticitatea datelor și în niciun caz limitând capacitatea de familiarizare cu lor. Din acest motiv, proprietatea considerată a modului gamma nu trebuie considerată ca dezavantaj al acestuia.

Gamma cu feedback.

Acest mod este foarte asemănător cu modul gamma și diferă de acesta doar prin modul în care sunt generate elementele gamma - următorul element gamma este generat ca urmare a transformării ciclului 32-3 a blocului anterior de date criptate și pentru a cripta primul bloc al matricei de date, elementul gamma este generat ca rezultat al aceluiași ciclu de sincronizare a transformării. Acest lucru realizează înlănțuirea blocurilor - fiecare bloc de text cifrat în acest mod depinde de blocurile de text simplu corespunzătoare și anterioare. Prin urmare, acest mod este uneori numit jocuri de noroc cu blocuri interconectate . Faptul că blocurile sunt legate nu are niciun efect asupra puterii cifrului.

Diagrama algoritmilor de criptare și decriptare în modul gamma cu feedback este prezentată în Figura 5 și, datorită simplității sale, nu are nevoie de comentarii.


Figura 5. Algoritm pentru criptarea (decriptarea) datelor în modul gamma cu feedback.

Criptarea gamma în buclă închisă are aceleași caracteristici ca și criptarea gamma obișnuită, cu excepția efectului corupției textului cifrat asupra textului simplu corespunzător. Pentru comparație, să notăm funcțiile de decriptare a blocurilor pentru ambele moduri menționate:

Gumare;

Gamma cu feedback;

Dacă în modul gamma obișnuit modificările anumitor biți ai textului cifrat afectează doar biții corespunzători ai textului simplu, atunci în modul gamma de feedback imaginea este ceva mai complicată. După cum se poate vedea din ecuația corespunzătoare, atunci când se decriptează un bloc de date în modul gamma în buclă închisă, blocul de date deschis depinde de blocurile de date criptate corespunzătoare și anterioare. Prin urmare, dacă introduceți distorsiuni într-un bloc criptat, atunci după decriptare două blocuri de date deschise vor fi distorsionate - cel corespunzător și cel care îl urmează, iar distorsiunile în primul caz vor fi de aceeași natură ca și în modul gamma. , iar în al doilea caz - ca în înlocuirea ușoară. Cu alte cuvinte, în blocul corespunzător de date deschise aceiași biți vor fi corupți ca și în blocul de date criptate, iar în următorul bloc de date deschise toți biții sunt independenți unul de celălalt cu probabilitatea 1 / 2 își vor schimba valorile.

Dezvoltarea unei inserții simulate pentru matricea de date.

În secțiunile anterioare, am discutat impactul corupției datelor criptate asupra datelor simple corespunzătoare. Am stabilit că la decriptarea în modul de înlocuire simplă, blocul corespunzător de date deschise este distorsionat într-un mod imprevizibil, iar la decriptarea unui bloc în modul gamma, modificările sunt previzibile. În modul gamma în buclă închisă, două blocuri devin distorsionate, unul într-un mod previzibil și celălalt într-un mod imprevizibil. Înseamnă asta că din punct de vedere al protecției împotriva impunerii de date false, modul gamma este prost, iar modurile gamma de înlocuire simplă și feedback sunt bune? - În niciun caz. Atunci când se analizează această situație, este necesar să se țină cont de faptul că modificările imprevizibile dintr-un bloc de date decriptat pot fi detectate numai dacă aceleași date sunt redundante, iar cu cât gradul de redundanță este mai mare, cu atât este mai probabilă detectarea distorsiunii. Redundanță foarte mare apare, de exemplu, pentru textele în limbi naturale și artificiale, în acest caz faptul de distorsiune este detectat aproape inevitabil. Cu toate acestea, în alte cazuri, de exemplu, când imaginile audio digitizate comprimate sunt distorsionate, vom obține pur și simplu o imagine diferită pe care urechea noastră o poate percepe. Distorsiunea în acest caz va rămâne nedetectată, cu excepția cazului în care, desigur, există informații a priori despre natura sunetului. Concluzia aici este următoarea: deoarece capacitatea unor moduri de criptare de a detecta distorsiunile introduse în datele criptate se bazează în mod semnificativ pe prezența și gradul de redundanță a datelor criptate, această capacitate nu este o proprietate inerentă a modurilor corespunzătoare și nu poate fi considerată ca avantajul lor.

Pentru a rezolva problema detectării distorsiunilor într-o matrice de date criptate cu o probabilitate dată, GOST prevede un mod suplimentar de transformare criptografică - dezvoltarea inserției imitative. Inserarea de imitație este o combinație de control care depinde de datele deschise și de informațiile cheii secrete. Scopul utilizării inserției imitative este de a detecta toate modificările accidentale sau intenționate în matricea de informații. Problema descrisă în paragraful anterior poate fi rezolvată cu succes prin adăugarea de inserții imitative la datele criptate. Pentru un potențial atacator, următoarele două sarcini sunt aproape imposibil de rezolvat dacă nu are cheia:

  • calculul inserției imitative pentru o gamă deschisă dată de informații;
  • selectarea datelor deschise pentru o anumită inserție de simulare;

Diagrama algoritmului pentru dezvoltarea unei inserții simulate este prezentată în Figura 6.


Figura 6. Algoritm pentru dezvoltarea unei inserții simulate pentru o matrice de date.

O parte a blocului primit la ieșire este luată ca o inserție simulată, de obicei cei 32 de biți cei mai puțin semnificativi. Atunci când alegeți dimensiunea unei inserții false, trebuie să țineți cont de faptul că probabilitatea de a impune cu succes date false este egală cu 2 –| eu | pentru o încercare de selecție, dacă atacatorul nu are mai mult de metoda eficienta selecție decât simpla ghicire. Când utilizați o inserție simulată pe 32 de biți, această probabilitate este egală cu

Discuție despre algoritmii criptografici GOST.

Puterea criptografică a GOST.

Atunci când alegeți un algoritm criptografic pentru utilizare într-o anumită dezvoltare, unul dintre factorii determinanți este puterea acestuia, adică rezistența la încercările adversarului de a-l dezvălui. Întrebarea puterii unui cifr, la o examinare mai atentă, se rezumă la două întrebări interdependente:

  • Este posibil să spargi acest cifr?
  • dacă da, cât de greu este de făcut practic;

Cifrele care nu pot fi sparte deloc sunt numite absolut sau teoretic puternice. Existența unor astfel de cifruri este dovedită de teorema lui Shannon, dar prețul acestei forțe este nevoia de a folosi o cheie pentru a cripta fiecare mesaj care nu este mai mică ca dimensiune decât mesajul în sine. În toate cazurile, cu excepția unui număr de cazuri speciale, acest preț este excesiv, așa că în practică se folosesc în principal cifrurile care nu sunt absolut sigure. Astfel, cele mai comune scheme de criptare pot fi rupte într-un timp finit, sau, mai precis, într-un număr finit de pași, fiecare dintre acestea fiind o operațiune asupra numerelor. Pentru ei, cel mai important concept este persistența practică, care exprimă dificultatea practică a descoperirii lor. O măsură cantitativă a acestei dificultăți poate fi numărul de operații aritmetice și logice elementare care trebuie efectuate pentru a deschide cifrul, adică pentru a determina textul clar corespunzător pentru un anumit text cifrat cu o probabilitate nu mai mică decât o valoare dată. În același timp, pe lângă matricea de date decriptate, criptoanalistul poate avea blocuri de date deschise și date criptate corespunzătoare sau chiar posibilitatea de a obține date criptate corespunzătoare pentru orice date deschise pe care le alege - în funcție de cele enumerate și de multe altele nespecificate condiții, se disting tipuri separate de criptoanaliza.

Toate criptosistemele moderne sunt construite pe principiul Kirchhoff, adică secretul mesajelor criptate este determinat de secretul cheii. Aceasta înseamnă că, chiar dacă algoritmul de criptare în sine este cunoscut de criptoanalist, acesta, cu toate acestea, nu este capabil să decripteze mesajul dacă nu are cheia corespunzătoare. Un cifr este considerat bine proiectat dacă nu există nicio modalitate de a-l sparge mai eficient decât prin forța brută pe întreg spațiul cheie, de exemplu. pe toate valori posibile cheie GOST corespunde probabil acestui principiu - de-a lungul anilor de cercetare intensivă, nu a fost propusă o singură metodă eficientă a criptoanalizei sale. În ceea ce privește puterea, este cu multe ordine de mărime superior standardului de criptare american anterior, DES.

GOST folosește o cheie de 256 de biți, iar volumul spațiului de cheie este de 2.256. Niciunul dintre dispozitivele electronice existente în prezent sau care se preconizează a fi implementat în viitorul apropiat nu poate fi folosit pentru a ridica o cheie într-un timp mai mic de multe sute de ani. Această valoare a devenit standardul de facto pentru dimensiunea cheii pentru criptoalgoritmii simetrici, așa că nou standard Criptarea SUA o acceptă și ele. Fostul standard american, DES, cu dimensiunea sa reală a cheii de 56 de biți și volumul spațiului de cheie de numai 256, nu mai este suficient de stabil în lumina capacităților instrumentelor de calcul moderne. Acest lucru a fost demonstrat la sfârșitul anilor 90 prin mai multe încercări reușite de forță brută de a sparge DES. În plus, DES a fost susceptibil la tehnici speciale de criptoanaliza, cum ar fi diferențială și liniară. În acest sens, DES poate fi de interes de cercetare sau științific mai degrabă decât de interes practic. În 1998, slăbiciunea sa criptografică a fost recunoscută oficial - Institutul Național de Standarde din SUA a recomandat utilizarea criptării triple DES. Și la sfârșitul anului 2001, un nou standard de criptare din SUA, AES, a fost aprobat oficial, construit pe principii diferite și lipsit de deficiențele predecesorului său.

Note despre arhitectura GOST.

Este bine cunoscut faptul că standardul de criptare intern este un reprezentant al unei întregi familii de cifruri construite pe aceleași principii. Cea mai faimoasă „rudă” a sa este fostul standard de criptare american, algoritmul DES. Toate aceste cifruri, precum GOST, conțin algoritmi pe trei niveluri. La bază există întotdeauna un anumit „pas de bază”, pe baza căruia „ciclurile de bază” sunt construite într-un mod similar, iar pe baza lor se construiesc proceduri practice de criptare și dezvoltarea de inserții imitative. Astfel, specificul fiecăruia dintre cifrurile acestei familii constă tocmai în pasul său principal, sau mai degrabă chiar în partea sa. Deși arhitectura cifrurilor clasice în bloc, la care se referă GOST, depășește cu mult domeniul de aplicare al acestui articol, merită totuși să spunem câteva cuvinte despre aceasta.

Algoritmii pentru „principalii pași ai cripto-transformării” pentru cifruri precum GOST sunt construiți într-un mod identic, iar această arhitectură se numește rețeaua Feistel echilibrată (rețeaua Feistel echilibrată) după numele celui care a propus-o prima dată. Schema de conversie a datelor pe un ciclu sau, așa cum se numește în mod obișnuit, rundă , este prezentat în Figura 7.


Figura 7. Conținutul etapei principale de cripto-transformare pentru cifrurile bloc similare cu GOST.

La intrarea pasului principal este furnizat un bloc de dimensiune egală, ale cărui jumătăți superioare și inferioare sunt procesate separat una de cealaltă. În timpul conversiei, jumătatea inferioară a blocului este plasată în locul jumătății mai vechi, iar jumătatea mai veche, combinată folosind operația bit-bit. exclusiv sau ” cu rezultatul calculării unei anumite funcții, în locul celei mai mici. Această funcție ia ca argument jumătatea inferioară a blocului și un element de informare cheie ( X), este partea de conținut a cifrului și se numește functie de criptare . Din diverse motive, sa dovedit a fi avantajoasă împărțirea blocului criptat în două părți de dimensiuni egale: | N 1 |=|N 2 | – acest fapt este reflectat de cuvântul „echilibrat” din numele arhitecturii. Cu toate acestea, criptarea rețelelor dezechilibrate este folosită și din când în când, deși nu la fel de des ca cele echilibrate. În plus, considerațiile privind puterea cifrului necesită ca dimensiunea elementului cheie să nu fie mai mică decât dimensiunea a jumătate a blocului: în GOST, toate cele trei dimensiuni sunt egale cu 32 de biți .

Dacă aplicăm cele de mai sus diagramei pasului principal al algoritmului GOST, va deveni evident că blocurile 1,2,3 ale algoritmului (vezi Fig. 1) determină calculul funcției sale de criptare, iar blocurile 4 și 5 specificați formarea blocului de ieșire al pasului principal pe baza conținutului blocului de intrare și a valorilor funcției de criptare. Mai multe detalii despre arhitecturile cifrurilor bloc moderne cu cheie secretă se găsesc în lucrările clasice sau, într-o formă adaptată, în lucrările mele.

În secțiunea anterioară, am comparat deja DES și GOST în ceea ce privește durabilitatea, acum le vom compara în ceea ce privește conținutul funcțional și ușurința de implementare. În ciclurile de criptare GOST, pasul principal se repetă de 32 de ori, pentru DES această valoare este 16. Cu toate acestea, funcția de criptare GOST în sine este mult mai simplă decât funcția DES similară, care conține multe permutări neregulate de biți. Aceste operațiuni sunt extrem de ineficiente pe procesoarele moderne nespecializate. GOST nu conține astfel de operațiuni, deci este mult mai convenabil pentru implementarea software-ului.

Niciuna dintre implementările DES pentru platforma Intel x86 revizuite de autor nu atinge nici măcar jumătate din performanța implementării GOST propusă în acest articol, în ciuda ciclului de două ori mai scurt. Toate cele de mai sus indică faptul că dezvoltatorii GOST au luat în considerare atât aspectele pozitive, cât și cele negative ale DES și, de asemenea, au evaluat mai realist capacitățile actuale și viitoare ale criptoanalizei. Cu toate acestea, luarea DES ca bază atunci când se compară performanța implementărilor de cifrare nu mai este relevantă. Noul standard de criptare din SUA se descurcă mult mai bine în ceea ce privește eficiența - cu aceeași dimensiune a cheii ca GOST (256 de biți), AES funcționează cu aproximativ 14% mai rapid - aceasta este în comparație în ceea ce privește numărul de „operațiuni elementare”. În plus, GOST practic nu poate fi paralelizat, în timp ce AES are mult mai multe posibilități în acest sens. Pe unele arhitecturi acest avantaj al AES poate fi mai mic, pe altele poate fi mai mare. Deci, pe un procesor Intel Pentium ajunge la 28%. Detalii pot fi găsite în.

Cerințe pentru calitatea informațiilor cheie și a surselor de chei.

Nu toate cheile și tabelele de înlocuire oferă putere maximă de cifrare. Fiecare algoritm de criptare are propriile sale criterii de evaluare a informațiilor cheie. Astfel, pentru algoritmul DES se știe că există așa-numitele „ chei slabe „, atunci când este folosit, conexiunea dintre datele deschise și cele criptate nu este mascată suficient, iar cifrul este rupt relativ ușor.

Dacă un răspuns cuprinzător la întrebarea despre criteriile de calitate ale cheilor GOST și tabelelor de înlocuire poate fi obținut oriunde, acesta poate fi doar de la dezvoltatorii algoritmului. Datele relevante nu au fost publicate în presa deschisă. Cu toate acestea, conform procedurii stabilite, pentru a cripta informațiile clasificate, trebuie folosite datele cheie primite de la o organizație autorizată. Indirect, acest lucru poate indica prezența unor metode de verificare a datelor cheie pentru păduchi. Dacă prezența cheilor slabe în GOST este o problemă discutabilă, atunci prezența unităților de înlocuire slabe este fără îndoială. Evident, tabelul de înlocuire „trivial”, conform căruia orice valoare este înlocuită de la sine, este atât de slab încât atunci când o folosești, cifrul poate fi spart simplu, indiferent care este cheia.

După cum sa menționat mai sus, criteriile de evaluare a informațiilor cheie nu sunt disponibile, dar unele considerații generale pot fi făcute în continuare cu privire la acestea.

Cheie

Cheia trebuie să fie o matrice de biți independenți statistic care preiau valorile 0 și 1 cu probabilitate egală cifrul poate să nu ofere nivelul specificat de rezistență dacă este utilizat. Cu toate acestea, probabil, proporția acestor valori în masa totală a tuturor cheilor posibile este neglijabil de mică. Cel puțin, cercetarea intensivă a cifrului nu a dezvăluit încă o singură astfel de cheie pentru niciunul dintre tabelele de substituție cunoscute (adică, propuse de FAPSI). Prin urmare, cheile generate folosind un senzor de numere cu adevărat aleatoriu vor fi de înaltă calitate, cu o probabilitate care diferă de unitate printr-o cantitate neglijabil de mică. Dacă cheile sunt generate folosind un generator de numere pseudo-aleatoare, atunci generatorul utilizat trebuie să ofere caracteristicile statistice de mai sus și, în plus, să aibă o putere criptografică ridicată - nu mai puțin decât cea a GOST însuși. Cu alte cuvinte, sarcina de a determina membrii lipsă ai secvenței de elemente generate de generator nu ar trebui să fie mai simplă decât sarcina de a sparge cifrul. În plus, pot fi utilizate diverse criterii statistice pentru a respinge cheile cu caracteristici statistice slabe. În practică, două criterii sunt de obicei suficiente: pentru a verifica distribuția equiprobabilă a biților cheie între valorile 0 și 1, se utilizează de obicei testul Pearson (chi pătrat) și pentru a verifica independența biților cheie, se utilizează criteriul seriei . Despre criteriile menționate puteți citi în manuale sau cărți de referință de statistică matematică.

Cea mai bună abordare pentru generarea cheilor ar fi folosirea senzorilor hardware midrange, dar acest lucru nu este întotdeauna acceptabil din motive economice. Atunci când se generează o gamă mică de informații cheie, o alternativă rezonabilă la utilizarea unui astfel de senzor este metoda „ruletei electronice”, care este utilizată pe scară largă în practică, când următoarea porțiune generată de biți aleatori depinde de momentul în care operatorul apasă un anumite taste de pe tastatura computerului. În această schemă, sursa datelor aleatoare este utilizatorul computerului, sau mai precis, caracteristicile de timp ale reacției sale. În acest caz, numai câțiva biți de date aleatorii pot fi generați pe apăsare de tastă, astfel încât viteza generală de generare a informațiilor cheie este scăzută - până la câțiva biți pe secundă. Evident, această abordare nu este potrivită pentru obținerea unor matrice mari de chei.

În cazul în care este necesar să se genereze o gamă largă de informații cheie, utilizarea diverșilor senzori software de numere pseudo-aleatoare este posibilă și foarte răspândită. Deoarece un astfel de senzor necesită niveluri ridicate de putere criptografică, este firesc să folosim generatorul gamma al cifrului în sine - pur și simplu „tăiem” gama generată de cifru în „bucăți” de dimensiunea necesară, pentru GOST - 32 octeți. Desigur, pentru această abordare vom avea nevoie de o „cheie principală”, pe care o putem obține folosind metoda ruletei electronice descrisă mai sus și, cu ajutorul acesteia, folosind un cifr în modul generator gamma, obținem o serie de informații cheie de dimensiunea avem nevoie. Deci, aceste două metode de generare a cheilor – „manual” și „algoritmic” – funcționează în tandem, completându-se reciproc. Schemele de generare a cheilor în sistemele de protecție criptografică a informațiilor „cu buget redus” sunt aproape întotdeauna construite pe acest principiu.

Tabel de înlocuire

Tabelul de înlocuire este un element cheie pe termen lung, adică este valabil pentru o perioadă mult mai lungă decât o singură cheie. Se presupune că este comun tuturor nodurilor de criptare din cadrul aceluiași sistem de protecție criptografică. Chiar dacă confidențialitatea tabelului de înlocuire este încălcată, puterea cifrului rămâne extrem de mare și nu scade sub limita admisă. Prin urmare, nu este nevoie în mod special de a păstra tabelul secret, iar în majoritatea aplicațiilor comerciale ale GOST acest lucru se face. Pe de altă parte, tabelul de substituție este un element critic pentru asigurarea puterii întregului cifr. Alegerea tabelului greșit poate duce la ruperea cu ușurință a cifrului prin tehnicile de criptoanaliza cunoscute. Criteriile pentru dezvoltarea unităților de înlocuire sunt un secret bine păzit și este puțin probabil ca FAPSI să-l împărtășească publicului în viitorul apropiat. În cele din urmă, a spune dacă un anumit tabel de înlocuire este bun sau rău necesită o cantitate imensă de muncă - multe mii de ore de om și mașină. Odată selectat și utilizat, un tabel trebuie înlocuit dacă și numai dacă cifrul care îl folosește s-a dovedit a fi vulnerabil la unul sau la altul tip de criptoanaliza. De aceea cea mai buna alegere pentru utilizatorul obișnuit al cifrului, va fi să ia unul dintre mai multe tabele care au devenit publice. De exemplu, din standardul pentru funcția hash, cunoscută și sub denumirea de funcție „bancă centrală”; informații despre aceste tabele pot fi găsite în presa deschisă și chiar pe Internet, dacă te uiți suficient de bine.

Pentru cei care nu sunt obișnuiți să urmeze calea ușoară, mai jos este o schemă generală pentru obținerea de tabele de înaltă calitate:

  1. Folosind una sau alta tehnică, dezvoltați un set de opt unități de înlocuire cu caracteristici de neliniaritate garantate. Există mai multe astfel de tehnici, una dintre ele este utilizarea așa-numitelor funcții îndoite.
  2. Verificați îndeplinirea celor mai simple „criterii de calitate” - de exemplu, cele publicate pentru nodurile de înlocuire DES. Iată câteva considerații mai generale în acest sens: Fiecare nod de substituție poate fi descris de patru funcții logice din patru argumente logice. Dacă aceste funcții sunt scrise în formă minimă(adică, cu lungimea minimă posibilă a expresiei) nu va fi suficient de complex, un astfel de nod de înlocuire este respins. În plus, funcțiile individuale din cadrul întregului tabel de înlocuire trebuie să fie suficient de diferite unele de altele. În această etapă, multe mese evident de calitate scăzută sunt eliminate.
  3. Pentru un cifr cu tabele la alegere, construiți diferite modele rotunde corespunzătoare tipuri diferite criptoanaliza și măsurați caracteristicile „profilului” corespunzătoare. Deci, pentru criptoanaliza liniară, construiți un analog statistic liniar al rundei de criptare și calculați caracteristica „profilului” - un indicator al neliniarității. Dacă este insuficient, tabelul de înlocuire este respins.
  4. În cele din urmă, folosind rezultatele paragrafului anterior, supuneți cifrul cu tabelul pe care l-ați ales unei cercetări intense - o încercare de criptoanaliza folosind toate metodele cunoscute. Această etapă este cea mai dificilă și mai consumatoare de timp. Dar dacă este făcut cu înaltă calitate, atunci cu un grad mare de probabilitate se poate afirma că cifrul cu tabelele pe care le-ați ales nu va fi spart de simpli muritori și, este posibil, va fi prea dur pentru inteligență. Servicii.

Cu toate acestea, o puteți face mult mai simplu. Chestia este că, cu cât există mai multe runde într-un cifr, cu atât mai puțină influențează caracteristicile de rezistență ale unei runde asupra puterii întregului cifr. GOST are până la 32 de runde - mai mult decât în ​​aproape toate cifrurile cu o arhitectură similară. Prin urmare, pentru majoritatea aplicațiilor domestice și comerciale este suficient să se obțină noduri de substituție ca permutări aleatorii independente ale numerelor de la 0 la 15. Acest lucru poate fi implementat practic, de exemplu, amestecând un pachet de șaisprezece cărți, fiecăruia fiindu-i atribuită una dintre valorile intervalului specificat.

În ceea ce privește tabelul de substituție, mai trebuie remarcat un fapt interesant. Pentru reversibilitatea ciclurilor de criptare „32-З” și „32-Р”, nu este necesar ca nodurile de înlocuire să fie permutări ale numerelor de la 0 la 15. Totul funcționează chiar dacă nodul de înlocuire are elemente duplicate, iar înlocuirea determinată de un astfel de nod , este ireversibilă, dar în acest caz puterea cifrului este redusă. De ce este exact așa nu este discutat în acest articol, dar nu este dificil să verificați faptul în sine. Pentru a face acest lucru, este suficient să încercați mai întâi să criptați și apoi să decriptați un bloc de date folosind un astfel de tabel de înlocuire „incomplet”, ale cărui noduri conțin valori duplicate.

Variații pe tema GOST

Foarte des, pentru utilizarea într-un sistem de protecție a datelor criptografice, este necesar un algoritm cu o viteză de implementare mai rapidă decât GOST și nu este necesară o putere criptografică atât de mare. Un exemplu tipic de astfel de sarcini sunt diferitele tipuri de sisteme electronice de tranzacționare cu acțiuni care gestionează sesiunile de tranzacționare în timp real. Aici, algoritmii de criptare utilizați sunt solicitați pentru a face imposibilă decriptarea datelor operaționale ale sistemului în timpul sesiunii (date despre comenzile transmise, tranzacțiile încheiate etc.), după expirarea acestuia, aceste date, de regulă, nu mai sunt inutil pentru atacatori. Cu alte cuvinte, este necesară o durabilitate garantată de doar câteva ore - aceasta este durata tipică a unei sesiuni de tranzacționare. Este clar că folosirea unui GOST cu drepturi depline în această situație ar fi împușcarea vrăbiilor cu un tun.

Ce să faceți în acest caz și în cazuri similare pentru a crește viteza de criptare? Răspunsul se află la suprafață - utilizați o modificare a cifrului cu mai puțini pași principali (runde) în ciclurile de bază. De câte ori reducem numărul de runde de criptare, performanța crește cu aceeași cantitate. Această modificare poate fi realizată în două moduri - prin reducerea lungimii cheii și reducerea numărului de „cicluri de revizuire” ale cheii. Amintiți-vă că numărul de pași de bază în ciclurile de criptare de bază este N=n·m, Unde n– numărul de elemente pe 32 de biți din cheie, m– numărul de cicluri de utilizare a elementelor cheie, în standard n=8, m=4. Puteți reduce oricare dintre aceste cifre, dar cea mai simpla varianta– reduceți lungimea cheii fără a afecta schema de utilizare a acesteia.

Este clar că prețul pentru accelerarea lucrărilor va fi o scădere a puterii cifrului. Principala dificultate este că este destul de dificil să se estimeze mai mult sau mai puțin precis amploarea acestei reduceri. Evident, singurul cale posibilă a face acest lucru înseamnă a efectua un studiu al opțiunilor de cifrare cu cicluri de transformare criptografică reduse „conform program complet" Este clar că, în primul rând, acest lucru necesită utilizarea informațiilor clasificate, care sunt deținute numai de dezvoltatorii GOST și, în al doilea rând, necesită o mare muncă. Prin urmare, vom încerca acum să dăm o evaluare, foarte, foarte aspră, bazată doar pe tipare generale.

În ceea ce privește rezistența cifrului la cracare prin metode „extensive”, adică la un atac „de forță brută”, totul este mai mult sau mai puțin clar aici: o cheie de 64 de biți este undeva pe punctul de a fi accesibilă acestui tip de atac, un cifr cu o cheie de 96 de biți sau mai mare (rețineți că cheia trebuie să conțină un număr întreg de elemente de 32 de biți) este destul de rezistent la acesta. Într-adevăr, în urmă cu câțiva ani, standardul de criptare anterior al SUA, DES, a fost spart în mod repetat de forța brută - mai întâi a fost spart de rețea de calculatoare, organizat pe baza Internetului global, iar apoi specializat, i.e. un computer conceput special pentru acest scop. Să presupunem că versiunea standard a GOST atunci când este implementată în software procesoare moderne rulează de patru ori mai repede decât DES. Apoi, „GOST redus” de 8 runde va funcționa de 16 ori mai repede decât DES. Să presupunem, de asemenea, că în perioada de după hack-ul DES, performanța de calcul s-a dublat de patru ori conform Legii lui Moore. Ca rezultat, obținem că acum verificarea unei chei pe 64 de biți pentru „GOST redus” cu opt cicluri este de 64 de ori mai rapidă decât verificarea unei chei DES la un moment dat. Astfel, avantajul acestei versiuni de GOST față de DES în ceea ce privește complexitatea unui atac cu forță brută este redus de la 2 64–56 = 2 8 = 256 la 256 / 64 = de 4 ori. De acord, aceasta este o diferență foarte iluzorie, aproape nimic.

Este mult mai dificil de evaluat rezistența modificărilor GOST slăbite la metodele „intensive” de criptoanaliza. Cu toate acestea, un model general poate fi urmărit și aici. Faptul este că caracteristicile de „profil” ale multor dintre cele mai puternice tipuri de criptoanaliza astăzi depind exponențial de numărul de runde de criptare. Deci, pentru criptoanaliza liniară (LCA) aceasta va fi o caracteristică de liniaritate L :

Unde C și sunt constante, R este numărul de runde. O relație similară există pentru criptoanaliza diferențială. În „sensul lor fizic”, toate caracteristicile de acest fel sunt probabilități. De obicei, cantitatea de date inițiale necesare pentru criptoanaliza și complexitatea acesteia sunt invers proporționale cu astfel de caracteristici. Rezultă că acești indicatori de intensitate a forței de muncă cresc exponențial odată cu numărul de pași de criptare de bază. Prin urmare, atunci când numărul de runde este redus de mai multe ori, complexitatea celor mai cunoscute tipuri de analiză se va schimba ca, foarte aproximativ și aproximativ, rădăcina acestei puteri din cantitatea inițială. Aceasta este o scădere foarte mare a durabilității.

Pe de altă parte, GOST a fost proiectat cu o marjă mare de siguranță și astăzi este rezistent la toate tipurile cunoscute de criptoanaliza, inclusiv diferențială și liniară. În ceea ce privește LCA, aceasta înseamnă că pentru implementarea sa cu succes, sunt necesare mai multe perechi „bloc deschis - bloc criptat” decât „există în natură”, adică mai mult de 2 64 . Ținând cont de cele de mai sus, aceasta înseamnă că pentru un LCA de succes al unui GOST cu 16 runde, vor fi necesare cel puțin blocuri sau 2 35 octeți sau 32 GB de date, iar pentru unul cu 8 runde, cel puțin blocuri sau 2 19 octeți sau 0,5 MB.

Concluziile din toate cele de mai sus sunt prezentate în tabelul următor, care rezumă caracteristicile versiunilor reduse ale GOST.

Numărul de runde Dimensiunea cheii, biți Index-ul de performanță Caracteristicile probabile ale cifrului (estimare foarte aproximativă)
24 192 1,33 Rezistent la cele mai cunoscute tipuri de CA, sau în pragul rezistenței. Implementarea practică a CA este imposibilă din cauza cerințelor ridicate pentru datele inițiale și intensitatea muncii.
16 128 2 Teoretic, este instabil la unele tipuri de criptoanalize, dar implementarea lor practică în majoritatea cazurilor este dificilă din cauza cerințelor ridicate pentru datele sursă și intensitatea muncii.
12 95 2,67 Nu este rezistent la unele tipuri cunoscute de criptoanaliza, dar este potrivit pentru a asigura secretul unor cantități mici de date (până la zeci sau sute de kiloocteți) pentru o perioadă scurtă de timp.
8 64 4 Nu este rezistent la unele tipuri cunoscute de criptoanaliza, dar este potrivit pentru a asigura secretul unor cantități mici de date (până la zeci de kiloocteți) pentru o perioadă scurtă de timp.

Ultimele două opțiuni, cu 12 și 8 runde, sunt capabile să ofere protecție foarte, foarte limitată în timp. Utilizarea lor este justificată doar în sarcinile în care este necesară doar secretizarea pe termen scurt a datelor protejate, de ordinul câtorva ore. O posibilă zonă de aplicare a acestor variante slabe de cifrare este închiderea traficului UDP al burselor electronice. sisteme de tranzacționare. În acest caz, fiecare pachet de date (datagrama, „D” din mijloc de la abrevierea UDP) este criptat folosind o cheie separată de 64 de biți, iar cheia în sine este criptată folosind o cheie de sesiune (o cheie al cărei scop este o sesiune de comunicare între două computere) și se transmite împreună cu datele.

Înainte de a termina cu versiunile reduse ale GOST, voi spune că toate considerentele de mai sus sunt foarte speculative. Standardul oferă durabilitate doar pentru o singură variantă cu 32 de runde. Și nimeni nu vă poate oferi garanții că rezistența versiunilor reduse ale cifrului la rupere se va schimba în modul indicat mai sus. Dacă totuși decideți să le folosiți în dezvoltările dvs., amintiți-vă că ați călcat pe un teren foarte tremurător, care vă poate aluneca de sub picioare în orice moment. Deoarece viteza de criptare este o problemă critică pentru dvs., poate ar trebui să vă gândiți să utilizați un cifr mai rapid sau un computer mai puternic? Un alt aspect de ce merită făcut acest lucru este faptul că versiunile slăbite ale GOST vor fi cele mai sensibile la calitatea unităților de înlocuire utilizate.

Problema luată în considerare are și un dezavantaj. Ce se întâmplă dacă viteza de criptare nu este critică, dar cerințele de putere sunt foarte stricte? Rezistența standardelor GOST poate fi crescută în două moduri - să le numim „extensive” și „intensive”. Prima dintre ele nu este altceva decât o simplă creștere a numărului de runde de criptare. Pentru mine nu este complet clar de ce ar putea fi de fapt necesar acest lucru, deoarece standardul intern oferă deja durabilitatea necesară fără aceasta. Cu toate acestea, dacă suferiți de paranoia mai mult decât nivelul cerut (și toți „apărătorii informațiilor” sunt pur și simplu obligați să sufere de aceasta, aceasta este o condiție de adecvare profesională, singura întrebare este gravitatea cazului :), aceasta vă va ajuta te calmezi oarecum. Dacă nu sunteți sigur de acest cifru KGB sau de tabelul de înlocuire pe care îl utilizați, pur și simplu dublu, cvadruplu etc. numărul de runde – selectați multiplicitatea în funcție de gravitatea cazului dvs. Această abordare vă permite să creșteți cu adevărat puterea cifrului - dacă criptoanaliza anterior era pur și simplu imposibilă, acum este imposibilă pătrat!

O întrebare mai dificilă și mai interesantă este dacă este posibil să creșteți puterea cifrului fără a modifica numărul și structura pașilor principali de criptare. În mod surprinzător, răspunsul la aceasta este pozitiv, deși călcăm din nou pe terenul zdruncinat al speculațiilor. Cert este că în GOST, la etapa principală de conversie, se presupune că trebuie să înlocuiască 4 cu 4 biți, dar în practică (vom vorbi despre asta mai târziu) toate implementările software realizează înlocuirea octet cu octet, adică. 8 pe 8 biți - acest lucru se face din motive de eficiență. Dacă proiectăm imediat un astfel de înlocuitor ca unul pe 8 biți, vom îmbunătăți semnificativ performanța unei runde. În primul rând, caracteristica „difuziei” sau indicatorul „avalanșă” va crește - un bit din datele sursă și/sau cheia va influența un număr mai mare de biți ai rezultatului. În al doilea rând, pentru nodurile de înlocuire mai mari, pot fi obținute caracteristici diferențiale și liniare mai mici, reducând astfel expunerea cifrului la tipuri similare de criptoanaliza. Acest lucru este valabil mai ales pentru ciclurile GOST reduse, iar pentru opțiunile cu 8 și 12 runde un astfel de pas este pur și simplu necesar. Acest lucru va compensa oarecum pierderea durabilității din cauza reducerii numărului de runde. Ceea ce face dificilă utilizarea acestei tehnici este că va trebui să proiectați singur astfel de unități de înlocuire „mărite”. Și, de asemenea, faptul că unitățile mai mari sunt în general mult mai dificil de construit decât cele mai mici.

Utilizarea non-standard a standardului.

Desigur, scopul principal al algoritmilor criptografici GOST este criptarea și protecția datelor. Totuși, pot găsi și alte aplicații legate, firesc, de securitatea informațiilor. Să vorbim pe scurt despre ele:

1. Pentru criptarea în modul gamma, GOST prevede dezvoltarea unui gamma criptografic - o secvență de biți cu caracteristici statistice bune și putere criptografică ridicată. Acest gamma este apoi folosit pentru a modifica datele deschise, rezultând date criptate. Cu toate acestea, aceasta nu este singura aplicație posibilă a gama criptografică. Faptul este că algoritmul pentru generarea sa este un generator de secvențe de numere pseudo-aleatoare (PRNG) cu caracteristici excelente. Desigur, utilizarea unui astfel de PRNG în care sunt necesare doar caracteristicile statistice ale secvenței generate, dar puterea criptografică nu este necesară, nu este foarte rezonabilă - pentru aceste cazuri există generatoare mult mai eficiente. Dar pentru diverse aplicații legate de securitatea informațiilor, o astfel de sursă va fi foarte utilă:

  • După cum sa menționat mai sus, gamma poate fi folosită ca „materie primă” pentru generarea cheilor. Pentru a face acest lucru, trebuie doar să obțineți un segment gamma de lungimea necesară - 32 de octeți. În acest fel, cheile pot fi făcute după cum este necesar și nu vor trebui stocate - dacă este nevoie din nou de o astfel de cheie, va fi destul de ușor să o generați din nou. Trebuie doar să vă amintiți pe ce cheie a fost generată inițial, ce mesaj de sincronizare a fost folosit și cu ce octet din gama generată a început cheia. Toate informațiile, cu excepția cheii utilizate, sunt neclasificate. Această abordare vă va permite să controlați cu ușurință un sistem de chei destul de complex și ramificat folosind doar o singură „cheie principală”.
  • Similar cu cel precedent, gamma poate fi folosit ca „materie primă” inițială pentru generarea parolelor. Aici poate apărea întrebarea: de ce este necesar să le generăm deloc, nu este mai ușor să le inventați după cum este necesar? Eșecul acestei abordări a fost demonstrat în mod clar de o serie de incidente în rețelele de calculatoare, dintre care cel mai mare a fost paralizia zilnică a Internetului din noiembrie 1988 cauzată de viermele Morris. Una dintre modalitățile prin care un program rău intenționat a pătruns într-un computer a fost prin ghicirea parolelor: programul a încercat să intre în sistem încercând secvenţial parole din lista sa internă de câteva sute, iar într-o proporţie semnificativă de cazuri a reușit. Imaginația umană pentru inventarea parolelor s-a dovedit a fi foarte slabă. De aceea, în acele organizații în care securității li se acordă atenția cuvenită, parolele sunt generate și distribuite utilizatorilor Administrator de sistem pe siguranta. Generarea parolelor este puțin mai complicată decât generarea cheilor, deoarece în acest caz gama binară „brută” trebuie convertită în formă simbolică și nu pur și simplu „tăiată” în bucăți. În plus, este posibil ca valorile individuale să fie eliminate pentru a se asigura că toate caracterele alfabetice sunt la fel de probabil să apară în parolă.
  • O altă modalitate de a utiliza gama criptografică este ștergerea garantată a datelor de pe medii magnetice. Cert este că, chiar și atunci când informațiile sunt rescrise pe un suport magnetic, rămân urme ale datelor anterioare, care pot fi restaurate printr-o examinare adecvată. Pentru a distruge aceste urme, o astfel de suprascriere trebuie efectuată de mai multe ori. S-a dovedit că ar fi necesar să rescriem informațiile pe mass-media de mai puține ori dacă o astfel de procedură ar folosi date aleatoare sau pseudoaleatoare care ar rămâne necunoscute experților care încearcă să restaureze informațiile șterse. Cifrul gamma va fi util aici.

2. Nu numai gama criptografică, ci și transformarea criptografică în sine pot fi utilizate pentru nevoi care nu sunt direct legate de criptare:

  • Știm că una dintre aceste opțiuni pentru utilizarea GOST este dezvoltarea de inserții simulate pentru matrice de date. Cu toate acestea, pe baza oricărui cifru bloc, inclusiv GOST, este destul de ușor să construiți o schemă pentru calcularea unei funcții hash unidirecționale, numită și în literatură MDC, care în diferite surse reprezintă schimba codul de detectare / manipulare (M modificare/ M anipulare D ecție C odă) sau rezumatul mesajului (M eseu D igest C odă). Prima decodare a aparut in literatura de specialitate mult mai devreme, a doua, mai scurta, cred, a fost inventata de cei care nu si-au putut aminti de prima :), - a fost o gluma. MDC poate fi utilizat direct în sistemele de protecție împotriva imitației ca un analog al inserției de imitație, care, totuși, nu depinde de cheia secretă. În plus, MDC este utilizat pe scară largă în circuite semnatura digitala(EDS), deoarece majoritatea acestor scheme sunt concepute astfel încât să fie convenabil să semnați un bloc de date de dimensiune fixă. După cum știți, pe baza standardului GOST 28147-89 discutat, a fost construit standardul Federației Ruse pentru calcularea funcției hash unidirecționale GOST R34.11-94.
  • Este mai puțin cunoscut faptul că, pe baza oricărui cifru bloc, inclusiv GOST, poate fi construită o schemă de semnătură digitală complet funcțională, cu o cheie de semnătură secretă și o combinație de verificare deschisă. Din mai multe motive, această schemă nu a primit o distribuție practică largă, totuși, în unele cazuri poate fi considerată o alternativă foarte atractivă la schemele de semnătură digitală „matematice” dominante în prezent în lume.

Literatură

Sisteme de prelucrare a informațiilor. Protecție criptografică. Algoritmul de transformare criptografică GOST 28147-89. Stat
Com. URSS conform standardelor, M., 1989. ftp://ftp.wtc-ural.ru/pub/ru.crypt/GOST-28147
Shannon Claude. Teoria matematică a sistemelor secrete. În colecția „Lucrări despre teoria informației și cibernetică”, M., IL, 1963, p. 333-369. http://www.enlight.ru/crypto/articles/shannon/shann__i.htm
Se anunță aprobarea standardului federal de procesare a informațiilor (FIPS) 197, standard de criptare avansată (AES), Federal Register Vol. 66, nr. 235 / Joi, 6 decembrie 2001 / Aviz, pp 63369–63371. http://csrc.nist.gov/encryption/aes/
Feistel Horst. Criptografia și securitatea computerelor. Traducere de A. Vinokurov conform publicației Horst Feistel. Cryptography and Computer Privacy, Scientific American, mai 1973, voi. 228, nr. 5, pp. 15-23. http://www.enlight.ru/crypto/articles/feistel/feist_i.htm
Schneier Bruce. Criptografia aplicată. a 2-a ed. Protocoale, algoritmi și texte sursă în limbaj C., M., „Triumph”, 2002 http://www.ssl.stu.neva.ru/psw/crypto/appl_rus/appl_cryp.htm
Menezes Alfred, van Oorschot Paul, Vanstone Scott. Manual de criptografie aplicată. ttp://www.cacr.math.uwaterloo.ca/hac/
Vinokurov Andrei. Cum funcționează un cifru bloc? Manuscris. http://www.enlight.ru/crypto/articles/vinokurov/blcyph_i.htm Vinokurov Andrei. Probleme cu criptografia pentru jurnal electronic
inFUSED BYTES online. http://www.enlight.ru/crypto/articles/ib/ib.htm
Vinokurov Andrey, Primenko Eduard. Textul raportului „Cu privire la implementarea software-ului standardelor de criptare în Federația Rusă și SUA”, conferință despre informatizare, Moscova, MEPhI, 28-29 ianuarie 2001. Publicat în lucrările conferinței.