RSA
În criptografie, RSA este un algoritm criptografic cu chei publice, primul algoritm utilizat atât pentru criptare, cât şi pentru semnătura electronică. Algoritmul a fost dezvoltat în 1977 şi publicat în 1978 de Ron Rivest, Adi Shamir şi Leonard Adleman la MIT şi îşi trage numele de la iniţialele numelor celor trei autori.[1]
Funcţionare
RSA este un algoritm de criptare pe blocuri. Aceasta înseamnă că atât textul clar cât şi cel cifrat sunt numere între 0 şi n-1, cu un n ales. Un mesaj de dimensiune mai mare decât este împărţit în segmente de lungime corespunzătoare, numite blocuri, care sunt cifrate rând pe rând.[2] De asemenea, ca algoritm criptografic cu chei publice, funcţionează pe baza unei perechi de chei legate matematic între ele: o cheie publică, cunoscută de toată lumea, şi una secretă, necunoscută decât de deţinătorul acesteia.
Generarea cheilor
Perechea de chei se generează după următorii paşi[3]:
- Se generează două numere prime, de preferat mari, p şi q;
- Se calculează şi
- Se alege un întreg aleator e, astfel încât cmmdc(e, φ) = 1. Perechea (n, e) este cheia publică.
- Folosind algoritmul lui Euclid extins, se calculează întregul d, unicul cu proprietatea că . (n, d) constituie cheia secretă.
Decizia cu privire la care dintre e şi d este cheia publică şi care este cea secretă este, din punct de vedere matematic, arbitrară, oricare dintre cele două numere poate juca oricare dintre roluri[4]. În practică însă, pentru a mări viteza de criptare, şi întrucât dintre cele două numere e este cel ales arbitrar, e este cheia publică iar valoarea sa este aleasă un număr mic, de regulă 3, 17 sau 65537 (216+1)[5]. Aceasta conduce la un număr minim de înmulţiri, deci la o performanţă sporită, deoarece toate aceste numere au doar două cifre 1 în reprezentarea lor binară[5].
Criptarea şi decriptarea
Presupunând că mesajul clar este sub forma unui număr m, mai mic decât n, atunci mesajul cifrat, notat cu c este
unde e este cheia publică a destinatarului mesajului. Pentru a decripta mesajul, destinatarul îşi foloseşte cheia sa secretă d, care are proprietatea foarte importantă că:
Astfel, mesajul clar este recuperat calculând:
Oricine poate cripta mesaje cu cheia publică a destinatarului, dar numai acesta din urmă poate decripta, deoarece trebuie să folosească cheia sa secretă.
Algoritmul poate fi folosit şi pentru semnătura electronică, folosind cheile invers. Dacă o entitate criptează un mesaj (sau mai degrabă un hash al acestuia) cu cheia sa secretă şi ataşează rezultatul mesajului său, atunci oricine poate verifica, decriptând cu cheia publică a semnatarului şi comparând rezultatul cu mesajul clar (sau cu hash-ul acestuia), că într-adevăr acea entitate este autorul mesajului.
Demonstraţia formulei de decriptare
Formula de decriptare este valabilă, deoarece[6]:
- şi, fiindcă , atunci
- şi
şi deci se poate scrie:
Dar, cum p este prim, şi deci prim cu m, conform micii teoreme a lui Fermat, rezultă că
Astfel,
- .
Dacă p nu este totuşi prim cu m, atunci înseamnă că m este multiplu al lui p, caz trivial în care m este congruent cu 0 modulo p, şi deci ridicat la orice putere este congruent cu 0 şi deci cu el însuşi.
Analog şi pentru q,
De aici, conform teoremei chinezeşti a resturilor, deoarece p şi q sunt numere prime, rezultă că
Securitatea
Problema decriptării unui mesaj criptat cu RSA este denumită problema RSA. Aceasta constă în obţinerea radicalului de ordin e modulo n, unde e şi n au proprietatea că n este produsul a două numere prime mari p şi q, iar e este prim cu produsul dintre p-1 şi q-1[7]. În acest moment, cea mai eficientă metodă de a realiza aceasta este descompunerea în factori primi a lui n, şi obţinerea astfel a cheii secrete d pe baza lui e. Astfel, este demonstrat că dificultatea spargerii unui mesaj criptat cu RSA nu este mai dificilă decât problema factorizării. Nu a fost descoperită încă o altă soluţie generală a problemei RSA, dar nici nu s-a demonstrat matematic că nu există o altă soluţie[8][9].
Factorizarea întregilor prin metodele comune ajută la găsirea soluţiilor în timp util doar pentru numere mici. Pentru numere mari, algoritmii de factorizare, cu complexitate exponenţială, dau soluţia după foarte mult timp. Cea mai rapidă metodă de factorizare a întregilor, algoritmul general al ciurului câmpurilor de numere, are o complexitate de [10][11] Aici, c este un număr ce ia valori în jur de 1,9 pentru numere de tipul lui n, adică numere cu doi factori primi. Cel mai mare număr factorizat vreodată prin acest algoritm, rulat în anul 2005, de către specialişti de la Agenţia Federală Germană pentru Securitatea Tehnologiei Informaţiei, are 200 de cifre zecimale, iar reprezentarea binară a factorilor primi obţinuţi ocupă 663 de biţi[12][13]. Cheile de criptare RSA cele mai sigure au lungimi de peste 1024 de biţi.
Atacul RSA prin metoda forţei brute, adică încercarea fiecărei chei secrete posibile, consumă chiar mai mult timp decât factorizarea[8].
Atacuri împotriva RSA
Deşi securitatea algoritmului RSA constă în legătura dintre acesta şi factorizarea întregilor, el trebuie folosit cu grijă în implementări, deoarece, în caz de folosire eronată, sistemele bazate pe RSA pot fi atacate în anumite maniere care ocolesc factorizarea efectivă a modulului, atacatorul ajungând să obţină mesajul clar sau cheia secretă.
Atac cu text cifrat ales
În cazul atacului cu text cifrat ales, atacatorul dispune de cheia publică a entităţii atacate (exponentul de criptare e şi modulul n), şi interceptează mesaje cifrate trimise acestuia. Pentru a obţine mesajul clar m dintr-un mesaj cifrat c, atacatorul poate proceda, de exemplu, astfel[14]:
- Calculează
- Trimite entităţii atacate spre semnare pe x, obţinând
- Se observă că
- Se rezolvă ecuaţia
Atacatorul obţine astfel mesajul cifrat. Există mai multe feluri de atacuri cifrate,Nu s-a putut interpreta (eroare de sintaxă): {\displaystyle Mai multe exemple sunt descrise în Schneier, pp 390-391} dar sunt câteva moduri de apărare împotriva lor. Unele pot fi evitate dacă pur şi simplu entitatea protejată cu chei secrete refuză să semneze texte arbitrare trimise de terţi.[15] Dacă acest lucru nu este posibil (ca de exemplu în cazul unui notar public care trebuie să semneze documente electronice prezentate de persoane străine), atunci atacul poate fi prevenit prin folosirea unei perechi diferite de chei pentru criptare şi pentru semnătura electronică. De asemenea, este necesar să se folosească şi un padding aleator pentru mesaj înainte de criptare sau, în cazul semnăturii, să nu se semneze mesajul clar, ci un hash al acestuia. De asemenea, atacul poate fi evitat şi dacă se impune o anumită structură predefinită mesajelor primite spre semnare.[16]
Mesaje necriptate
Întrucât RSA se bazează pe ridicarea la putere (modulo un număr n), există anumite părţi de mesaje care nu sunt criptate, părţi rezultate în urma împărţirii mesajului pe blocuri. Astfel de mesaje sunt mesajele m cu proprietatea că m=mx (mod n) oricare ar fi x, ca de exemplu m=0, m=1, m=n-1. Numărul exact al acestor mesaje decriptate este [17], şi deci este de minim 9 (deoarece e, p şi q sunt impare). Pentru a micşora numărul de astfel de părţi de mesaj, este util să se folosească un exponent public e cât mai mic.
Exponentul de criptare mic
În unele aplicaţii, se foloseşte un exponent de criptare (public) mic, de exemplu 3, pentru a mări performanţa, dar şi pentru a rezolva unele probleme de securitate. Dacă mai multe entităţi care comunică folosesc acelaşi exponent public (dar fiecare are propriul modul şi deci propria cheie secretă), atunci acelaşi mesaj trimis mai multor destinatari are următoarele valori:
unde ni sunt modulele celor trei destinatari, e este exponentul comun acestora iar m este mesajul trimis tuturor celor trei. Un atacator poate folosi algoritmul lui Gauss pentru a descoperi o soluţie mai mică decât n1n2n3 a unui sistem compus din următoarele ecuaţii:
Această soluţie este, conform teoremei chinezeşti a resturilor, cubul mesajului m.[18] Soluţia pentru această problemă este cea denumită sărarea mesajului (din engleză salting), adică adăugarea unui padding format din numere pseudoaleatoare, padding diferit pentru fiecare expediere a mesajului.
Exponentul de decriptare mic
Dacă exponentul de decriptare (cel secret) este mic, pe lângă faptul că multe părţi din mesaj nu se criptează, aşa cum s-a arătat mai sus, există un algoritm rapid de găsire a lui d, cunoscând informaţiile e şi n.[19] Acest algoritm nu este eficient dacă d este de acelaşi ordin de mărime cu n, deci dacă e este mic[19], acesta fiind unul din motivele pentru care se alege în general e un număr mic, pentru ca d să fie cât mai mare.
Note
- ^ Schneier, 1996, p. 385
- ^ Stallings, 2005, p. 269
- ^ Menezes, p. 286
- ^ Schneier, 1996, p. 387
- ^ a b Stallings, 2005, p. 274
- ^ Demonstraţie similară cu cea din Menezes, p. 286
- ^ Menezes, 2005, p. 98
- ^ a b Schneier, p. 390
- ^ Menezes, 2005, p. 99
- ^ Lenstra, p. 51
- ^ Weisstein, Eric W. „Number Field Sieve”. MathWorld--A Wolfram Web Resource.
- ^ Stallings, p. 276
- ^ Eric W. Weisstein (10 mai 2005). „RSA-200 Factored”. Mathworld news. Verificați datele pentru:
|date=
(ajutor) - ^ Stallings, p. 280
- ^ Schneier, p. 391
- ^ Menezes, p. 289
- ^ Menezes, p. 290
- ^ Menezes, p. 288
- ^ a b Menezes, p. 288
Bibliografie
- Bruce Schneier (). Applied Cryptography, Second Edition: Protocols, Algorithms, and Source Code in C. Wiley Computer Publishing, John Wiley & Sons, Inc. ISBN 0471128457.
- William Stallings (). Cryptography and Network Security, 4th edition. Prentice Hall. ISBN 0-13-187319-3 Verificați valoarea
|isbn=
: checksum (ajutor). - Alfred Menezes. Handbook of Applied Cryptography. Paul van Oorschot, Scott Vanstone.
- A. W. Lenstra, H.W. Lenstra Jr. (). The development of the number field sieve. Springer.