Lecții de criptografie. Cifre bloc moderne. Algoritmi moderni de criptare

După cum vă amintiți, cifrul de schimbare, înlocuire, permutare și cifra Vernam aplică o operație fiecărui caracter specific al textului. Trebuie să schimbăm - schimbăm simbolul, aplicăm cheia - o aplicăm simbolului, apoi următorului simbol și așa mai departe până când criptăm toate simbolurile text simplu. Această metodă de criptare se numește criptare flux - criptăm fiecare caracter separat. O altă abordare este împărțirea textului simplu original în grupuri de mai multe caractere (blocuri) și efectuarea operațiunilor de criptare pe fiecare bloc. Aceasta este o metodă de criptare bloc.

Pentru a face diferența dintre cifrurile bloc și fluxul mai clară, să dăm un exemplu: cifru simpluînlocuitori.

Criptare în flux

Să criptăm cuvântul CIPHER cu un cifr de flux de înlocuire:

Am criptat fiecare caracter și am obținut un text cifrat. La fel de ușor ca o plăcintă.

CRIPTARE BLOC

Să criptăm cuvântul AVADAKEDAVRA. Deoarece cifrul este unul bloc, vom împărți textul simplu în blocuri de patru caractere: AVAD | AKED | AVRA (în practică, blocurile de text constau din 64-256 de biți). Pentru fiecare bloc vom veni cu propriul nostru tabel de înlocuire:

Acum criptăm fiecare dintre blocuri cu alfabetul corespunzător:
A ieșit puțin mai bine decât cu abordarea în linie, dacă vorbim despre durabilitate. La urma urmei, am învățat să descifrăm cifrul de substituție obișnuit cu o mână stângă. Și cu o astfel de abordare prin bloc, atacatorul va trebui să-și dezvolte creierul înainte de a putea selecta lungimea blocului și apoi să aplice criptoanaliza pentru cifrurile de înlocuire pentru fiecare bloc.

REŢEA FEISTEL

Acum suntem gata să trecem la un subiect foarte important care deschide ușa către o lume vastă sisteme moderne criptare. Rețeaua Feistel este o metodă de criptare în bloc dezvoltată de Horst Feistel la laboratorul IBM în 1971. Astăzi stă la baza rețelei Feistel cantitate mare protocoale criptografice. Să încercăm să ne dăm seama „pe degete” ce este.

Rețeaua Feistel funcționează pe blocuri de text simplu, așa că ne vom uita la mecanismul de funcționare a acesteia pe unul dintre blocuri. Acțiunile pentru blocurile rămase vor fi similare.

  • Blocul este împărțit în două părți egale - stânga (L) și dreapta (R).
  • După partiţionare, subblocul din stânga este modificat printr-o funcţie f folosind tasta K: x = f(L, K). Ca o funcție, vă puteți imagina orice transformare care vă place - de exemplu, vechiul cifr de schimbare cu cheia K.
  • Subblocul rezultat este adăugat modulo 2 cu subblocul drept R, care nu a fost folosit înainte: x=x+R
  • Apoi, piesele rezultate sunt schimbate și lipite împreună.

După cum puteți vedea, totul este destul de simplu. Pentru a înțelege cum funcționează, priviți diagrama:

Acest circuit se numește o celulă Feistel. Rețeaua Feistel în sine este formată din mai multe celule. Subblocurile obținute la ieșirea primei celule merg la intrarea celei de-a doua celule, subblocurile rezultate din a doua celulă merg la intrarea celei de-a treia celule și așa mai departe, în funcție de numărul de runde ale rețelei Feistel. În fiecare astfel de rundă, este utilizată o cheie rotundă predeterminată. Cel mai adesea, cheile rotunde sunt derivate din cheia principală cheie secreta K. Când toate rundele au fost finalizate, subblocurile de text sunt lipite împreună și se obține un text cifrat normal.

Acum să ne uităm la funcționarea rețelei Feistel folosind un exemplu. Să luăm cuvântul AVADAKEDAVRA și să-l împărțim în două blocuri de șase caractere - AVADAK | EDAVRA. Pentru funcție luăm cifra de schimbare după numărul de poziții determinat de cheia rotundă. Fie cheia secretă K = . Ca taste rotunde, luăm K = 1, K = 2. Pentru adăugarea modulo 2, convertim textul în cod binar conform alfabetului telegrafic, pe care aproape nimeni altcineva îl folosește deloc.

Iată ce s-a întâmplat:

Acum să rulăm primul bloc prin rețeaua Feistel în două runde:

Încercați să criptați singur al doilea bloc, am primit MOSSTR.

Decriptarea se realizează exact în același mod: textul cifrat este împărțit în blocuri și apoi subblocuri, subblocul din stânga intră în funcție, se adaugă modulo 2 cu cel din dreapta, iar apoi subblocurile sunt schimbate. Diferența este că cheile rotunde sunt furnizate în ordine inversă, adică în cazul nostru, în prima rundă vom folosi cheia K = 2, iar apoi în a doua rundă K = 1.

Cercetările asupra rețelei Feistel au arătat că, cu chei rotunde independente și o funcție pseudo-aleatorie rezistentă la criptografie f, trei runde ale rețelei Feistel vor fi suficiente pentru ca textul cifrat să fie pseudo-aleatoriu. Acest lucru sugerează că cifrurile bazate pe rețeaua Feistel sunt în prezent destul de sigure.

GOST 28147-89 (MAGMA)

Aproape totul este deja în arsenal conceptele necesare, așa că suntem gata să trecem la primul subiect important al criptografiei interne - GOST 28147-89. Merită spus că numai leneșii nu au scris despre acest standard, așa că voi încerca pentru a miliona și prima oară să contur pe scurt și fără un nor de formule esența modurilor de criptare ale marii și teribilei Magme. Dacă decideți să citiți standardul în sine, atunci ar trebui să vă aprovizionați cu timp, energie, răbdare și mâncare, deoarece, după cum știți, scrierea standardelor în limbajul uman este strict interzisă.

Caracteristici principale: cheie 256 biți, bloc 64 biți.

Înainte de a analiza Magma, trebuie să înveți un nou concept - tabele de substituție sau S-boxes. Acesta este același tip de tabel ca și tabelul din cifrul de substituție. Conceput pentru a înlocui simbolurile subblocului cu simbolurile înregistrate în tabel. Nu credeți că S-box sunt numere aleatorii generate de funcția rand(). S-box-urile sunt rezultatul unor secvențe create cu atenție, deoarece puterea criptografică a întregului cifr se bazează pe ele.

GOST 28147 descrie tabelele sale de înlocuire foarte puțin. Spune doar că sunt un element secret suplimentar (împreună cu cheia secretă) și „sunt furnizate în în modul prescris" Nimic altceva. De la adoptarea GOST 28147, incertitudinea științifică și tehnică asociată cu alegerea S-box-urilor a dat naștere la zvonuri și speculații. S-a vorbit despre criterii secrete cunoscute doar de dezvoltatorii GOST. Desigur, această incertitudine a redus încrederea în criptosistem.

Acest neajuns a oferit motive excelente pentru critica standardului. Criptograful francez Nicolas Courtois a publicat mai multe articole care conțin o serie de prevederi controversate cu privire la puterea GOST. Courtois consideră că standardul rus este ușor de atacat și nu poate fi considerat internațional. Cu toate acestea, Courtois își realizează analiza pentru alte S-box-uri decât cele reale, așa că nu ar trebui să te bazezi pe opinia lui.

Acum haideți să vedem ce au venit în interiorul zidurilor lubianului mohorât.

Mod de înlocuire ușoară

În modul de înlocuire simplă pentru 32 de runde, conform standardului, avem nevoie de 32 de chei rotunde. Pentru a genera chei rotunde, cheia originală de 256 de biți este împărțită în opt blocuri de 32 de biți: K1...K8. Tastele K9...K24 sunt o repetare ciclică a tastelor K1...K8. Cheile K25…K32 sunt cheile K8…K1.

  1. Fiecare bloc de 64 de biți este împărțit în două subblocuri - Ai și Bi.
  2. Subblocul din stânga Ai este adăugat modulo 232 cu tasta rotundă K1: Ai+1 = Ai + Ki mod 232.
  3. Subblocul din stânga trece prin S-box.
  4. Biții din subblocul stâng sunt deplasați cu 11 poziții (deplasare ciclică).
  5. Subblocul din stânga se adună cu cel din dreapta modulo 2: A = A ⊕ B . iii
  6. Subblocul corect acceptă sens original subbloc stânga: Bi+1 = Ai.
  7. Subblocurile sunt schimbate.

Doar un exemplu de o rundă. cheie pe 256 de biți:

arvadek adava arvadek adava arvadek adava arvadek adava arva

00011 01010 11110 00011 01001 00001 01111 00011 01001 00011 11110

00011... . . . 00011 01010 11110 0

Apoi cheile rotunde

K1 = 00011 01010 11110 00011 01001 00001 01

K2 = 111 00011 01001 00011 11110 00011 0001

K3 = . . .

S - caseta = [ 1 , 15 , 13 , 0 , 5 , 7 , 10 , 4 , 9 , 2 , 3 , 14 , 6 , 11 , 8 , 12 ]

Cum se utilizează această S-box? Foarte simplu! Dacă intrarea S-box-ului este 0, atunci ieșirea va fi 1 (luați al 0-lea simbol al S-box-ului), dacă 4, atunci ieșirea va fi 5 (luați al 4-lea simbol), dacă intrarea este 7 , atunci rezultatul va fi 4 și așa mai departe.

Text simplu:

Împărțit în două blocuri de 32 de biți de biți înalți și de jos:

Exemplul, desigur, s-a dovedit a fi sălbatic, deoarece GOST nu este încă un standard încât toată lumea să poată trece prin el cu propriile mâini.

Modul de înlocuire simplă este prea simplu și are dezavantaje semnificative:

  • o eroare dintr-un bloc criptat corupe toți biții acelui bloc;
  • atunci când criptați blocuri identice de text simplu, se obține blocuri identice text cifrat, care poate furniza anumite informații unui criptoanalist.

Astfel, este recomandabil să utilizați GOST 28147-89 în modul de înlocuire simplă numai pentru criptarea datelor cheie.

MODUL DE JOC

Acest mod nu are dezavantajele modului simplu de înlocuire. Modul gamma este numit așa deoarece folosește gamma, o secvență pseudo-aleatorie care este adăugată modulo 2 textului simplu în fiecare rundă. Gamma se formează din mesajul de sincronizare S - o secvență pseudo-aleatorie care se modifică cu fiecare iterație și este criptată în modul de înlocuire simplă, după care se transformă în gamma și se suprapune textului simplu.

Și acum totul este în ordine.

Pașii 3-5 se repetă pentru fiecare bloc. Toate aceste manipulări pot fi văzute în diagramă.

Decriptarea se realizează în același mod; în loc de un bloc de text simplu, este furnizat un bloc de text cifrat.

Modul Gamma cu feedback

Să fim mai complicati. Algoritmul este similar cu modul gamma, dar gama se formează pe baza blocului anterior de date criptate, astfel încât rezultatul criptării blocului curent depinde și de blocurile anterioare. 1. Mesaj de sincronizare S - secvență pseudo-aleatorie pe 64 de biți.

2. S este criptat în modul de înlocuire simplă.
3. Textul simplu este adăugat modulo 2 la gama rezultată.
4. Textul cifrat rezultat este trimis ca mesaj de sincronizare pentru următorul bloc și este, de asemenea, trimis la ieșire. Puteți vedea cum arată în diagramă.

Mod de inserare simulat

În acest mod, este generată o inserție simulată - un bloc suplimentar de lungime fixă, în funcție de textul și tastele sursă. Un astfel de bloc mic este necesar pentru a confirma că nicio distorsiune nu a fost introdusă accidental sau intenționat în textul cifrat - adică pentru a verifica integritatea. Acest mod funcționează astfel:

1. Un bloc de text simplu trece prin 16 runde în modul de înlocuire simplă.
2. Un alt bloc de text simplu este adăugat la blocul rezultat modulo 2.
3. Suma trece prin alte 16 runde în modul de înlocuire simplă.
4. Următorul bloc de text simplu este adăugat și din nou inlocuire usoarași așa mai departe până când nu mai există blocuri de text simplu.

Pentru verificare, destinatarul, după decriptarea textului, efectuează o procedură similară celei descrise. Dacă rezultatul nu se potrivește cu inserția imitativă transmisă, toate blocurile M corespunzătoare sunt considerate false.

GOST 34.12-2015 (GRASSHOPPER)

Mulți consideră că GOST 28147-89 este învechit și nu este suficient de robust în comparație cu algoritmii străini. Pentru a-l înlocui, criptografii autohtoni au lansat un nou standard de criptare. Ei spun că acest lucru s-a întâmplat fie din cauza numărului mare de atacuri asupra vechiului GOST, fie pentru că această lungime a blocului este deja depășită și prea mică pentru seturile de date moderne. Motivele reale nimeni nu face publicitate. Desigur, au existat unele modificări ale principalelor caracteristici.

Caracteristici principale: cheie 256 biți, bloc 128 biți.

De asemenea, merită spus că în noul standard, cutiile S sunt fixe și atent, așa că nu este nevoie să vă inventați propriile substituții aleatorii miraculoase. Noul GOST are mult mai multe moduri de criptare:
mod simplu de înlocuire (Electronic Codebook, ECB);
modul gamma (contor, CTR);
modul gamma cu feedback de ieșire (Output Feedback, OFB);
mod simplu de înlocuire cu angajare (Cipher Block Chaining, SBC);
modul gamma cu feedback text cifrat (Cipher Feedback, CFB);
modul de generare a inserției de simulare (algoritmul codului de autentificare a mesajelor).

Să ne uităm la noile moduri.

Mod de înlocuire ușoară cu angajare

După cum s-a văzut în standardul anterior, modul de înlocuire simplă este cel mai slab dintre moduri, așa că în noul standard iese acum cu angajare și nu a devenit deloc atât de simplu.

  1. Un vector de inițializare sună înfricoșător, dar în realitate este doar o secvență de biți care intră în intrare.
  2. Vectorul este împărțit în două părți - L și R, dintre care una este adăugată modulo 2 cu textul simplu, iar cealaltă devine jumătate din vectorul de inițializare pentru următorul bloc.
  3. Suma textului simplu și a unei părți din vectorul de inițializare este trecută printr-un cifr de substituție simplu.
  4. Blocurile de text cifrat rezultate sunt lipite împreună.

Odată ce te uiți la diagramă, totul devine imediat clar.

Desigur, vectorul de inițializare nu este atât de simplu: trece printr-o serie de transformări liniare (folosind un registru cu deplasare liniară) înainte de a începe criptarea unui nou bloc. Dar pentru a vă familiariza cu cifrul, este suficient să vă imaginați o astfel de schemă. Decriptarea în acest mod nu este, de asemenea, complet evidentă, așa că este mai bine să priviți diagrama.

Pentru plusuri - Criptări. Printre evoluțiile interne se numără furnizorul de criptografii CryptoPro CSP.

Câteva cuvinte despre puterea modurilor de criptare. Mulți criptografi străini au încercat să ridice mâna împotriva standardului nostru, dar în momentul de față nu se cunoaște niciun atac care să poată fi implementat la nivelul actual de dezvoltare tehnologică. Printre programatori acest standard pentru o lungă perioadă de timp nu a fost foarte popular, deoarece este dificil de înțeles algoritmul de operare din textul său și nu există suficiente descrieri mai clare. Dar acum există deja o mulțime de implementări în multe limbaje de programare. Deci acum utilizarea GOST este destul de posibilă și, în multe privințe, depășește standardele străine. Până la urmă, unde este patriotismul?!

Criptarea datelor este extrem de importantă pentru a proteja confidențialitatea. În acest articol voi vorbi despre tipuri variateși metode de criptare care sunt folosite pentru a proteja datele astăzi.

Știați?
În epoca romană, criptarea era folosită de Iulius Caesar pentru a face scrisorile și mesajele să nu fie citite inamicului. A jucat un rol important ca tactică militară, mai ales în timpul războaielor.

Pe măsură ce capacitățile internetului continuă să crească, tot mai multe dintre afacerile noastre se desfășoară online. Dintre acestea, cele mai importante sunt internet banking, plata online, e-mailuri, schimb de privat și mesaje oficiale etc., care presupun schimbul de date și informații confidențiale. Dacă aceste date cad în mâini greșite, ar putea provoca rău nu numai utilizator individual, dar și toate sistem online Afaceri.

Pentru a preveni acest lucru, unii măsuri de rețea securitate pentru a proteja transmiterea datelor cu caracter personal. Principalele dintre acestea sunt procesele de criptare și decriptare a datelor, care este cunoscută sub numele de criptografie. Există trei metode principale de criptare utilizate în majoritatea sistemelor de astăzi: hashing, criptare simetrică și asimetrică. ÎN următoarele rânduri, voi vorbi mai detaliat despre fiecare dintre aceste tipuri de criptare.

Tipuri de criptare

Criptare simetrică

În criptarea simetrică, datele normale care pot fi citite, cunoscute sub numele de text simplu, sunt criptate astfel încât să devină ilizibile. Această amestecare a datelor se face folosind o cheie. Odată ce datele sunt criptate, acestea pot fi trimise în siguranță către destinatar. La destinatar, datele criptate sunt decodificate folosind aceeași cheie care a fost folosită pentru codare.

Deci este clar că cheia este cea mai mare parte importantă criptare simetrică. Trebuie să fie ascuns de străini, deoarece oricine are acces la el va putea decripta datele private. Acesta este motivul pentru care acest tip de criptare este cunoscut și ca „cheie secretă”.

În sistemele moderne, cheia este de obicei un șir de date care provine dintr-o parolă puternică sau dintr-o sursă complet aleatorie. Este alimentat în criptare simetrică software, care îl folosește pentru a cripta datele de intrare. Codificarea datelor se realizează folosind algoritm simetric criptare, cum ar fi Standardul de criptare a datelor (DES), Standardul de criptare avansată (AES) sau algoritmul internațional de criptare a datelor (IDEA).

Restricții

Cea mai slabă verigă în acest tip de criptare este securitatea cheii, atât în ​​ceea ce privește stocarea, cât și transmiterea către utilizatorul autentificat. Dacă un hacker este capabil să obțină această cheie, el poate decripta cu ușurință datele criptate, înfrângând întregul scop al criptării.

Un alt dezavantaj este că software-ul care prelucrează datele nu poate funcționa cu date criptate. Prin urmare, pentru a putea utiliza acest software, datele trebuie mai întâi decodificate. Dacă software-ul în sine este compromis, atunci un atacator poate obține cu ușurință datele.

Criptare asimetrică

Criptarea cheii asimetrice funcționează în mod similar cheie simetrică, este că folosește o cheie pentru a codifica mesajele transmise. Cu toate acestea, în loc să folosească aceeași cheie, el folosește una complet diferită pentru a decripta acest mesaj.

Cheia folosită pentru codificare este disponibilă pentru toți utilizatorii rețelei. Ca atare, este cunoscută ca o cheie „publică”. Pe de altă parte, cheia folosită pentru decriptare este păstrată secretă și este destinată utilizării private de către utilizator însuși. Prin urmare, este cunoscută drept cheia „privată”. Criptarea asimetrică este cunoscută și sub numele de criptare cu cheie publică.

Deoarece, prin această metodă, cheia secretă necesară pentru decriptarea mesajului nu trebuie transmisă de fiecare dată și, de obicei, este cunoscută doar de utilizator (destinator), probabilitatea ca un hacker să poată decripta mesajul este mare. inferior.

Diffie-Hellman și RSA sunt exemple de algoritmi care utilizează criptarea cu chei publice.

Restricții

Mulți hackeri folosesc man-in-the-middle ca formă de atac pentru a ocoli acest tip de criptare. În criptarea asimetrică, vi se oferă o cheie publică care este utilizată pentru a face schimb de date în siguranță cu o altă persoană sau serviciu. Cu toate acestea, hackerii folosesc înșelăciunea în rețea pentru a vă păcăli să comunicați cu ei în timp ce sunteți făcut să credeți că vă aflați pe o linie sigură.

Pentru a înțelege mai bine acest tip de hacking, luați în considerare două părți care interacționează, Sasha și Natasha, și un hacker, Serghei, cu intenția de a le intercepta conversația. În primul rând, Sasha trimite un mesaj prin intermediul rețelei destinat Natasha, cerându-i cheia publică. Serghei interceptează acest mesaj și obține cheia publică asociată cu ea și o folosește pentru a cripta și a trimite un mesaj fals către Natasha, care conține cheia lui publică în loc de a lui Sasha.

Natasha, crezând că acest mesaj a venit de la Sasha, acum îl criptează cu cheia publică a lui Serghei și îl trimite înapoi. Acest mesaj a fost din nou interceptat de Serghei, decriptat, modificat (dacă se dorește), criptat din nou folosind cheia publică pe care Sasha a trimis-o inițial și trimis înapoi lui Sasha.

Astfel, atunci când Sasha primește acest mesaj, el a fost făcut să creadă că a venit de la Natasha și rămâne inconștient de joc greșit.

Hashing

Tehnica hashing folosește un algoritm cunoscut sub numele de funcție hash pentru a genera un șir special din datele date, cunoscut sub numele de hash. Acest hash are următoarele proprietăți:

  • aceleași date produc întotdeauna același hash.
  • Nu este posibil să generați date brute numai dintr-un hash.
  • Nu merită încercat diferite combinații date de intrare pentru a încerca să genereze același hash.

Astfel, principala diferență dintre hashing și celelalte două forme de criptare a datelor este că, odată ce datele sunt criptate (hashing), nu pot fi recuperate înapoi în forma sa originală (decriptate). Acest fapt asigură că, chiar dacă un hacker pune mâna pe hash, acesta nu îi va fi de nici un folos, deoarece nu va putea decripta conținutul mesajului.

Message Digest 5 (MD5) și Secure Hashing Algorithm (SHA) sunt doi algoritmi de hashing utilizați pe scară largă.

Restricții

După cum am menționat mai devreme, este aproape imposibil să decriptați datele dintr-un anumit hash. Cu toate acestea, acest lucru este adevărat numai dacă este implementat hashing puternic. În cazul unei implementări slabe a tehnicii de hashing, folosind suficiente resurse și atacuri forta bruta, un hacker persistent poate fi capabil să găsească date care se potrivesc cu hash-ul.

Combinație de metode de criptare

După cum sa discutat mai sus, fiecare dintre aceste trei metode de criptare suferă de unele dezavantaje. Cu toate acestea, atunci când o combinație a acestor metode este utilizată, ele formează o fiabilă și extrem de sistem eficient criptare.

Cel mai adesea, tehnicile cu chei private și publice sunt combinate și utilizate împreună. Metoda cheii private permite o decriptare mai rapidă, în timp ce metoda cheii publice oferă o decriptare mai sigură și mai mult mod convenabil pentru a transfera cheia secretă. Această combinație de metode este cunoscută sub denumirea de „plic digital”. Program de criptare E-mail PGP se bazează pe tehnica „plicului digital”.

Hashingul este folosit ca mijloc de verificare a puterii unei parole. Dacă sistemul stochează un hash al parolei în locul parolei în sine, va fi mai sigur, deoarece chiar dacă un hacker pune mâna pe acest hash, el nu îl va putea înțelege (citi). În timpul verificării, sistemul va verifica hash-ul parolei de intrare și va vedea dacă rezultatul se potrivește cu ceea ce este stocat. În acest fel, parola reală va fi vizibilă doar în momentele scurte când trebuie schimbată sau verificată, reducând foarte mult probabilitatea ca aceasta să cadă în mâini greșite.

Hashingul este, de asemenea, folosit pentru a autentificarea datelor folosind o cheie secretă. Un hash este generat folosind datele și această cheie. Prin urmare, doar datele și hash-ul sunt vizibile, iar cheia în sine nu este transmisă. În acest fel, dacă se fac modificări fie la date, fie la hash, acestea vor fi detectate cu ușurință.

În concluzie, aceste tehnici pot fi folosite pentru a codifica eficient datele într-un format care nu poate fi citit, care poate asigura că acestea rămân în siguranță. Cele mai multe sisteme moderne folosesc de obicei o combinație a acestor metode de criptare împreună cu implementare puternică algoritmi pentru a îmbunătăți securitatea. Pe lângă securitate, aceste sisteme oferă și multe beneficii aditionale, cum ar fi verificarea identității utilizatorului și asigurarea faptului că datele primite nu pot fi modificate.

Serghei Panasenko,
Șef al departamentului de dezvoltare software la Ankad,
[email protected]

Noțiuni de bază

Procesul de conversie a datelor deschise în date criptate și invers se numește de obicei criptare, iar cele două componente ale acestui proces sunt numite criptare și, respectiv, decriptare. Matematic, această transformare este reprezentată de următoarele dependențe care descriu acțiuni cu informațiile originale:

C = Ek1(M)

M" = Dk2(C),

unde M (mesaj) - informații deschise(în literatura despre securitatea informațiilor este adesea numită „ text original");
C (text cifrat) - textul cifrat (sau criptograma) obținut ca urmare a criptării;
E (criptare) - o funcție de criptare care efectuează transformări criptografice asupra textului sursă;
k1 (cheie) - parametrul funcției E, numită cheie de criptare;
M" - informații obținute ca urmare a decriptării;
D (decriptare) - funcție de decriptare care realizează transformări criptografice inverse asupra textului cifrat;
k2 este cheia folosită pentru decriptarea informațiilor.

Conceptul de „cheie” din standardul GOST 28147-89 (algoritm de criptare simetrică) este definit după cum urmează: „o stare secretă specifică a unor parametri ai algoritmului de transformare criptografică, asigurând selecția unei transformări dintr-un set de posibili pentru a acestui algoritm transformări". Cu alte cuvinte, cheia este un element unic cu care puteți modifica rezultatele algoritmului de criptare: același text sursă atunci când este utilizat chei diferite va fi criptat diferit.

Pentru ca rezultatul decriptării să coincidă cu mesaj original(adică, pentru M" = M), două condiții trebuie îndeplinite simultan. În primul rând, funcția de decriptare D trebuie să corespundă funcției de criptare E. În al doilea rând, cheia de decriptare k2 trebuie să corespundă cheii de criptare k1.

Dacă pentru criptare a fost folosit un algoritm de criptare puternic din punct de vedere criptografic, atunci în absența cheii corecte k2 este imposibil să se obțină M" = M. Puterea criptografică este principala caracteristică a algoritmilor de criptare și indică în primul rând gradul de complexitate al obținerii originalei. text dintr-un text criptat fără cheie k2.

Algoritmii de criptare pot fi împărțiți în două categorii: simetrici și criptare asimetrică. Pentru primul, raportul dintre cheile de criptare și de decriptare este definit ca k1 = k2 = k (adică, funcțiile E și D folosesc aceeași cheie de criptare). Cu criptarea asimetrică, cheia de criptare k1 este calculată din cheia k2 în așa fel încât transformarea inversă să fie imposibilă, de exemplu, folosind formula k1 = ak2 mod p (a și p sunt parametrii algoritmului utilizat).

Criptare simetrică

Algoritmii de criptare simetrică datează din cele mai vechi timpuri: această metodă de a ascunde informații a fost folosită de împăratul roman Gaius Julius Caesar în secolul I î.Hr. e., iar algoritmul inventat de el este cunoscut sub numele de „criptosistem Caesar”.

În prezent, cel mai cunoscut algoritm de criptare simetrică este DES (Data Standard de criptare), dezvoltat în 1977. Până de curând, a fost un „standard american” deoarece guvernul acelei țări a recomandat utilizarea lui pentru implementare diverse sisteme criptarea datelor. În ciuda faptului că DES a fost inițial planificat să fie utilizat pentru cel mult 10-15 ani, încercările de a-l înlocui au început abia în 1997.

Nu vom trata DES în detaliu (aproape toate cărțile de pe lista de materiale suplimentare îl au descriere detaliata), și să trecem la algoritmi de criptare mai moderni. Este de remarcat doar faptul că principalul motiv pentru modificarea standardului de criptare este puterea sa criptografică relativ slabă, motiv pentru care lungimea cheii DES este de numai 56 de biți semnificativi. Se știe că orice algoritm de criptare puternic poate fi spart încercând toate cheile de criptare posibile (așa-numita metodă de forță brută - forta bruta atac). Este ușor de calculat că un grup de 1 milion de procesoare, fiecare calculând 1 milion de chei pe secundă, va verifica 256 de variante de chei DES în aproape 20 de ore. Și deoarece, conform standardelor actuale, astfel de putere de calcul sunt destul de reale, este clar că cheia pe 56 de biți este prea scurtă și algoritmul DES trebuie înlocuit cu unul mai puternic.

Astăzi, doi algoritmi moderni de criptare puternici sunt din ce în ce mai utilizați: standardul intern GOST 28147-89 și noul standard cripto din SUA - AES (Advanced Encryption Standard).

Standard GOST 28147-89

Algoritmul definit de GOST 28147-89 (Fig. 1) 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). Subblocul N1 este în curs de procesare într-un anumit fel, după care valoarea sa se adaugă la valoarea subblocului N2 (adăugarea se efectuează modulo 2, adică se aplică operația logică XOR - „exclusiv sau”), iar apoi subblocurile sunt schimbate. Această transformare se efectuează de un anumit număr de ori („runde”): 16 sau 32, în funcție de modul de funcționare al algoritmului. În fiecare rundă se efectuează două operații.

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.

Inlocuiri de tabel(Cutie de substituție - 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 - 4 biți) are propriul său reprezentare numerică, care specifică 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 operare: înlocuire simplă, joc, joc cu părereși generarea de prefixe de imitație. Ei folosesc aceeași transformare de criptare descrisă mai sus, dar, deoarece scopul modurilor este diferit, această transformare se realizează diferit în fiecare dintre ele.

În modul inlocuire usoara Pentru a cripta fiecare bloc de informații pe 64 de biți, sunt efectuate cele 32 de runde descrise mai sus. Î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.

Decodificare în acest mod se desfășoară 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 de criptare de 64 de biți. Cifrul gamma este o secvență specială care se obține în urma anumitor operații cu registrele N1 și N2 (vezi Fig. 1).

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 este criptat (în în acest caz,- sincronizare mesaje) î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-un mod 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).

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 feedback gamma, pentru a umple registrele N1 și N2, începând cu al 2-lea bloc, nu se folosește blocul gamma anterior, ci rezultatul criptării blocului de text simplu anterior (Fig. 2). Primul bloc din acest mod este generat complet similar cu cel anterior.

Orez. 2. Dezvoltarea unui cifr gamma în modul gamma cu feedback.

Având în vedere modul generarea de prefixe de imitaţie, ar trebui definit conceptul de subiect al generației. Prefixul de imitație este un criptografic verifica suma, calculat folosind cheia de criptare și conceput pentru a verifica integritatea mesajelor. La generarea prefixelor de imitație, se efectuează următoarele: urmatoarele operatii: primul bloc de informații pe 64 de biți pentru care se calculează prefixul de imitație este scris în registrele N1 și N2 și criptat în modul de înlocuire simplă redusă (se efectuează 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ă când ultimul bloc informație. 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 modificare a mesajului să treacă neobservată este egală cu 2-r. Cel mai adesea, un Se folosește prefixul de imitație de 32 de biți, adică jumătate din conținutul registrelor. Acest lucru este suficient, deoarece, ca orice sumă de control, 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, altele metode criptografice- în primul rând o semnătură digitală electronică.

La schimbul de informații, prefixul de imitație servește ca un fel de 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 corectitudinii decriptării informatie cheie atunci când se utilizează scheme cu mai multe chei.

Algoritmul GOST 28147-89 este considerat un algoritm foarte puternic - în prezent nu a mai fost propus pentru dezvăluire metode eficiente decât metoda „forței brute” 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).

Standardul AES

Spre deosebire de algoritmul GOST 28147-89, care a rămas secret mult timp, standard american Criptare AES, destinat să înlocuiască DES, a fost selectat printr-un concurs deschis în care toate organizațiile și persoanele interesate au putut studia și comenta algoritmii candidați.

Un concurs pentru înlocuirea DES a fost anunțat în 1997. Institutul National Standarde și tehnologii din SUA (NIST - Institutul Național de Standarde și Tehnologie). La concurs au fost supuși 15 algoritmi candidați, dezvoltați atât de organizații cunoscute din domeniul criptografiei (RSA Security, Counterpane etc.), cât și de persoane fizice. Rezultatele competiției au fost anunțate în octombrie 2000: câștigătorul a fost algoritmul Rijndael, dezvoltat de doi criptografi din Belgia, Vincent Rijmen și Joan Daemen.

Algoritmul Rijndael nu este similar cu cei mai cunoscuți algoritmi de criptare simetrică, a căror structură se numește „rețea Feistel” și este similară cu GOST rusesc 28147-89. Particularitatea rețelei Feistel este că valoarea de intrare este împărțită în două sau mai multe subblocuri, dintre care o parte în fiecare rundă este procesată conform unei anumite legi, după care este suprapusă subblocurilor neprocesate (vezi Fig. 1).

Spre deosebire de standardul de criptare autohton, algoritmul Rijndael reprezintă un bloc de date sub forma unei matrice bidimensionale de octeți de dimensiunea 4X4, 4X6 sau 4X8 (este permisă utilizarea mai multor dimensiuni fixe ale blocului de informații criptat). Toate operațiunile sunt efectuate pe octeți individuali ai matricei, precum și pe coloane și rânduri independente.

Algoritmul Rijndael efectuează patru transformări: BS (ByteSub) - înlocuirea tabelului a fiecărui octet al matricei (Fig. 3); SR (ShiftRow) - deplasarea rândurilor matricei (Fig. 4). Cu această operație, prima linie rămâne neschimbată, iar restul sunt deplasate ciclic octet cu octet la stânga cu un număr fix de octeți, în funcție de dimensiunea matricei. De exemplu, pentru o matrice 4X4, liniile 2, 3 și 4 sunt deplasate cu 1, 2 și, respectiv, 3 octeți. Urmează MC (MixColumn) - o operație pe coloane matrice independente (Fig. 5), când fiecare coloană este înmulțită cu o matrice fixă ​​c(x) conform unei anumite reguli. Și, în sfârșit, AK (AddRoundKey) - adăugarea unei chei. Fiecare bit al matricei este adăugat modulo 2 cu bitul corespunzător al cheii rotunde, care, la rândul său, este calculat într-un anumit mod din cheia de criptare (Fig. 6).


Orez. 3. Operațiunea BS.

Orez. 4. Operațiunea SR.

Orez. 5. Operațiunea MC.

Numărul de runde de criptare (R) în algoritmul Rijndael este variabil (10, 12 sau 14 runde) și depinde de dimensiunea blocului și de cheia de criptare (există și mai multe dimensiuni fixe pentru cheie).

Decriptarea se realizează utilizând următoarele operații inverse. O inversare a tabelului și înlocuirea tabelului sunt efectuate pe tabelul invers (față de cel utilizat în timpul criptării). Operația inversă față de SR este de a roti rândurile spre dreapta și nu spre stânga. Operația inversă pentru MC este înmulțirea folosind aceleași reguli cu o altă matrice d(x) care îndeplinește condiția: c(x) * d(x) = 1. Adăugarea cheii AK este inversul acesteia, deoarece folosește doar XOR Operațiune. Aceste operatii inverse sunt utilizate în timpul decriptării în secvența inversă celei utilizate în timpul criptării.

Rijndael a devenit noul standard pentru criptarea datelor datorită unui număr de avantaje față de alți algoritmi. În primul rând, oferă de mare viteză criptare pe toate platformele: atât în ​​implementare software cât și hardware. Se distinge incomparabil cele mai bune oportunități paralelizarea calculelor în comparație cu alți algoritmi supuși concursului. În plus, cerințele de resurse pentru funcționarea sa sunt minime, ceea ce este important atunci când este utilizat în dispozitive cu capacități de calcul limitate.

Singurul dezavantaj al algoritmului poate fi considerat schema sa neconvențională inerentă. Faptul este că proprietățile algoritmilor bazați pe rețeaua Feistel au fost bine cercetate, iar Rijndael, în schimb, poate conține vulnerabilități ascunse care pot fi descoperite doar după ce a trecut ceva timp de la începutul utilizării sale pe scară largă.

Criptare asimetrică

Algoritmii de criptare asimetrică, după cum sa menționat deja, folosesc două chei: k1 - cheia de criptare sau publică și k2 - cheia de decriptare sau secretă. Cheie publică calculat din secretul: k1 = f(k2).

Algoritmii de criptare asimetrică se bazează pe utilizarea funcțiilor unidirecționale. Conform definiției, o funcție y = f(x) este unidirecțională dacă: este ușor de calculat pentru toate opțiuni posibile x și pentru cele mai multe valori posibile ale lui y, este destul de dificil să se calculeze o valoare a lui x astfel încât y = f(x).

Un exemplu de funcție unidirecțională este înmulțirea a două numere mari: N = P*Q. În sine, o astfel de înmulțire este o operație simplă. Cu toate acestea, funcția inversă (descompunerea lui N în doi factori mari), numită factorizare, conform estimărilor timpului modern, este destul de complexă. problema de matematica. De exemplu, factorizarea N cu o dimensiune de 664 biți la P ? Q va necesita aproximativ 1023 de operații, iar pentru a calcula invers x pentru exponentul modular y = ax mod p cu cunoscute a, p și y (cu aceleași dimensiuni de a și p) trebuie să efectuați aproximativ 1026 de operații. Ultimul exemplu dat se numește Problema logaritmului discret (DLP), iar acest tip de funcție este adesea folosit în algoritmii de criptare asimetrică, precum și în algoritmii utilizați pentru a crea o semnătură digitală electronică.

O altă clasă importantă de funcții utilizate în criptarea asimetrică sunt funcțiile backdoor unidirecționale. Definiția lor afirmă că o funcție este unidirecțională cu o ușă din spate dacă este unidirecțională și poate fi calculată eficient funcție inversă x = f-1(y), adică dacă „pasajul secret” este cunoscut (un anumit număr secret, în aplicarea algoritmilor de criptare asimetrică - valoarea cheii secrete).

Funcțiile backdoor unidirecționale sunt utilizate în algoritmul de criptare asimetric RSA, utilizat pe scară largă.

algoritmul RSA

Dezvoltat în 1978 de trei autori (Rivest, Shamir, Adleman), și-a primit numele de la primele litere ale numelor dezvoltatorilor. Fiabilitatea algoritmului se bazează pe dificultatea factorizării numerelor mari și calculării logaritmilor discreti. Parametrul principal algoritmul RSA- modulul sistemului N, conform căruia se efectuează toate calculele din sistem și N = P*Q (P și Q sunt simple aleatoare secrete numere mari, de obicei de aceeași dimensiune).

Cheia secretă k2 este selectată la întâmplareși trebuie să îndeplinească următoarele condiții:

1

unde GCD este cel mai mare divizor comun, adică k1 trebuie să fie coprime față de valoarea funcției Euler F(N), aceasta din urmă fiind egală cu numărul de numere întregi pozitive din intervalul de la 1 la N coprime la N și se calculează ca F(N) = (P - 1)*(Q - 1).

Cheia publică k1 se calculează din relație (k2*k1) = 1 mod F(N), iar în acest scop se folosește algoritmul euclidian generalizat (algoritm de calcul al celui mai mare divizor comun). Criptarea blocului de date M folosind algoritmul RSA se realizează după cum urmează: C=M [la puterea k1] mod N. Rețineți că, deoarece într-un criptosistem real care utilizează RSA numărul k1 este foarte mare (în prezent, dimensiunea sa poate ajunge până la 2048 de biți), calculul direct al lui M [la puterea k1] ireal. Pentru a-l obține, se folosește o combinație de pătrat repetat a lui M și înmulțirea rezultatelor.

Inversarea acestei funcții pentru dimensiuni mari nu este fezabilă; cu alte cuvinte, este imposibil să găsim M având în vedere C, N și k1 cunoscute. Cu toate acestea, având o cheie secretă k2, folosind transformări simple se poate calcula M = Ck2 mod N. Evident, pe lângă cheia secretă în sine, este necesar să se asigure secretul parametrilor P și Q. Dacă un atacator obține valorile acestora , el va putea calcula cheia secretă k2.

Care criptare este mai bună?

Principalul dezavantaj al criptării simetrice este necesitatea de a transfera cheile „din mână în mână”. Acest dezavantaj este foarte grav, deoarece face imposibilă utilizarea criptării simetrice în sistemele cu un număr nelimitat de participanți. Cu toate acestea, în caz contrar, criptarea simetrică are unele avantaje care sunt clar vizibile pe fondul dezavantajelor serioase ale criptării asimetrice.

Prima dintre ele este viteza redusă a operațiunilor de criptare și decriptare, din cauza prezenței operațiunilor care consumă intens resurse. Un alt dezavantaj „teoretic” este că puterea criptografică a algoritmilor de criptare asimetrică nu a fost dovedită matematic. Acest lucru se datorează în primul rând problemei logaritmului discret - încă nu s-a dovedit că soluția sa într-un timp acceptabil este imposibilă. Dificultăți inutile sunt create și de necesitatea de a proteja cheile publice împotriva înlocuirii - prin înlocuirea cheii publice a unui utilizator legal, un atacator va putea cripta un mesaj important cu cheia sa publică și, ulterior, îl va decripta cu ușurință cu cheia sa privată.

Cu toate acestea, aceste neajunsuri nu împiedică utilizarea pe scară largă a algoritmilor de criptare asimetrică. Astăzi există criptosisteme care acceptă certificarea cheilor publice, precum și combinarea algoritmilor de criptare simetrici și asimetrici. Dar acesta este un subiect pentru un articol separat.

Surse suplimentare de informații

Pentru acei cititori care sunt serios interesați de criptare, autorul recomandă lărgirea orizontului lor cu ajutorul cărților următoare.

  1. Brassard J. „Criptologie modernă”.
  2. Petrov A. A. „Securitatea computerelor: metode criptografice de protecție”.
  3. Romanets Yu. V., Timofeev P. A., Shangin V. F. „Protecția informațiilor în sistemele informatice moderne”.
  4. Sokolov A.V., Shangin V.F. „Protecția informațiilor în rețelele și sistemele corporative distribuite”.

O descriere completă a algoritmilor de criptare poate fi găsită în următoarele documente:

  1. GOST 28147-89. Sistem de prelucrare a informațiilor. Protecție criptografică. Algoritm de conversie criptografică. - M.: Standardul de stat al URSS, 1989.
  2. Algoritmul AES: http://www.nist.gov/ae.
  3. Algoritm RSA: http://www.rsasecurity.com/rsalabs/pkcs/pkcs-1.

În secolul 21, criptografia joacă un rol serios în viața digitală a oamenilor moderni. Să ne uităm pe scurt la modalitățile de criptare a informațiilor.

Criptografia nu este doar ceva computerizat

Cel mai probabil, ați întâlnit deja criptografia de bază și poate cunoașteți câteva metode de criptare. De exemplu, Cifrul Caesar este adesea folosit în jocurile educaționale pentru copii.

ROT13 este un alt tip comun de criptare a mesajelor. În ea, fiecare literă a alfabetului este deplasată cu 13 poziții, așa cum se arată în figură:

După cum puteți vedea, acest cifru nu oferă o securitate a informațiilor cu adevărat fiabilă: este un exemplu simplu și de înțeles al întregii idei de criptografie.

Astăzi vorbim despre criptografie cel mai des în contextul unor tehnologii. Cum sunt transmise informațiile personale și financiare în siguranță atunci când facem o achiziție online sau vedem conturi bancare? Cum poți stoca datele în siguranță, astfel încât nimeni să nu-ți deschidă computerul, să scoată hard disk-ul și să aibă acces deplin la toate informațiile de pe acesta? Vom răspunde la aceste și la alte întrebări în acest articol.

Definiții de securitate cibernetică și Ghid de pornire rapidă

În securitatea cibernetică, există o serie de lucruri care îngrijorează utilizatorii când vine vorba de orice date. Acestea includ confidențialitatea, integritatea și disponibilitatea informațiilor.

Confidențialitate– datele nu pot fi primite sau citite de utilizatori neautorizați.

Integritatea informațiilor– încredere că informațiile vor rămâne 100% intacte și nu vor fi modificate de către un atacator.

Disponibilitatea informațiilor– obținerea accesului la date atunci când este necesar.

Acest articol va analiza, de asemenea, diferitele forme de criptografie digitală și modul în care acestea pot ajuta la atingerea obiectivelor enumerate mai sus.

Metode de bază de criptare:
  • Simetric
  • Asimetric
  • Hashing
  • Semnatura digitala

Criptare simetrică

Înainte de a aborda subiectul, să răspundem la o întrebare simplă: ce se înțelege exact prin „criptare”? Criptarea este transformarea informațiilor pentru a le ascunde de persoanele neautorizate, permițând în același timp utilizatorilor autorizați accesul la ea.

Pentru a cripta și decripta corect datele, aveți nevoie de două lucruri: datele și cheia de decriptare. Când utilizați criptarea simetrică, cheia pentru criptarea și decriptarea datelor este aceeași. Să luăm un șir și să-l criptăm folosind Ruby și OpenSSL:

Rubin

require "openssl" require "pry" data_to_encrypt = "acum poți să mă citești!" cipher = OpenSSL::Cipher.new("aes256") cipher.encrypt cheie = cipher.random_key iv = cipher.random_iv data_to_encrypt = cipher.update(data_to_encrypt) + cipher.final binding.pry true

necesită „openssl”

necesită „prietă”

cipher = OpenSSL::Cipher. nou ("aes256")

cifru cripta

cheie = cifr . cheie_aleatorie

iv = cifr . aleatoriu_iv

data_to_encrypt = cifrare . update(data_to_encrypt) + cipher. final

legare. desface

Adevărat

Acesta este ceea ce va scoate programul:

Vă rugăm să rețineți că variabila date_to_encrypt, care a fost inițial rândul „acum poți să mă citești!” este acum o grămadă de personaje de neînțeles. Să inversăm procesul folosind cheia care a fost stocată inițial într-o variabilă cheie.

După ce folosim aceeași cheie pe care am setat-o ​​pentru criptare, decriptăm mesajul și obținem șirul original.

Să ne uităm la alte metode de criptare.

Criptare asimetrică

Problema cu criptarea simetrică este următoarea: să presupunem că trebuie să trimiteți niște date prin Internet. Dacă aceeași cheie este necesară pentru a cripta și decripta datele, atunci se dovedește că cheia trebuie trimisă mai întâi. Aceasta înseamnă că cheia va trebui trimisă printr-o conexiune nesigură. Dar în acest fel cheia poate fi interceptată și utilizată de o terță parte. Pentru a evita acest rezultat, a fost inventată criptarea asimetrică.

Pentru a utiliza criptarea asimetrică, trebuie să generați două chei legate matematic. Una este o cheie privată la care aveți acces numai dvs. Al doilea este deschis, care este disponibil publicului.

Să ne uităm la un exemplu de comunicare folosind criptarea asimetrică. În acesta, serverul și utilizatorul își vor trimite mesaje unul altuia. Fiecare dintre ele are două chei: privată și publică. S-a spus mai devreme că cheile sunt conectate. Acestea. Un mesaj criptat cu o cheie privată poate fi decriptat numai folosind o cheie publică adiacentă. Prin urmare, pentru a începe comunicarea, trebuie să faceți schimb de chei publice.

Dar cum înțelegeți că cheia publică a serverului aparține acestui server anume? Există mai multe moduri de a rezolva această problemă. Cea mai comună metodă (și cea folosită pe Internet) este utilizarea unei infrastructuri cu chei publice (PKI). În cazul site-urilor web, există o Autoritate de Certificare, care are un director cu toate site-urile web pentru care au fost emise certificate și chei publice. Când vă conectați la un site web, cheia publică a acestuia este mai întâi verificată de o autoritate de certificare.

Să creăm o pereche de chei publice și private:

Rubin

require "openssl" require "pry" data_to_encrypt = "acum poți să mă citești!" cheie = OpenSSL::PKey::RSA.new(2048) binding.pry true

necesită „openssl”

necesită „prietă”

data_to_encrypt = "acum poți să mă citești!"

cheie = OpenSSL::PKey::RSA. nou (2048)

legare. desface

Adevărat

Se va dovedi:

Rețineți că cheia privată și cheia publică sunt entități separate cu identificatori diferiți. Folosind #private_encrypt, puteți cripta un șir folosind o cheie privată și folosind #public_decrypt– decriptează mesajul:

Informații de hashing

Hashing, spre deosebire de criptarea simetrică și asimetrică, este o funcție unidirecțională. Este posibil să creați un hash din unele date, dar nu există nicio modalitate de a inversa procesul. Acest lucru face ca hashingul să nu fie un mod foarte convenabil de a stoca date, dar este potrivit pentru verificarea integrității unor date.

Funcția preia unele informații ca intrare și scoate la ieșire un șir aparent aleatoriu care va avea întotdeauna aceeași lungime. O funcție de hashing ideală produce valori unice pentru diferite intrări. Aceeași intrare va produce întotdeauna același hash. Prin urmare, hashingul poate fi utilizat pentru a verifica integritatea datelor.