Criptarea RSA este un sistem care rezolvă ceea ce a fost odată una dintre cele mai mari probleme în criptografie: Cum poți trimite cuiva un mesaj codat fără a avea posibilitatea de a partaja anterior codul cu ei?
Acest articol vă va învăța tot ce trebuie să știți modul în care s-a dezvoltat criptarea RSA, cum functioneaza, matematica din spatele ei, la ce se folosește precum și unele dintre cele mai mari probleme de securitate cu care se confruntă. Învățarea despre RSA vă va oferi câteva cunoștințe fundamentale care vă ajută să înțelegeți câte părți din viața noastră online sunt păstrate în siguranță.
Ce este criptarea RSA?
Să spunem că vrei să-i spui prietenului tău un secret. Dacă ești chiar lângă ei, poți doar să-i șoptești. Dacă vă aflați în părți opuse ale țării, asta nu va funcționa, evident. Ați putea să-l scrieți și să-l trimiteți prin e-mail sau să folosiți telefonul, dar fiecare dintre aceste canale de comunicare este nesigur iar oricine cu o motivație suficient de puternică ar putea intercepta cu ușurință mesajul.
Dacă secretul era suficient de important, nu ai risca să-l scrii în mod normal – spionii sau un angajat poștal necinstit ar putea căuta prin poștă. În mod similar, cineva ar putea să atingă telefonul dvs. fără să vă cunoască și să înregistreze fiecare apel pe care îl faceți.
O soluție pentru prevenirea accesului conținutului mesajelor este ca: criptați-l. Practic aceasta înseamnă să adăugați un cod la mesaj care îl schimbă într-o încurcătură. Dacă codul dvs. este suficient de complex, atunci singurele persoane care vor putea accesa mesajul inițial sunt cele care au acces la cod.
Dacă ați avut anterior șansa de a partaja codul cu prietenul, atunci oricare dintre voi poate trimite oricând un mesaj criptat, știind că voi doi sunteți singurii cu capacitatea de a citi conținutul mesajului. Dar dacă nu aveți nicio șansă să partajați codul dinainte?
Aceasta este una dintre problemele fundamentale ale criptografiei, care a fost abordată de către scheme de criptare cu cheie publică (cunoscute și sub denumirea de criptare asimetrică) precum RSA.
Sub criptare RSA, mesajele sunt criptate cu un cod numit a cheie publică, care poate fi împărtășit deschis. Datorită unor proprietăți matematice distincte ale algoritmului RSA, odată ce un mesaj a fost criptat cu cheia publică, acesta poate fi decriptat doar de o altă cheie, cunoscută sub numele de cheie privată. Fiecare utilizator RSA are o pereche de chei formată din cheile publice și private. După cum sugerează și numele, cheia privată trebuie păstrată secretă.
Schemele de criptare a cheilor publice diferă de criptare cu cheie simetrică, unde atât procesul de criptare cât și procesul de decriptare utilizează aceeași cheie privată. Aceste diferențe fac ca criptarea cheilor publice ca RSA să fie utilă pentru comunicarea în situațiile în care nu a existat nicio ocazie de a distribui în siguranță cheile.
Algoritmii cu cheie simetrică au aplicații proprii, cum ar fi criptarea datelor pentru uz personal sau când există canale sigure pe care cheile private pot fi partajate.
Vezi si: Criptografie cu cheie publică
Unde se utilizează criptarea RSA?
Adesea se utilizează criptarea RSA combinație cu alte scheme de criptare, sau pentru semnături digitale care poate dovedi autenticitatea și integritatea unui mesaj. În general nu este folosit pentru criptarea mesajelor sau fișierelor întregi, deoarece este mai puțin eficient și mai greu de resurse decât criptarea cu cheie simetrică.
Pentru a face lucrurile mai eficiente, un fișier va fi, în general, criptat cu un algoritm cu cheie simetrică, apoi cheia simetrică va fi criptată cu criptare RSA. În cadrul acestui proces, numai o entitate care are acces la cheia privată RSA va putea decripta cheia simetrică.
Fără a putea accesa tasta simetrică, fișierul original nu poate fi decriptat. Această metodă poate fi utilizată pentru a păstra securitatea mesajelor și a fișierelor, fără a lua prea mult timp sau a consuma prea multe resurse de calcul.
Criptarea RSA poate fi utilizată în mai multe sisteme diferite. Poate fi implementat în OpenSSL, wolfCrypt, cryptlib și o serie de alte biblioteci criptografice.
Ca unul dintre primele scheme de criptare cu cheie publică utilizate pe scară largă, RSA a pus bazele pentru o mare parte din comunicațiile noastre sigure. A fost folosit în mod tradițional în TLS și a fost, de asemenea, algoritmul original utilizat în criptarea PGP. RSA este încă văzută într-o serie de browsere web, e-mail, VPN-uri, chat și alte canale de comunicare.
RSA este adesea folosită pentru a realiza conexiuni sigure între clienții VPN și serverele VPN. În cadrul protocoalelor precum OpenVPN, strângerile de mână TLS pot utiliza algoritmul RSA pentru a schimba cheile și a stabili un canal securizat.
Fundalul criptării RSA
Așa cum am menționat la începutul acestui articol, înainte de criptarea cheilor publice, a fost o provocare să comunicăm în siguranță dacă nu a existat în prealabil șansa de a schimba cheile în siguranță. Dacă nu a existat oportunitatea de a partaja codul în timp sau un canal sigur prin care pot fi distribuite cheile, nu exista nicio modalitate de a comunica fără amenințarea inamicilor de a putea intercepta și accesa conținutul mesajului..
Abia în anii ’70 lucrurile au început să se schimbe cu adevărat. Prima evoluție importantă către ceea ce numim acum criptografia cu cheie publică a fost publicată la începutul deceniului de către James H. Ellis. Ellis nu a găsit o modalitate de a-și pune în aplicare munca, dar a fost extins de colegul său Clifford Cocks pentru a deveni ceea ce știm acum ca Criptare RSA.
Piesa finală a puzzle-ului este ceea ce numim acum Schimb de chei Diffie-Hellman. Malcolm J. Williamson, un alt coleg de serviciu, și-a dat seama de o schemă care a permis celor două părți să partajeze o cheie de criptare, chiar dacă canalul era monitorizat de adversari.
Toate aceste lucrări au fost întreprinse la agenția de informații din Marea Britanie, sediul Guvernului Comunicațiilor (GCHQ), care a menținut descoperirea clasificată. Parțial datorită limitărilor tehnologice, GCHQ nu a putut vedea o utilizare pentru criptografia cu chei publice la vremea respectivă, astfel că dezvoltarea s-a așezat pe loc pe raftul care adună praf. Abia în 1997, lucrarea a fost declasificată și au fost recunoscuți inventatorii originali ai RSA.
Câțiva ani mai târziu, concepte similare au început să se dezvolte în sfera publică. Ralph Merkle a creat o formă timpurie de criptografie cu cheie publică, care i-a influențat pe Whitfield Diffie și Martin Hellman în proiectarea schimbului de chei Diffie-Hellman.
Ideilor lui Diffie și Hellman lipseau un aspect important care ar face din activitatea lor un fundament al criptografiei cu chei publice. Acesta a fost un funcție unidirecțională care ar fi dificil de inversat. În 1977, Ron Rivest, Adi Shamir și Leonard Adleman, ale căror nume de familie formează acronimul RSA, au venit cu o soluție după un an de muncă asupra problemei.
Academicienii din MIT și-au făcut descoperirea după o petrecere de Paște în 1977. După o noapte de băut, Rivest a plecat acasă, dar în loc să doarmă, și-a petrecut seara scriind febril o hârtie care și-a oficializat ideea pentru funcția necesară unidirecțional..
Ideea a fost patentată în 1983 de MIT, dar abia în primele zile ale internetului algoritmul RSA a început să vadă adoptarea pe scară largă ca instrument important de securitate.
Cum funcționează criptarea RSA?
Următorul lucru va fi o simplificare, pentru că probabil prea mulți cititori au fost speriați de profesorul lor de matematică. Pentru a împiedica matematica să nu fie prea scăpată, vom fi simplificarea unor concepte și folosirea unor numere mult mai mici. În realitate, criptarea RSA folosește numere prime cu o dimensiune mult mai mare și există alte câteva complexități.
Există mai multe concepte diferite pe care va trebui să le ridicați în cap înainte să vă putem explica cum se potrivește toate. Acestea includ funcții trapdoor, generând prime, funcția totientă a lui Carmichael și procesele separate implicate în calcularea cheilor publice și private utilizat în procesele de criptare și decriptare.
Funcțiile ușii capcane
Criptarea RSA funcționează sub premisa că algoritmul este ușor de calculat într-o direcție, dar aproape imposibil invers. Ca exemplu, dacă vi s-a spus că 701.111 este un produs cu două numere prime, v-ați putea da seama care sunt aceste două numere.?
Chiar și cu un calculator sau un computer, majoritatea dintre noi nu ar avea idee de unde să înceapă, cu atât mai puțin să putem afla răspunsul. Dar dacă învârtim lucrurile, devine mult mai ușor. Care este rezultatul:
907 x 773
Dacă te-ai plictisi suficient, ai fi putut să-ți biciuiești telefonul sau poate să-l calculezi în cap pentru a descoperi că răspunsul este 701.111 menționat anterior. Aceste 907 și 773 sunt numerele primare care răspund la prima noastră întrebare, ceea ce ne arată că anumite ecuații pot fi ușor de realizat într-un fel, dar aparent imposibile în sens invers.
Un alt aspect interesant al acestei ecuații este faptul că este simplu să-ți dai seama de unul dintre numerele prime dacă îl ai deja pe celălalt, precum și produsul. Dacă vi se spune că 701.111 este rezultatul 907 înmulțit cu un alt număr prim, puteți să-l calculați pe celălalt prim cu următoarea ecuație:
701.111 ÷ 907 = 773
Deoarece relația dintre aceste numere este simplă de calculat într-o direcție, dar incredibil de grea în sens invers, ecuația este cunoscută ca funcție ușă capcană. Fiți conștienți că, deși exemplul de mai sus le este greu să își dea seama de oameni, calculatoarele pot efectua operațiunea într-o perioadă de timp banală.
Din această cauză, RSA folosește un număr mult mai mare. Mărimea primelor într-o implementare RSA reală variază, dar în RSA pe 2048 biți, acestea s-ar reuni pentru a face chei care au o lungime de 617 cifre. Pentru a vă ajuta să îl vizualizați, o cheie ar fi un număr de această dimensiune:
99999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999
Generarea primelor
Funcțiile ușii capcană menționate mai sus stau la baza modului în care funcționează schemele de criptare cu cheie publică și privată. Proprietățile lor permit distribuirea cheilor publice fără a pune în pericol mesajul sau a dezvălui cheia privată. De asemenea, acestea permit criptarea datelor cu o cheie într-un mod care poate fi decriptat doar de cealaltă cheie din pereche.
Primul pas pentru criptarea unui mesaj cu RSA este să generați cheile. Pentru a face acest lucru, avem nevoie două numere prime (p și q) care sunt selectate cu un test de primordialitate. Un test de primitivitate este un algoritm care găsește eficient numere prime, cum ar fi testul de primărie Rabin-Miller.
Numerele prime din RSA trebuie să fie foarte mari și, de asemenea, relativ departe. Numerele care sunt mici sau mai aproape împreună sunt mult mai ușor de spart. În ciuda acestui fapt, exemplul nostru va folosi un număr mai mic pentru a face lucrurile mai ușor de urmărit și de calculat.
Să presupunem că testul de primărie ne oferă numerele prime pe care le-am folosit mai sus, 907 și 773. Următorul pas este să descoperim modulul (n), folosind următoarea formulă:
n = p X q
Unde p = 907 și q = 773
Prin urmare:
n = 907 x 773
n = 701.111
Funcția totală a lui Carmichael
Odată ce avem n, folosim Funcția totală a lui Carmichael:
λ(n) = LCM (p – 1, q – 1)
Dacă a trecut ceva timp de când ați lovit manualele de matematică, cele de mai sus ar putea părea un pic înspăimântătoare. Puteți sări peste această parte și puteți avea încredere că matematica funcționează, altfel rămâneți cu noi pentru alte câteva calcule. Totul va fi explicat în cât mai multe detalii posibil pentru a vă ajuta să vă orientați capul în jurul elementelor de bază.
Pentru cei care nu sunt conștienți, λ (n) reprezintă totientul pentru Carmichael pentru n, in timp ce LCM înseamnă cel mai mic multiplu comun, care este cel mai mic număr care ambele p și q se poate împărți în. Există câteva moduri diferite de a descoperi acest lucru, dar cel mai simplu este să ai încredere într-un calculator online pentru a face ecuația pentru tine. Deci, să punem numerele noastre în ecuație:
λ(701111) = LCM (907 – 1, 773 – 1)
λ(701111) = LCM (906, 772)
Folosind calculatorul legat mai sus, aceasta ne oferă:
λ(701111) = 349.716
Generarea cheii publice
Acum, că avem Carmichael totientul numerelor noastre principale, este este timpul să ne dăm seama de cheia noastră publică. În conformitate cu RSA, cheile publice sunt formate dintr-un număr prim e, precum și n. Numarul e poate fi orice între 1 și valoarea pentru λ(n), care în exemplul nostru este 349.716.
Deoarece cheia publică este partajată deschis, nu este atât de importantă e a fi un număr aleatoriu. In practica, e se stabilește în general la 65537, deoarece atunci când se aleg numere mult mai mari la întâmplare, aceasta face mult mai puțin eficientă criptarea. Pentru exemplul de astăzi, vom păstra numerele mici pentru a face calculele eficiente. Sa spunem:
e = 11
Datele noastre criptate finale se numesc cifru text (c). O derivăm din mesajul nostru în text integral (m), prin aplicarea cheii publice cu următoarea formulă:
c = me mod n
Am venit deja e și știm n de asemenea. Singurul lucru pe care trebuie să-l explicăm este mod. Este un pic din profunzimea acestui articol, dar se referă la modul de operare, ceea ce înseamnă, în esență, restul rămas atunci când împărțiți o parte de cealaltă. De exemplu:
10 mod 3 = 1
Acest lucru se datorează faptului că 3 merge în 10 de trei ori, cu restul de 1.
Înapoi la ecuația noastră. Pentru a păstra lucrurile simple, să spunem asta mesajul (m) că dorim să criptăm și să păstrăm secretul este doar un singur număr, 4. Haideți să conectăm totul:
c = me mod n
c = 411 mod 701111
c = 4.194.304 mod 701111
Din nou, pentru a face modul de operare ușor, vom folosi un calculator online, dar sunteți bineveniți să vă dați seama. Prin introducerea 4.194.304 în calculatorul online, ne oferă:
c = 688.749
Prin urmare, atunci când folosim RSA pentru a cripta mesajul nostru, 4, cu cheia noastră publică, ne oferă cifră de text de 688.749. Pașii precedenți ar fi putut părea un pic prea matematici, dar este important să reiterăm ceea ce s-a întâmplat de fapt.
Noi am avut un mesaj de 4, pe care am vrut să-l păstrăm în secret. I-am aplicat o cheie publică, care ne-a dat rezultat criptat de 688.749. Acum că este criptat, putem trimite în siguranță numărul 688.749 proprietarului perechei de chei. Sunt singura persoană care va putea să o decripteze cu cheia lor privată. Când îl decriptează, vor vedea mesajul pe care îl trimitem cu adevărat, 4.
Generarea cheii private
În criptarea RSA, odată ce datele sau un mesaj au fost transformate în cifră de text cu o cheie publică, aceasta poate fi decriptată doar de cheia privată din aceeași pereche de chei. Cheile private sunt alcătuite din d și n. Știm deja n, iar următoarea ecuație este utilizată pentru a găsi d:
d = 1 /e mod λ(n)
În Generarea cheii publice secțiunea de mai sus, am decis deja că în exemplul nostru, e ar egala 11. În mod similar, știm asta λ(n) este echivalent cu 349.716 din lucrările noastre anterioare din Funcția totală a lui Carmichael. Lucrurile se complică puțin atunci când întâlnim această secțiune a formulei:
1 /e mod
Această ecuație poate părea că vă cere să împărțiți 1 cu 11, dar nu este cazul. În schimb, acest lucru simbolizează doar că trebuie să calculăm invers modular de e (care în acest caz este 11) și λ(n) (care în acest caz este 349.716).
În esență, asta înseamnă în loc să efectuăm o operație standard de modulo, vom folosi în schimb inversul. Acest lucru se găsește în mod normal cu algoritmul euclidian extins, dar este puțin în afara domeniului de aplicare al acestui articol, așa că vom înșela și vom folosi un calculator online. Acum că înțelegem tot ce se întâmplă, să adăugăm informațiile noastre în formula:
d = 1 /11 mod 349716
Pentru a efectua această operație, pur și simplu introduceți 11 (sau orice valoare aveți pentru e dacă încercați acest lucru cu propriul exemplu) unde se spune Întreg și 349.716 (sau orice valoare ai avea pentru λ(n) dacă încercați acest lucru cu propriul exemplu) unde se spune modulo în calculatorul online care a fost legat mai sus. Dacă ați făcut-o corect, ar trebui să obțineți un rezultat în care:
d = 254, 339
Acum că avem valoarea pentru d, putem decripta mesajele care au fost criptate cu cheia noastră publică folosind următoarea formulă:
m = cd mod n
Acum putem reveni la cifrul text pe care l-am criptat sub Generarea cheii private secțiune. Când am criptat mesajul cu cheia publică, acesta ne-a dat o valoare pentru c din 688.749. De sus, știm asta d este egal cu 254.339. Știm și asta n este egal cu 701.111. Aceasta ne oferă:
m = 688.749254339 mod 701111.
După cum ați observat, încercarea de a lua un număr la puterea de 254.339 poate fi un pic cam pentru majoritatea calculatoarelor normale. În schimb, vom folosi un calculator online de decriptare RSA. Dacă dorești să folosești o altă metodă, ai aplica puterile așa cum ai face în mod normal și ai efectua operațiunea modulului în același mod ca și în cazul Generarea cheii publice secțiune.
În calculatorul legat mai sus, introduceți 701.111 unde se spune Modulul de aprovizionare: N, 254.399 unde se spune Cheie de decriptare: D, și 688.749 unde se spune Ciphertext Mesaj în formă numerică, așa cum se arată mai jos:
După ce ați introdus datele, apăsați Decriptare, care va pune numerele prin formula de decriptare listată mai sus. Acest lucru vă va oferi mesajul original în caseta de mai jos. Dacă ați făcut totul corect, ar trebui să primiți un răspuns 4, care a fost mesajul original pe care l-am criptat cu cheia noastră publică.
Cum funcționează în practică criptarea RSA
Secțiunile de mai sus ar trebui să vă ofere o înțelegere rezonabilă a modului în care funcționează matematica din spatele criptării cheilor publice. Poate fi un pic confuz, dar chiar și cei care nu au înțeles complexitatea ecuațiilor pot, în speranță, să scoată informații importante despre proces..
În etapele enumerate mai sus, am arătat cum două entități pot comunica în siguranță, fără să fi partajat anterior un cod în prealabil. În primul rând, fiecare trebuie stabilesc propriile lor perechi de chei și împărtășiți cheia publică unul cu altul. Cele două entități trebuie să își păstreze cheile private în secret pentru ca comunicațiile lor să rămână în siguranță.
Odată ce expeditorul are cheia publică a destinatarului, îl poate utiliza pentru a cripta datele pe care dorește să le păstreze în siguranță. După ce a fost criptată cu o cheie publică, aceasta poate fi decriptată doar de cheia privată din aceeași pereche de chei. Nici aceeași cheie publică nu poate fi folosită pentru a decripta datele. Acest lucru se datorează proprietăților din funcțiile ușii de capcană despre care am menționat mai sus.
Când destinatarul primește mesajul criptat, își folosește cheia privată pentru a accesa datele. Dacă destinatarul dorește să returneze comunicațiile într-un mod sigur, ei pot apoi să cripteze mesajul lor cu cheia publică a partidului cu care comunică. Din nou, odată ce a fost criptată cu cheia publică, singura cale prin care se poate accesa informația este prin cheia privată potrivită..
În acest fel, criptarea RSA poate fi utilizată de părți necunoscute anterior pentru a trimite în siguranță date între ele. Partea semnificativă a canalelor de comunicare pe care le folosim în viețile noastre online a fost construită din această fundație.
Cum sunt criptate mesajele mai complicate cu RSA?
În exemplul nostru, am simplificat mult lucrurile pentru a le înțelege mai ușor, motiv pentru care am criptat doar un mesaj „4”. A fi capabil să cripteze numărul 4 nu pare deosebit de util, așa că s-ar putea să vă întrebați cum puteți cripta un set de date mai complicat, cum ar fi o cheie simetrică (care este cea mai frecventă utilizare a RSA) sau chiar un mesaj.
Unii oameni pot fi perplex de modul în care o cheie precum „n38cb29fkbjh138g7fqijnf3kaj84f8b9f …” sau un mesaj de genul „cumpărați-mi un sandviș” poate fi criptat de un algoritm precum RSA, care se ocupă de numere și nu de litere. Realitatea este că toate informațiile pe care le procesează computerele noastre sunt stocate în moduri binare (1s și 0s) și folosim standarde de codare precum ASCII sau Unicode pentru a le reprezenta în moduri în care oamenii pot înțelege (scrisori).
Aceasta înseamnă că tastele precum „n38cb29fkbjh138g7fqijnf3kaj84f8b9f …” și mesaje precum „cumpărați-mi un sandwich” există deja ca numere, care poate fi ușor calculat în algoritmul RSA. Numerele prin care sunt reprezentate sunt mult mai mari și mai greu de gestionat pentru noi, motiv pentru care preferăm să avem de-a face cu caractere alfanumerice, mai degrabă decât cu un salt de binar.
Dacă ai vrea criptați o cheie de sesiune mai lungă sau un mesaj mai complex cu RSA, ar implica pur și simplu un număr mult mai mare.
umplutură
Când RSA este implementat, folosește ceva numit căptușire pentru a preveni o serie de atacuri. Pentru a explica cum funcționează, vom începe cu un exemplu. Să zicem că ați trimis un mesaj codat unui prieten:
Dragă Karen,
Sper că subteți bine. Mai rămânem cina mâine?
Cu stimă,
James
Să spunem că ați codificat mesajul într-un mod simplu schimbând fiecare literă în cea care o urmărește în alfabet. Acest lucru ar schimba mesajul în:
Efbs Lbsfo,
J ipqf zpv bsf xfmm. Bsf xf imediatmm ibwjoh ejoofs upnpsspx?
Zpvst tjodfsfmz,
Kbnft
Dacă inamicii tăi ar intercepta această scrisoare, există un truc pe care l-ar putea folosi pentru a încerca să crape codul. Ei ar putea uită-te la formatul scrisorii tale și încearcă să ghicești ce poate spune mesajul. Ei știu că, în mod normal, oamenii își încep scrisorile cu „Bună”, „Bună ziua”, „Dragă” sau cu o serie de alte convenții.
Dacă ar încerca să aplice „Bună” sau „Bună ziua” ca prim cuvânt, ei ar vedea că acesta nu ar corespunde numărului de caractere. Ei ar putea apoi să încerce „Dragă”. Se potrivește, dar asta nu înseamnă neapărat nimic. Atacatorii ar încerca pur și simplu să vadă unde i-a condus. Deci, ar schimba literele „e”, „f”, „b” și „s” cu „d”, „e”, „a” și, respectiv, „r”. Acest lucru le-ar oferi:
Dragă Laseo,
J ipqe zpv sunt xemm. Are xe imediatmm iawjoh djooes upnpsspx?
Zpvrt tjoderemz,
Kanet
Încă pare destul de confuz, așa că atacatorii ar putea încerca să se uite la alte convenții, ca și cum ne încheiem scrisorile. Oamenii adaugă adesea „Din” sau „Bun simț” la final, dar niciuna dintre acestea nu se potrivește formatului. În schimb, atacatorii ar putea încerca „Sincer” și să înlocuiască celelalte scrisori pentru a vedea unde le ajunge. Modificând „z”, „p”, „v”, „t”, „j” „o”, „d” și „m” cu „y”, „o”, „u”, „s”, „ i ”,„ n ”,„ c ”și, respectiv,„ l ”, ar primi:
Dragă Lasen,
Eu ioqe esti xell. Are xe tuill iawinh dinnes uonossox?
Cu stimă,
Kanet
După această modificare, se pare că atacatorii încep să ajungă undeva. Au găsit cuvintele „eu”, „tu” și „sunteți”, pe lângă cuvintele care au alcătuit convingerile lor inițiale.
Văzând că cuvintele sunt în ordine gramaticală corectă, atacatorii pot fi destul de încrezători că se îndreaptă în direcția corectă. Până acum, probabil că și-au dat seama că codul implică fiecare literă schimbată în cea care o urmărește în alfabet. După ce își dau seama de acest lucru, este ușor de tradus restul și de citit mesajul original.
Exemplul de mai sus a fost doar un cod simplu, dar după cum puteți vedea, structura unui mesaj poate oferi atacatorilor indicii despre conținutul său. Sigur, a fost dificil să descoperiți mesajul doar din structura sa și a fost nevoie de anumite convingeri educate, dar trebuie să rețineți că calculatoarele sunt mult mai bune în a face acest lucru decât noi. Aceasta înseamnă că pot fi utilizate pentru a descoperi coduri mult mai complexe într-un timp mult mai scurt, bazat pe indicii care provin din structură și din alte elemente.
Dacă structura poate duce la crearea unui cod și la dezvăluirea conținutului unui mesaj, atunci avem nevoie de o modalitate de a ascunde structura pentru a păstra mesajul în siguranță. Acest lucru ne aduce la umplutură.
Când un mesaj este umplut, se adaugă date randomizate pentru a ascunde indicii de formatare originale care ar putea duce la ruperea unui mesaj criptat. Cu RSA, lucrurile sunt ceva mai complicate, deoarece o cheie criptată nu are formatarea evidentă a unei scrisori care a ajutat să ne ofere indicii în exemplul nostru de mai sus..
În ciuda acestui fapt, adversarii pot folosi o serie de atacuri pentru a exploata proprietățile matematice ale unui cod și pentru a sparge datele criptate. Datorită acestei amenințări, implementările RSA folosesc scheme de umplere precum OAEP pentru a încorpora date suplimentare în mesaj. Adăugarea acestei căptușeli înainte ca mesajul să fie criptat face RSA mult mai sigur.
Semnarea mesajelor
RSA poate fi utilizat pentru mai mult decât doar criptarea datelor. Proprietățile sale îl fac și un sistem util pentru confirmarea faptului că un mesaj a fost trimis de către entitatea care pretinde că l-a trimis, precum și dovedirea că un mesaj nu a fost modificat sau modificat.
Când cineva dorește să dovedească autenticitatea mesajului său, poate calcula a hașiș (o funcție care preia date de o dimensiune arbitrară și o transformă într-o valoare de lungime fixă) a textului de text, apoi semnează-o cu cheia lor privată. ei semnați hash-ul aplicând aceeași formulă folosită în decriptare (m = cd mod n). Odată ce mesajul a fost semnat, ei trimit această semnătură digitală destinatarului alături de mesaj.
Dacă un destinatar primește un mesaj cu o semnătură digitală, poate utiliza semnătură pentru a verifica dacă mesajul a fost semnat autentic de cheia privată a persoanei care pretinde că l-a trimis. De asemenea, ei pot vedea dacă mesajul a fost schimbat de atacatori după ce a fost trimis.
Pentru a verifica semnătura digitală, destinatarul folosește mai întâi aceeași funcție hash pentru a găsi valoarea hash a mesajului primit. Destinatarul aplică apoi cheia publică a expeditorului la semnătura digitală, folosind formula de criptare (c = me mod n), pentru a le oferi hașul semnăturii digitale.
De comparând hash-ul mesajului care a fost primit alături de hash de la semnătura digitală criptată, destinatarul poate spune dacă mesajul este autentic. Dacă cele două valori sunt aceleași, mesajul nu a fost modificat de la semnarea sa de expeditorul inițial. Dacă mesajul ar fi fost modificat chiar de un singur personaj, valoarea hash ar fi complet diferită.
Securitate RSA & atacurile
La fel ca majoritatea criptosistemelor, securitatea RSA depinde de modul în care este implementat și utilizat. Un factor important este dimensiunea cheii. este mai mare numărul de biți dintr-o cheie (în esență cât de lungă este cheia), cu atât este mai dificil să spargeți atacurile cum ar fi forțarea brută și factoringul.
Deoarece algoritmii cu cheie asimetrică, cum ar fi RSA, pot fi rupți prin factorizare întreagă, în timp ce algoritmi cu cheie simetrică precum AES nu pot, tastele RSA trebuie să fie mult mai lungi pentru a atinge același nivel de securitate..
În prezent, cea mai mare dimensiune de cheie care a fost considerată este lungă de 768 biți. Acest lucru a fost realizat de o echipă de academicieni pe o perioadă de doi ani, folosind sute de mașini.
Deoarece factoringul a fost finalizat până la sfârșitul anului 2009 și puterea de calcul a crescut semnificativ din acel moment, se poate presupune că o încercare de intensitate similară ar putea acum să includă o cheie RSA mult mai mare.
În ciuda acestui fapt, timpul și resursele necesare acestui tip de atac îl scoate la îndemâna majorității hackerilor și pe tărâmul statelor naționale. Cea mai bună lungime de cheie de utilizat va depinde de modelul dvs. individual de amenințare. Institutul Național de Standarde și Tehnologie recomandă o dimensiune minimă a cheii 2048-bit, dar se folosesc și taste de 4096 biți în unele situații în care nivelul amenințării este mai mare.
Factoringul este doar o modalitate prin care RSA poate fi spartă. O serie de alte atacuri au potențialul de a rupe criptarea cu o cantitate mai mică de resurse, dar acestea depind de implementare și de alți factori, nu neapărat de RSA în sine. Unele dintre acestea includ:
Sunt primele cu adevărat întâmplătoare?
Unele implementări ale RSA folosesc generatoare slabe de număr aleatoriu pentru a veni cu primele. Dacă aceste numere nu sunt suficient de întâmplătoare, este mult mai ușor pentru atacatori să le factorizeze și să rupă criptarea. Această problemă poate fi evitată folosind un generator de numere pseudo-aleator sigur criptografic.
Generație slabă de chei
Tastele RSA trebuie să se încadreze în anumiți parametri pentru a fi sigure. Dacă primele p și q sunt prea aproape între ele, cheia poate fi descoperită cu ușurință. La fel, numărul d care constituie o parte din cheia privată nu poate fi prea mică. O valoare scăzută face ușor de rezolvat. Este important ca aceste numere să aibă o lungime adecvată pentru a vă asigura cheia.
Atacuri de canal lateral
Acesta este un tip de atac care nu sparge RSA direct, ci folosește în schimb informații din implementarea sa pentru a oferi atacatorilor indicii despre procesul de criptare. Aceste atacuri pot include lucruri de genul analizând cantitatea de putere utilizată, sau analiza predicției ramurilor, care folosește măsurători de timp de execuție pentru a descoperi cheia privată.
Un alt tip de atac de canal lateral este cunoscut sub numele de atac de sincronizare. Dacă un atacator are capacitatea de a măsura timpul de decriptare pe computerul țintei sale pentru o serie de mesaje criptate diferite, aceste informații pot face posibil ca atacatorul să constate cheia privată a țintei.
Majoritatea implementărilor RSA evită acest atac prin adăugarea unei valori unice în timpul procesului de criptare, care elimină această corelație. Acest proces se numește orbire criptografică.
Este criptarea RSA sigură pentru viitor?
Vestea bună este că RSA este considerat sigur de utilizat, în ciuda acestor posibile atacuri. Avertizarea este că trebuie să fie implementat corect și să utilizeze o cheie care se încadrează în parametrii corecți. Așa cum tocmai am discutat, implementările care nu folosesc umplutură, folosesc prim-uri de dimensiuni inadecvate sau au alte vulnerabilități nu pot fi considerate sigure.
Dacă doriți să utilizați criptarea RSA, asigurați-vă că utilizați o cheie de cel puțin 1024 biți. Cei cu modele de amenințare mai mare ar trebui să se lipească de tastele de 2048 sau 4096 de biți dacă vor să folosească RSA cu încredere. Atâta timp cât sunteți conștienți de punctele slabe pe care RSA le are și să le utilizați corect, ar trebui să vă simțiți în siguranță să utilizați RSA pentru partajarea cheilor și alte sarcini similare care necesită criptare cu chei publice.
Vezi si: Tipuri de criptare comune explicate
RSA encryption is a system that solves what was once one of the biggest problems in cryptography: How can you send someone an encrypted message without having the ability to share the code with them beforehand? This article will teach you everything you need to know about how RSA encryption developed, how it works, the math behind it, what it is used for, as well as some of the biggest security problems it faces. Learning about RSA will give you some fundamental knowledge that will help you understand how much of our online lives are kept safe.
RSA encryption is a system that solves what was once one of the biggest problems in cryptography: How can you send someone an encrypted message without having the ability to share the code with them beforehand? This article will teach you everything you need to know about how RSA encryption developed, how it works, the math behind it, what it is used for, as well as some of the biggest security problems it faces. Learning about RSA will give you some fundamental knowledge that will help you understand how much of our online lives are kept safe.