Atacul Wiener , numit după criptologul Michael J. Wiener, este un tip de atac criptografic împotriva algoritmului RSA . Atacul folosește metoda fracțiunii continue pentru a sparge sistemul cu un mic exponent închis .
Înainte de a începe o descriere a modului în care funcționează atacul lui Wiener, merită să introduceți câteva concepte care sunt folosite în RSA [1] . Consultați articolul principal RSA pentru mai multe detalii .
Pentru a cripta mesajele conform schemei RSA , se folosește o cheie publică - o pereche de numere , pentru decriptare - o cheie privată . Numerele se numesc exponenti deschisi si respectiv inchisi, numarul se numeste modul. Modulus , unde și sunt două numere prime . Legătura dintre exponentul închis, deschis și modul este dată ca , unde este funcția Euler .
Dacă cheia publică poate fi recuperată într-un timp scurt , atunci cheia este vulnerabilă: după ce au primit informații despre cheia privată , atacatorii au posibilitatea de a decripta mesajul.
Criptosistemul RSA a fost inventat de Ronald Rivest , Adi Shamir și Leonard Adleman și publicat pentru prima dată în 1977 [1] . De la publicarea articolului, criptosistemul RSA a fost investigat pentru vulnerabilități de mulți cercetători. [2] Majoritatea acestor atacuri folosesc implementări potențial periculoase ale algoritmului și folosesc condiții explicite pentru unele defecțiuni ale algoritmului: modul comun, cheie publică mică, cheie privată mică [3] . Astfel, un algoritm de atac criptografic împotriva algoritmului RSA cu o cheie privată mică a fost propus de criptologul Michael J. Wiener într-un articol publicat pentru prima dată în 1990. [4] Teorema lui Wiener afirmă că dacă cheia este mică, atunci cheia privată poate fi găsită în timp liniar .
În criptosistemul RSA , Bob poate folosi o valoare mai mică decât un număr mare aleatoriu pentru a îmbunătăți performanța de decriptare RSA . Totuși, atacul lui Wiener arată că alegerea unei valori mici pentru for va avea ca rezultat o criptare nesigură în care un atacator poate recupera toate informațiile secrete, adică să spargă sistemul RSA . Acest hack se bazează pe teorema lui Wiener, care este valabilă pentru valori mici ale . Wiener a dovedit că un atacator poate găsi eficient când .
Wiener a introdus și câteva contramăsuri împotriva atacului său. Cele două metode sunt descrise mai jos: [5]
1. Alegerea unei chei publice mari :
Înlocuiți cu , unde pentru unele mari . Când este suficient de mare, adică , atunci atacul lui Wiener este inaplicabil, indiferent cât de mic .2. Folosind teorema chineză a restului :
Alegeți astfel încât și , și sunt mici, dar nu în sine, atunci decriptarea rapidă a mesajelor poate fi efectuată după cum urmează:Pentru că
,atunci există un număr întreg astfel încât:
.Merită determinat și înlocuit în ecuația anterioară :
.Dacă notăm și , atunci înlocuirea în ecuația anterioară va da:
.Împărțind ambele părți ale ecuației la , rezultă că:
, unde .Ca rezultat, puțin mai puțin decât , iar prima fracțiune constă în întregime din informații publice . Cu toate acestea, este încă necesară o metodă de testare a unei astfel de ipoteze. În timp ce ultima ecuație poate fi scrisă astfel:
.Folosind operații și identități algebrice simple , se poate stabili acuratețea unei astfel de presupuneri. [6]
Să , unde . Lasă .
Având unde , un cracker se poate recupera . [7]
Dovada se bazează pe aproximări folosind fracții continue . [opt]
Din moment ce , atunci există pentru care . Prin urmare:
.Deci, aceasta este o aproximare . Chiar dacă biscuitul nu știe , îl poate folosi pentru a o aproxima. Într-adevăr, pentru că:
și , avem: și
Folosind în loc de , obținem:
Acum , înseamnă . Deoarece , înseamnă , și în cele din urmă rezultă:
UndeDin moment ce și prin urmare:
Din moment ce , atunci , și pe baza acesteia , înseamnă:
Din (1) și (2), putem concluziona că:
Semnificația teoremei este că, dacă condiția de mai sus este îndeplinită, atunci apare printre convergente pentru fracția continuă a numărului .
Prin urmare, algoritmul va găsi în cele din urmă astfel de [9] .
Se consideră o cheie publică RSA , prin care este necesar să se determine exponentul privat . Dacă se știe că , atunci se poate face după următorul algoritm [10] :
1. Extindeți fracția într-o fracție continuă . 2. Pentru o fracție continuă , găsiți mulțimea tuturor convergentelor posibile . 3. Explorați fracția potrivită : 3.1. Determinați valoarea posibilă calculând . 3.2. După ce am rezolvat ecuația , obțineți o pereche de rădăcini . 4. Dacă egalitatea este adevărată pentru o pereche de rădăcini , atunci se găsește exponentul închis . Dacă condiția nu este îndeplinită sau nu a fost posibilă găsirea unei perechi de rădăcini , atunci este necesar să se investigheze următoarea fracție adecvată , revenind la pasul 3.Aceste două exemple [10] demonstrează clar găsirea exponentului privat dacă cheia publică RSA este cunoscută .
Pentru o cheie publică RSA :
e / N = [0, 1, 7, 3, 31, 5, 2, 12, 1, 28, 13, 2, 1, 2, 3] | |||||
---|---|---|---|---|---|
n | k n / d n | phi n | p n | q n | p n q n |
0 | 0/1 | - | - | - | - |
unu | 1/1 | 1073780832 | - | - | - |
2 | 7/8 | 1227178094 | - | - | - |
3 | 22/25 | 1220205492 | 30763 | 39667 | 1220275921 |
Se dovedește că . În acest exemplu, puteți vedea că condiția de micime este îndeplinită .
Pentru o cheie publică RSA :
e / N = [0, 1, 1, 1, 2, 1, 340, 2, 1, 1, 3, 2, 3, 1, 21, 188] | |||||
---|---|---|---|---|---|
n | k n / d n | f n | p n | q n | p n q n |
0 | 0/1 | - | - | - | - |
unu | 1/1 | 1779399042 | - | - | - |
2 | 1/2 | 3558798085 | - | - | - |
3 | 2/3 | 2669098564 | - | - | - |
patru | 5/8 | 2847038468 | - | - | - |
5 | 7/11 | 2796198496 | 47129 | 59333 | 2796304957 |
Se dovedește că . În acest exemplu, puteți observa, de asemenea, că condiția de micime este îndeplinită .
Complexitatea algoritmului este determinată de numărul de convergente pentru fracția continuă a numărului , care este o valoare de ordinul . Adică, numărul este restaurat în timp liniar [11] din lungimea cheii .