Sunteți pe pagina 1din 24

CRIPTOGRAFIE ȘI

CRIPTANALIZĂ
ALGORITMI ASIMETRICI .
STUDIU DE CAZ : RSA.
VULNERABILITĂȚI .
Criptografie și Criptanaliză
Andrei-Ștefan Duluță MPI
2017-2018

CUPRINS

1. Introducere ....................................................................................................................... 3
2. Algoritmi Asimetrici ...................................................................................................... 5
2.1. Generalități .............................................................................................................. 5
2.2. Comparație cu Algoritmii Simetrici ............................................................... 6
2.3. Tipuri de Algoritmi Asimetrici ........................................................................ 7
3. Studiu de Caz: RSA ......................................................................................................... 8
3.1. Introducere .............................................................................................................. 8
3.2. Ipoteze și Notații.................................................................................................... 8
3.3. Etape ........................................................................................................................... 8
3.3.1. Generarea Cheilor.......................................................................................... 9
3.3.2. Criptare ........................................................................................................... 16
3.3.3. Decriptare ...................................................................................................... 18
3.4. Exemplificare numerică .................................................................................. 20
3.4.1. Generare Chei ............................................................................................... 20
3.4.2. Criptare ........................................................................................................... 22
3.4.3. Decriptare ...................................................................................................... 23
3.5. Vulnerabilități ...................................................................................................... 24

2 | 24
Algoritmi Asimetrici.
Studiu de Caz: RSA. Andrei-Ștefan Duluță MPI
Vulnerabilități

1. Introducere
Comunicarea reprezintă una dintre componentele fundamentale ale
societății, încă din cele mai vechi timpuri. Transmiterea de informații a
preocupat, în mod deosebit, omenirea și a stat la baza dezvoltării
instrumentelor utilizate pentru comunicarea verbală și non-verbală.
Cu toate acestea, există situații în care informațiile transmise trebuie
interpretate doar de destinatarul căruia îi sunt adresate. De cele mai multe
ori, canalul de comunicație este nesigur, fapt ce împiedică îndeplinirea
acestei cerințe. O astfel de situație de comunicare este ilustrată în figura
următoare:

Fig. 1 – Comunicarea folosind un canal nesigur


Se poate observa că, deși informația trebuie transmisă doar către Bob,
există o entitate care monitorizează canalul (Eve). În cazul în care se dorește
unui mesaj ce conține informații sensibile (militare, economice, medicale etc
transmiterea), comunicația nu poate fi realizată.
Pentru a soluționa această problemă, a fost necesară găsirea unor
metode care să îngreuneze interpretarea conținutului anumitor mesaje, de
către entitățile neautorizate. Unele dintre cele mai cunoscute modalități de a
atinge acest deziderat au fost: ascunderea mesajului util în interiorul unor
semnale purtătoare (steganografie) și modificarea mesajului astfel încât să
nu poată fi interpretat decât de cel căruia îi este adresat (criptare).
Criptarea presupune utilizarea unei chei cu ajutorul căreia mesajul este
alterat astfel încât rezultatul să ofere cât mai puține informații referitoare la
mesajul original. Decriptarea implică folosirea aceleiași chei sau a unei chei
diferite pentru a recupera mesajul original.
Criptografie și Criptanaliză
Andrei-Ștefan Duluță MPI
2017-2018

După cum se observă și în Fig. 1, există o entitate care monitorizează


canalul, cu scopul interpretării mesajelor schimbate de Alice și Bob. Astfel,
Eve încearcă să decripteze mesajul, necunoscând cheia de decriptare.
Un criptosistem format din cheia de criptare, cheia de decriptare și
modalitățile în care aceste chei sunt folosite se numește robust dacă
decriptarea mesajului, în absența cheii, necesită un interval de timp care
depășește un prag impus. Odată cu trecerea timpului, tehnicile de criptare și
atacurile asupra acestora au evoluat, motiv pentru care robustețea unui
criptosistem se află în strânsă legătură cu instrumentele matematice și cu
puterea de calcul disponibile.

4 | 24
Algoritmi Asimetrici.
Studiu de Caz: RSA. Andrei-Ștefan Duluță MPI
Vulnerabilități

2. Algoritmi Asimetrici
2.1. Generalități
Spre deosebire de algoritmii simetrici, algoritmii de criptare cu cheie
publică presupun utilizarea a două chei: o cheie publică și una privată, după
cum se poate observa în imaginea următoare:

Fig. 2 – Modelul algoritmilor asimetrici


Se poate remarca faptul că cele două chei sunt diferite și sunt generate
de destinatar. Cheia publică este distribuită și poate fi folosită de orice
entitate pentru a cripta un mesaj. Cheia privată, pe de altă parte, este păstrată
de destinatar astfel încât doar acesta să poată decripta mesajul.
Criptografie și Criptanaliză
Andrei-Ștefan Duluță MPI
2017-2018

2.2. Comparație cu Algoritmii Simetrici


Chiar dacă algoritmii simetrici moderni asigură un grad ridicat de
robustețe și pot fi implementați astfel încât operațiile de criptare și
decriptare să se execute rapid, există o serie de neajunsuri asociate cu
această clasă de metode:
a) Distribuirea cheii
În cazul algoritmilor simetrici, este necesar ca ambele entități care
comunică să aibă aceeași cheie. Pentru a distribui această cheie este necesar
un canal de comunicație sigur, canal ce se dovedește a fi greu de creat și
gestionat, în anumite situații. Existența acestui canal auxiliar poate fi
înlocuită cu folosirea unui algoritm asimetric pentru a transporta cheia.
b) Numărul de chei necesare
Dacă se dorește ca fiecare pereche de utilizatori, din cadrul unei rețele,
să aibă o cheie independentă, numărul cheilor, pentru o rețea de tip graf
complet, crește semnificativ. Algoritmii asimetrici presupun existența unei
perechi de chei pentru fiecare receptor, indiferent de numărul de emițători.
c) Autenticitatea mesajului
Având în vedere că ambele entități care comunică se află în posesia
aceleiași chei, există posibilitatea ca unul dintre utilizatori să falsifice un
mesaj. Pe de-o parte, Bob poate crea un mesaj care să pară a fi transmis de
către Alice. Pe de altă parte, Alice poate acuza faptul că un mesaj care a fost
trimis, în realitate, de către ea, a fost falsificat de Bob.
La polul opus, algoritmii asimetrici presupun o serie de dezavantaje
dintre care cele mai importante sunt:
a) Timp de execuție mai ridicat
Pentru algoritmii cu cheie publică, atât criptarea, decriptarea, cât și
generarea cheilor necesită un număr mai ridicat de operații, fapt ce conduce
la creșterea timpului necesar parcurgerii acestor etape.
b) Necesar de resurse de calcul mai ridicat
Algoritmii asimetrici lucrează cu numere a căror reprezentare binară
poate să ajungă la 4096 de biți (echivalent a aproximativ 1230 de cifre
zecimale), motiv pentru care sunt necesare o zonă de memorie și o putere de
procesare corespunzătoare.

6 | 24
Algoritmi Asimetrici.
Studiu de Caz: RSA. Andrei-Ștefan Duluță MPI
Vulnerabilități

2.3. Tipuri de Algoritmi Asimetrici


În contrast cu clasa algoritmilor simetrici care include un număr
considerabil de tehnici de criptare, algoritmii cu cheie publică înglobează, în
principal, trei clase, funcție de problema matematică pe care se bazează:

a) Factorizarea numerelor întregi


Se poate demonstra faptul că, pentru un număr întreg suficient de
mare, descompunerea în factori este o problemă dificilă. Rezolvarea acestei
probleme necesită o putere de procesare ridicată și un interval de timp
considerabil (aproximativ 2 ani pentru un număr reprezentat pe 768 biți).
Cea mai cunoscută metodă care aparține acestei clase este RSA.

b) Logaritmul discret
Problema logaritmului discret se regăsește în mai multe metode
utilizate pentru criptare și semnătură digitală. Dintre acestea, cele mai
cunoscute sunt: algoritmul Diffie-Hellman, algoritmul ElGamal și algoritmul
de semnătură digitală (DSA).

c) Curbele eliptice
Curbele eliptice sunt o generalizare a problemei logaritmului discret și
includ, de asemenea, mai mulți algoritmi asimetrici dintre care amintim:
Algoritmul Diffie-Hellman folosind Curbe Eliptice (ECDH) și Algoritmul
utilizat pentru Semnătură Digitală bazat pe Curbe Eliptice (ECDSA).
Criptografie și Criptanaliză
Andrei-Ștefan Duluță MPI
2017-2018

3. Studiu de Caz: RSA


3.1. Introducere
Propus în anul 1977 de către Ron Rivest, Adi Shamir și Leonard
Adleman, este unul dintre cei mai utilizați algoritmi asimetrici, în prezent.
Cele mai importante zone de aplicabilitate sunt: criptarea unui volum de date
relativ redus (transmiterea cheii, pentru algoritmi simetrici) și semnătura
digitală.
În practică, RSA este folosit în conjuncție cu un algoritm simetric (ex.
AES) astfel:
• Cheia corespunzătoare algoritmului simetric este criptată
folosind RSA
• Datele utile sunt criptate cu ajutorul algoritmului simetric

3.2. Ipoteze și Notații


Algoritmul 𝑅𝑆𝐴 − 𝐾 presupune efectuarea de operații aritmetice în
inelul claselor de resturi modulo n (ℤ𝑛 ), unde 𝑛 ≤ 2𝐾 − 1.
Fie 𝑥, 𝑦 ∈ ℤ𝑛 , unde 𝑥 - mesajul original, iar 𝑦 - mesajul cifrat.
Fie 𝐾𝑝𝑢𝑏 ∈ ℤ𝑛 × ℤ𝑛 - cheia publică, iar 𝐾𝑝𝑟 ∈ ℤ𝑛 × ℤ𝑛 - cheia privată.
Fie 𝑒𝑛𝑐𝐾𝑝𝑢𝑏 : ℤ𝑛 → ℤ𝑛 – funcția de criptare, iar 𝑑𝑒𝑐𝐾𝑝𝑟 : ℤ𝑛 → ℤ𝑛 – funcția
de decriptare, astfel încât:
𝑦 = 𝑒𝑛𝑐𝐾𝑝𝑢𝑏 (𝑥)
(1)
𝑥 = 𝑑𝑒𝑐𝐾𝑝𝑟 (𝑦)

3.3. Etape
Algoritmul RSA propune expresii pentru 𝐾𝑝𝑢𝑏 , 𝐾𝑝𝑟 , 𝑒𝑛𝑐𝐾𝑝𝑢𝑏 , 𝑑𝑒𝑐𝐾𝑝𝑟 care
au la bază problema factorizării numerelor întregi. Principalele etape care
trebuie parcurse, pentru a cripta și decripta un mesaj, folosind algoritmul
RSA, sunt: generarea cheilor 𝐾𝑝𝑢𝑏 și 𝐾𝑝𝑟 , aplicarea funcției de criptare și
aplicarea funcției de decriptare.

8 | 24
Algoritmi Asimetrici.
Studiu de Caz: RSA. Andrei-Ștefan Duluță MPI
Vulnerabilități

3.3.1. Generarea Cheilor


Etapa de generare a cheii se execută o singură dată, la începutul
comunicației, la destinatar. Pe baza unor pași care vor fi detaliați, în
continuare, se obține perechea 𝐾𝑝𝑢𝑏 , 𝐾𝑝𝑟 .

3.3.1.1. Alegerea a două numere prime


Se aleg, aleator, două numere prime 𝑝 și 𝑞 astfel încât:
𝐾
𝑝, 𝑞 < 2
⌊ ⌋
2 (2)
Pentru a stabili cât de ușor este să alegem, la întâmplare, un număr
impar 𝑝̃, iar acesta să fie prim, este interesant următorul rezultat din teoria
numerelor:
2
𝑃(𝑝̃ 𝑒𝑠𝑡𝑒 𝑝𝑟𝑖𝑚) ≈ (3)
𝑙𝑛(𝑝̃)
Pe baza acestui rezultat, putem calcula probabilitatea de a găsi un
𝐾
număr prim cu reprezentare pe ⌊ ⌋ biți:
2

2 2 𝐾 −1
𝑃(𝑝̃ 𝑒𝑠𝑡𝑒 𝑝𝑟𝑖𝑚) ≈ = ≅ 2.88 ∙ (⌊ ⌋) (4)
𝑙𝑛(𝑝̃) ⌊𝐾 ⌋ 𝑙𝑛(2) 2
2
Astfel, pentru 𝐾 = 4096, avem:
2 2 1
𝑃(𝑝̃ 𝑒𝑠𝑡𝑒 𝑝𝑟𝑖𝑚) ≈ = ≅ (5)
𝑙𝑛(𝑝̃) 2048 ∙ 𝑙𝑛(2) 709
Ceea ce înseamnă că trebuie verificate, în medie, 709 numere pentru a
obține un număr prim cu reprezentare pe 2048 biți.
Verificarea primalității este o aplicație directă a problemei factorizării
unui număr întreg. Pentru această problemă încă nu sunt cunoscuți algoritmi
a căror complexitate să depindă polinomial de numărul de biți pe care se
reprezintă numărul analizat.
Criptografie și Criptanaliză
Andrei-Ștefan Duluță MPI
2017-2018

Unul dintre cei mai rapizi algoritmi utilizați pentru factorizarea


numerelor întregi este GNFS (General Nimber Field Sieve). Complexitatea
algoritmului funcție de numărul de biți pe care este reprezentat numărul
care trebuie factorizat, poate fi observată în imaginea următoare:

Fig. 3 – Complexitatea Algoritmului GNFS


Se poate observa că, deși valorile funcției de complexitate devin mai
mici decât valorile funcției exponențiale, numărul de operații necesar
factorizării unui număr rămâne ridicat. De exemplu, pentru un număr cu
reprezentare pe 2048 biți, funcția de complexitate are valoarea:
𝑂(𝑓(2048)) ≅ 2174 ≅ 2.39 ∙ 1052 (6)
Efortul ridicat necesar factorizării numerelor cu reprezentări de până
la 4096 de biți oferă algoritmului RSA robustețea caracteristică, dar
îngreunează alegerea factorilor 𝑝 și 𝑞, despre care am menționat mai sus.
Cu toate acestea, analiza de mai sus presupune factorizarea unui
număr, în vederea stabilirii dacă numărul este prim sau compus. În cazul în
care nu se dorește aflarea factorilor, ci doar verificarea primalității, se poate
opta pentru o abordare euristică prin care se stabilește dacă un număr
oarecare este compus sau dacă este „probabil” să fie prim, cu un anumit grad
de încredere.

10 | 24
Algoritmi Asimetrici.
Studiu de Caz: RSA. Andrei-Ștefan Duluță MPI
Vulnerabilități

Dintre aceste tipuri de teste, vom aminti Testul Fermat și Testul Miller-
Rabin. În practică, se utilizează Testul Miller-Rabin deoarece există anumite
numere compuse pe care Testul Fermat le stabilește ca fiind prime
(numerele Carmichael).
Pentru a verifica dacă un număr este prim, cu o probabilitate cât mai
ridicată, testul Miller-Rabin se rulează de mai multe ori, funcție de numărul
de biți pe care se reprezintă numărul. La fiecare execuție, se modifică
valoarea unui parametru, în cadrul algoritmului.

3.3.1.2. Calculul produsului dintre p și q


După ce au fost generate cele două numere prime, p și q, se calculează
produsul acestora ca fiind:
𝑛 = 𝑝 ∙ 𝑞 < 2𝐾 (7)

3.3.1.3. Calculul valorii funcției 𝛷(𝑛)


Fie inelul ℤ𝑚 .
Funcția 𝛷(𝑚), a lui Euler, calculează câte numere din mulțimea ℤ𝑚
sunt prime, relativ la m. Mai exact, avem:
𝛷(𝑚) = |{𝑥 ∈ ℤ𝑚 |𝑐𝑚𝑚𝑑𝑐(𝑥, 𝑚) = 1}| (8)
Valoarea funcției poate fi aflată prin calculul celui mai mare divizor
comun dintre fiecare valoare din ℤ𝑚 și m și numărarea tuturor valorilor
pentru care este îndeplinită relația din expresia (8). Pentru m cu valori
ridicate, acest procedeu necesită un număr semnificativ de operații.
Fie factorizarea canonică a numărului m:
𝑛
𝑒
𝑚 = ∏ 𝑝𝑖 𝑖 (9)
𝑖=1
O variantă mult mai simplă de calcul a valorii funcției, dacă se cunoaște
factorizarea canonică, este dată de formula:
𝑛
𝑒 𝑒 −1
𝛷(𝑚) = ∏(𝑝𝑖 𝑖 − 𝑝𝑖 𝑖 ) (10)
𝑖=1
Criptografie și Criptanaliză
Andrei-Ștefan Duluță MPI
2017-2018

Pentru cazul în care 𝑚 = 𝑛 cu n, calculat la pasul anterior, avem:


𝑛 = 𝑝1 ∙ 𝑞1 (11)
Ceea ce implică:
𝛷(𝑛) = (𝑝 − 1) ∙ (𝑞 − 1) (12)
Se poate observa că, în cazul în care se cunosc factorii p și q, calculul
funcției 𝛷(𝑛), presupune 3 operații aritmetice simple. În cazul în care nu se
cunosc p și q, calculul lui 𝛷(𝑛) devine o problemă dificil de rezolvat. Această
diferență reprezintă o componentă-cheie, în cadrul algoritmului RSA, după
cum va reieși din pașii următori.

3.3.1.4. Fixarea cheii publice 𝐾𝑝𝑢𝑏


Considerându-se valoarea funcției 𝛷(𝑛) calculată anterior, se alege,
aleator, un număr 𝑒 ∈ ℤ𝛷(𝑛) astfel încât:
𝑐𝑚𝑚𝑑𝑐(𝑒, 𝛷(𝑛)) = 1 (13)
Pentru a verifica această relație, se impune calculul celui mai mare
divizor comun. Cel mai cunoscut procedeu cu ajutorul căruia se poate
determina cel mai mare divizor comun este algoritmul lui Euclid. Principiul
algoritmului lui Euclid va fi prezentat în secțiunea următoare, în cadrul
abordării variantei extinse a algoritmului.
În practică, pentru a reduce timpul necesar etapei de criptare, se aleg
valori mici, pentru e, în raport cu valoarea funcției 𝛷(𝑛). Mai multe detalii
vor fi discutate în secțiunea 3.3.2.2.2.
Odată aleasă o valoare pentru numărul e, cheia publică poate fi scrisă:
𝐾𝑝𝑢𝑏 = (𝑒, 𝑛) (14)

12 | 24
Algoritmi Asimetrici.
Studiu de Caz: RSA. Andrei-Ștefan Duluță MPI
Vulnerabilități

3.3.1.5. Calculul cheii private 𝐾𝑝𝑟


În continuare, vom utiliza valoarea funcției 𝛷(𝑛) și a numărului e ales
la pasul precedent pentru a găsi un număr 𝑑 ∈ ℤ𝛷(𝑛) astfel încât:
𝑑 ∙ 𝑒 = 1 (𝑚𝑜𝑑 𝛷(𝑛)) (15)
Ceea ce este echivalent cu a spune că:
𝑑 = 𝑒 −1 (𝑚𝑜𝑑 𝛷(𝑛)) (16)
Existența și unicitatea inversei sunt asigurate de relația (13).
Din punct de vedere numeric, calculul inversei în ℤ𝛷(𝑛) se realizează
folosind Algoritmul lui Euclid Extins.

3.3.1.5.1. Principiul Algoritmului lui Euclid Extins


Se dă:
a) 𝑟0 , 𝑟1 ∈ ℕ astfel încât 𝑟0 > 𝑟1 > 0
Se cere:
a) 𝑐𝑚𝑚𝑑𝑐(𝑟0 , 𝑟1 )
b) 𝑠, 𝑡 ∈ ℤ astfel încât 𝑐𝑚𝑚𝑑𝑐(𝑟0 , 𝑟1 ) = 𝑠 ∙ 𝑟0 + 𝑡 ∙ 𝑟1
Se cunoaște că ∀𝑎, 𝑏 ∈ ℕ∗ cu 𝑎 > 𝑏, ∃𝑞, 𝑟 ∈ ℕ cu 𝑞 > 𝑟 astfel încât:
𝑎 =𝑞∙𝑏+𝑟 (17)
̅̅̅̅̅
Similar, ∃𝑞𝑖 , 𝑟𝑖 ∈ ℕ cu 𝑖 = 2, 𝑁 care verifică următorul set de relații:
𝑟𝑖−2 = 𝑞𝑖 ∙ 𝑟𝑖−1 + 𝑟𝑖 (18)
unde:
𝑟0 , 𝑟1 sunt date
(19)
𝑟𝑁 este primul număr care verifică relația 𝑟𝑁−1 = 𝑞𝑁+1 ∙ 𝑟𝑁 + 0
În acest caz, avem că:
𝑐𝑚𝑚𝑑𝑐(𝑟0 , 𝑟1 ) = 𝑟𝑁 (20)
̅̅̅̅̅
Pentru a determina coeficienții 𝑠 și 𝑡, vom căuta 𝑠𝑖 , 𝑡𝑖 ∈ ℤ cu 𝑖 = 2, 𝑁
astfel încât:
𝑟𝑖 = 𝑠𝑖 ∙ 𝑟0 + 𝑡𝑖 ∙ 𝑟1 (21)
Criptografie și Criptanaliză
Andrei-Ștefan Duluță MPI
2017-2018

Vom aborda problema iterativ. Pentru pasul 𝑖 presupunem cunoscute


𝑠𝑖−1 , 𝑠𝑖−2 , 𝑡𝑖−1 , 𝑡𝑖−2 . Folosind relația (18), putem scrie că:
𝑟𝑖 = 𝑟𝑖−2 − 𝑞𝑖 ∙ 𝑟𝑖−1 (22)
Înlocuind 𝑟𝑖−2 și 𝑟𝑖−1 cu forma din expresia (21):
𝑟𝑖 = (𝑠𝑖−2 ∙ 𝑟0 + 𝑡𝑖−2 ∙ 𝑟1 ) − 𝑞𝑖 ∙ (𝑠𝑖−1 ∙ 𝑟0 + 𝑡𝑖−1 ∙ 𝑟1 ) =
= (𝑠𝑖−2 − 𝑞𝑖 ∙ 𝑠𝑖−1 )𝑟0 + (𝑡𝑖−2 − 𝑞𝑖 ∙ 𝑡𝑖−1 )𝑟1 = (23)
= 𝑠𝑖 ∙ 𝑟0 + 𝑡𝑖 ∙ 𝑟1
unde:
𝑠𝑖 = 𝑠𝑖−2 − 𝑞𝑖 ∙ 𝑠𝑖−1
(24)
𝑡𝑖 = 𝑡𝑖−2 − 𝑞𝑖 ∙ 𝑡𝑖−1
Pentru a afla 𝑠0 , 𝑠1 , 𝑡0 , 𝑡1 , considerăm relațiile:
𝑟0 = 𝑠0 ∙ 𝑟0 + 𝑡0 ∙ 𝑟1
(25)
𝑟1 = 𝑠1 ∙ 𝑟0 + 𝑡1 ∙ 𝑟1
Din care se obțin:
𝑠0 = 𝑡1 = 1
(26)
𝑠1 = 𝑡0 = 0
La pasul N, avem:
𝑟𝑁 = 𝑠𝑁 ∙ 𝑟0 + 𝑡𝑁 ∙ 𝑟1 = 𝑐𝑚𝑚𝑑𝑐(𝑟0 , 𝑟1 ) (27)
În concluzie:
𝑠 = 𝑠𝑁
(28)
𝑡 = 𝑡𝑁

14 | 24
Algoritmi Asimetrici.
Studiu de Caz: RSA. Andrei-Ștefan Duluță MPI
Vulnerabilități

3.3.1.5.2. Utilizarea rezultatelor AEE


După cum se poate observa, Algoritmul lui Euclid Extins oferă două
rezultate: cel mai mare divizor comun a două numere și exprimarea acestuia
ca o combinație liniară a celor două numere inițiale. Pentru etapa de
generare a cheii, în cadrul algoritmului RSA, vom adapta AEE, astfel:
𝑟0 = 𝛷(𝑛)
(29)
𝑟1 = 𝑒
Conform subcapitolului precedent, Algoritmul lui Euclid Extins
furnizează următoarele rezultate:
a) 𝑐𝑚𝑚𝑑𝑐(𝛷(𝑛), 𝑒)
b) 𝑠, 𝑡 ∈ ℤ astfel încât 𝑐𝑚𝑚𝑑𝑐(𝛷(𝑛), 𝑒) = 𝑠 ∙ 𝑟0 + 𝑡 ∙ 𝑟1
Știind cel mai mare divizor comun se poate verifica respectarea
condiției (13). Dacă nu este îndeplinită această condiție, se alege o altă
valoare pentru numărul e. În cazul în care relația este verificată, vom analiza
cel de-al doilea rezultat furnizat de AEE. Dat fiindcă că 𝛷(𝑛) și e sunt coprime,
avem:
𝑐𝑚𝑚𝑑𝑐(𝛷(𝑛), 𝑒) = 𝑠 ∙ 𝛷(𝑛) + 𝑡 ∙ 𝑒 = 1 (30)
Rescriem această relație, modulo 𝛷(𝑛):
(𝑠 ∙ 𝛷(𝑛) + 𝑡 ∙ 𝑒) =
= (𝑠 ∙ 𝛷(𝑛))(𝑚𝑜𝑑 𝛷(𝑛)) + (𝑡 ∙ 𝑒)(𝑚𝑜𝑑 𝛷(𝑛)) =
(31)
= 𝑠 ∙ (𝛷(𝑛)(𝑚𝑜𝑑 𝛷(𝑛))) + (𝑡 ∙ 𝑒)(𝑚𝑜𝑑 𝛷(𝑛)) =
= 𝑠 ∙ 0 + (𝑡 ∙ 𝑒)(𝑚𝑜𝑑 𝛷(𝑛)) = 1 (𝑚𝑜𝑑 𝛷(𝑛))
Adică:
𝑡 ∙ 𝑒 = 1 (𝑚𝑜𝑑 𝛷(𝑛)) (32)
De unde rezultă că:
𝑡 = 𝑒 −1 (𝑚𝑜𝑑 𝛷(𝑛)) (33)
Știind că inversa este unică, am obținut numărul d din ecuația (16):
𝑑 = 𝑡 = 𝑒 −1 (𝑚𝑜𝑑 𝛷(𝑛)) (34)
Cheia privată este definită ca:
𝐾𝑝𝑟 = (𝑑, 𝑛) (35)
Criptografie și Criptanaliză
Andrei-Ștefan Duluță MPI
2017-2018

3.3.2. Criptare
Criptarea valorii x se realizează folosind cheia publică 𝐾𝑝𝑢𝑏 în cadrul
unei funcții 𝑒𝑛𝑐𝐾𝑝𝑢𝑏 . Orice entitate aflată în posesia cheii publice poate realiza
operația de criptare. Rezultatul acestei operații este valoarea criptată y.

3.3.2.1. Funcția de Criptare


Algoritmul RSA propune următoarea funcție de criptare:
𝑦 = 𝑒𝑛𝑐𝐾𝑝𝑢𝑏 (𝑥) = 𝑒𝑛𝑐(𝑒,𝑛) (𝑥) = 𝑥 𝑒 (𝑚𝑜𝑑 𝑛) (36)
Deși ridicarea la putere presupune operații aritmetice simple
(înmulțiri), trebuie reamintit faptul că 𝑥 ∈ ℤ𝑛 , iar 𝑥 ∈ ℤ𝛷(𝑛) . Pentru cazul cel
mai defavorabil, avem:
𝑥 = 𝑛 − 1 ≈ 2𝐾
(37)
𝑒 = 𝛷(𝑛) − 1 = 𝑝 ∙ 𝑞 − 𝑝 − 𝑞 − 2 ≈ 𝑝 ∙ 𝑞 ≈ 2𝐾
Ceea ce înseamnă un număr de operații egal cu:
𝑛𝑜𝑝 ≈ 2𝐾 (38)
În cazul în care exponentul este reprezentat pe număr ridicat de biți
(ex. 𝐾 = 4096), timpul corespunzător criptării devine nepermis de mare.

3.3.2.2. Exponențiere Rapidă


Pentru a reduce timpul necesar criptării, se utilizează diferite tehnici
de exponențiere rapidă. În continuare, vor fi prezentate două astfel de
tehnică, acestea putând fi combinate.

3.3.2.2.1. Principiul Algoritmului „Square-and-


Multiply”
Se dă:
a) 𝑥, 𝑒, 𝑛 ∈ ℕ astfel încât 𝑒, 𝑛 > 1
Se cere:
a) 𝑦 = 𝑥 𝑒 (𝑚𝑜𝑑 𝑛)
b) Numărul de operații efectuat
16 | 24
Algoritmi Asimetrici.
Studiu de Caz: RSA. Andrei-Ștefan Duluță MPI
Vulnerabilități

Fie 𝑏𝑘 cu 𝑘 = ̅̅̅̅̅
0, 𝑁 cifrele din reprezentarea binară a numărului e:
𝑒10 = (𝑏𝑁 𝑏𝑁−1 … 𝑏0 )2 (39)
Valoarea lui N este aleasă astfel încât 𝑏𝑁 să fie cea mai semnificativă
cifră binară a lui 𝑒10 (i.e. 𝑏𝑁 = 1). Atunci putem scrie:
𝑦 = 𝑥 𝑒10 (𝑚𝑜𝑑 𝑛) = 𝑥 (𝑏𝑁 𝑏𝑁−1…𝑏0)2 (𝑚𝑜𝑑 𝑛) = 𝑥 (1𝑏𝑁−1…𝑏0)2 (𝑚𝑜𝑑 𝑛) (40)
Ceea ce este echivalent cu a scrie:
𝑦 = (𝑥 (1𝑏𝑁−1…𝑏10)2 ∙ 𝑥 (𝑏0)2 )(𝑚𝑜𝑑 𝑛) =
(41)
= (𝑥 (1𝑏𝑁−1…𝑏1)2 ∙ 𝑥 (𝑏𝑁−1𝑏𝑁−2…𝑏1)2 ∙ 𝑥 (𝑏0)2 )(𝑚𝑜𝑑 𝑛)
Introducem notația:
𝑦𝑖 = 𝑥 (𝑏𝑁−1𝑏𝑁−2…𝑏𝑁−𝑖)2 (𝑚𝑜𝑑 𝑛) (42)
Se observă, cu ușurință, că:
𝑦0 = 𝑥 (𝑏𝑁)2 (𝑚𝑜𝑑 𝑛) = 𝑥
(43)
𝑦𝑁 = 𝑥 (𝑏𝑁𝑏𝑁−1…𝑏0)2 (𝑚𝑜𝑑 𝑛) = 𝑦
Cu notația introdusă, rescriem relația (41):
𝑦 = 𝑦𝑁 = 𝑦𝑁−1 ∙ 𝑦𝑁−1 ∙ 𝑥 (𝑏0)2 (𝑚𝑜𝑑 𝑛) = 𝑦𝑁−1
2
∙ 𝑥 𝑏0 (𝑚𝑜𝑑 𝑛) (44)
Ceea ce înseamnă că putem obține o relație recurentă, pentru 𝑦𝑖 de
forma:
2
2 𝑏𝑁−𝑖 𝑦𝑖−1 (𝑚𝑜𝑑 𝑛), 𝑏𝑁−𝑖 = 0
𝑦𝑖 = 𝑦𝑖−1 ∙𝑥 (𝑚𝑜𝑑 𝑛) = { 2 (45)
𝑦𝑖−1 ∙ 𝑥 (𝑚𝑜𝑑 𝑛), 𝑏𝑁−𝑖 = 1
Unde:
̅̅̅̅̅
𝑖 = 1, 𝑁
(46)
𝑦0 = 𝑥
Se observă că, la fiecare iterație, se efectuează cel mult 2 operații.
Pentru un exponent e reprezentat pe K biți numărul total de operații, în cel
mai defavorabil caz, este:
𝑛𝑜𝑝 = 2(𝐾 − 1) ≈ 2𝐾 (47)
Comparând cu valoarea obținută în cazul exponențierii clasice, se
observă o îmbunătățirea semnificativă.
Criptografie și Criptanaliză
Andrei-Ștefan Duluță MPI
2017-2018

3.3.2.2.2. Alegerea numărului e cu valori reduse


La pasul 3.3.1.4 am văzut că algoritmul RSA permite alegerea
numărului e, singura condiție pe care acesta trebuie să o respecte fiind cea
de coprimalitate cu 𝛷(𝑛).
În această situație, e poate fi ales mult mai mic decât 𝛷(𝑛). În practică,
câteva dintre cele mai întâlnite valori sunt:
𝑒 = 2𝑖 + 1, 𝑖 ∈ ℕ∗ (48)
Unul dintre motivele pentru care se utilizează valori de această formă
este numărul redus de operații efectuate în cadrul algoritmului „Square-and-
Multiply”. Pentru acest tip de valori, numărul de operații este:
𝑛𝑜𝑝 = 𝑖 + 1 (49)

3.3.3. Decriptare
Algoritmul RSA propune următoarea funcție de decriptare:
𝑥 = 𝑑𝑒𝑐𝐾𝑝𝑟 (𝑥) = 𝑑𝑒𝑐(𝑑,𝑛) (𝑥) = 𝑦 𝑑 (𝑚𝑜𝑑 𝑛) (50)
Observațiile din etapa de criptare, referitoare la numărul ridicat de
operații pe care le implică exponențierea, rămân valabile și în cazul
decriptării. Mai mult, dat fiindcă valoarea numărului d nu poate fi aleasă
arbitrar, aspectele discutate în secțiunea 3.3.2.2.2 nu pot fi aplicate.

3.3.3.1. Exponențiere Rapidă


Algoritmul „Square-and-Multiply” rămâne o variantă foarte accesibilă
pentru a soluționa problema funcției exponent. O altă metodă de optimizare
este bazată pe Teorema Chineză a Resturilor și va fi prezentată în continuare.

18 | 24
Algoritmi Asimetrici.
Studiu de Caz: RSA. Andrei-Ștefan Duluță MPI
Vulnerabilități

3.3.3.2. Principiul Algoritmului bazat pe Teorema


Chineză a Resturilor
Se dă:
a) 𝑦, 𝑑 ∈ ℕ astfel încât 𝑑 > 1
b) 𝑛 = 𝑝 ∙ 𝑞 astfel încât 𝑝, 𝑞 sunt prime
Se cere:
a) 𝑥 = 𝑦 𝑑 (𝑚𝑜𝑑 𝑛)
b) Numărul de operații efectuat
Pornind de la Teorema Chineză a Resturilor și de la faptul că p și q sunt
prime, putem scrie că:
𝑦 𝑑 (𝑚𝑜𝑑 𝑛) = (𝑞 ∙ 𝑐𝑝 ∙ 𝑦𝑝 + 𝑝 ∙ 𝑐𝑞 ∙ 𝑦𝑞 ) (𝑚𝑜𝑑 𝑛) (51)
Unde:
𝑐𝑝 = 𝑞 −1 (𝑚𝑜𝑑 𝑝) și 𝑐𝑞 = 𝑝−1 (𝑚𝑜𝑑 𝑞)
𝑑 𝑑 (52)
𝑦𝑝 = 𝑢𝑝 𝑝 (𝑚𝑜𝑑 𝑝) ș𝑖 𝑦𝑞 = 𝑢𝑞 𝑞 (𝑚𝑜𝑑 𝑞)
De asemenea:
𝑢𝑝 = 𝑦 (𝑚𝑜𝑑 𝑝) ș𝑖 𝑢𝑞 = 𝑦 (𝑚𝑜𝑑 𝑞)
(53)
𝑑𝑝 = 𝑑 (𝑚𝑜𝑑 𝑝 − 1) ș𝑖 𝑑𝑞 = 𝑑 (𝑚𝑜𝑑 𝑞 − 1)
Se remarcă faptul că singurele calcule care necesită mai multe operații
aritmetice sunt cele din relațiile (52). Cu toate acestea, coeficienții 𝑐𝑝 și 𝑐𝑞 nu
depind de mesajul criptat, motiv pentru care termenii 𝑞 ∙ 𝑐𝑝 și 𝑝 ∙ 𝑐𝑞 pot fi
calculați o singură dată și memorați. Ramâne problema celor două ridicări la
putere:
𝑑 𝑑
𝑦𝑝 = 𝑢𝑝 𝑝 (𝑚𝑜𝑑 𝑝) ș𝑖 𝑦𝑞 = 𝑢𝑞 𝑞 (𝑚𝑜𝑑 𝑞) (54)
Cum exponenții sunt calculați modulo p-1, respectiv modulo q-1:
𝐾
⌊ ⌋ (55)
𝑑 𝑝 , 𝑑𝑞 < 2 2

Aplicând Algoritmul „Square-and-Multiply”, pentru 𝑦𝑝 și 𝑦q :


𝐾
𝑛𝑜𝑝 = 2 (⌊ ⌋ − 1) ≈ 𝐾 (56)
2
Criptografie și Criptanaliză
Andrei-Ștefan Duluță MPI
2017-2018

3.4. Exemplificare numerică


Vom exemplifica pașii de mai sus folosind algoritmul RSA-8.

3.4.1. Generare Chei


3.4.1.1. Alegerea a două numere prime
Alegem:
8
⌊ ⌋
𝑝 = 7 < 2 2 = 24
8
(57)
⌊ ⌋ 4
𝑞 = 11 < 22 =2

3.4.1.2. Calculul produsului dintre p și q


Calculăm produsul factorilor primi fixați anterior:
𝑛 = 𝑝 ∙ 𝑞 = 7 ∙ 11 = 77 (58)

3.4.1.3. Calculul valorii funcției 𝛷(𝑛)


Folosind formula (12), obținem:
𝛷(𝑛) = 𝛷(77) = (𝑝 − 1) ∙ (𝑞 − 1) = 60 (59)

3.4.1.4. Fixarea cheii publice 𝐾𝑝𝑢𝑏


Alegem numărul e pe baza formulei (48). Se observă că:
̅̅̅̅
𝑐𝑚𝑚𝑑𝑐(𝛷(77), 𝑒) = 𝑐𝑚𝑚𝑑𝑐(60, 𝑒) ≠ 1, 𝑖 = 1,3 (60)
Din acest motiv, alegem:
𝑒 = 24 + 1 = 17 (61)
În concluzie, cheia publică va fi:
𝐾𝑝𝑢𝑏 = (17,77) (62)

20 | 24
Algoritmi Asimetrici.
Studiu de Caz: RSA. Andrei-Ștefan Duluță MPI
Vulnerabilități

3.4.1.5. Calculul cheii private 𝐾𝑝𝑟


Pentru calculul cheii private vom folosi Algoritmul lui Euclid Extins.
Relațiile recurente pe care le vom utiliza sunt relațiile (18) și (24):
𝑟𝑖−2 = 𝑞𝑖 ∙ 𝑟𝑖−1 + 𝑟𝑖
(63)
𝑡𝑖 = 𝑡𝑖−2 − 𝑞𝑖 ∙ 𝑡𝑖−1
Cu inițializările (26) și (29):
𝑟0 = 𝛷(77) = 60
𝑟1 = 𝑒 = 17
(64)
𝑡0 = 0
𝑡1 = 1
Reprezentăm valorile, pentru fiecare iterație, sub formă tabelară:
𝒊 𝒓𝒊−𝟐 𝒓𝒊−𝟏 𝒒𝒊 𝒓𝒊 𝒕𝒊−𝟐 𝒕𝒊−𝟏 𝒕𝒊
2 60 17 3 9 0 1 -3
3 17 9 1 8 1 -3 4
4 9 8 1 1 -3 4 -7
5 8 1 8 0 x x x
Tab. 1 – Aplicarea Algoritmului lui Euclid Extins
Ultima iterație pentru care obținem un rest nenul este 𝑖 = 4. Pe linia
corespunzătoare, din tabelul de mai sus, găsim atât cel mai mare divizor
comun al numerelor Φ(77) și 17 cât și inversul valorii 17 modulo Φ(77):
𝑐𝑚𝑚𝑑𝑐(𝛷(77), 17) = 𝑐𝑚𝑚𝑑𝑐(60,17) = 𝑟4 = 1
(65)
𝑒 −1 (𝑚𝑜𝑑 𝛷(77)) = 𝑡4 = −7 (𝑚𝑜𝑑 𝛷(77)) = 53 (𝑚𝑜𝑑 𝛷(77))
Pentru verificare, vom calcula:
𝑒 ∙ 𝑒 −1 (𝑚𝑜𝑑 𝛷(77)) = 17 ∙ 53 (𝑚𝑜𝑑 60) = 901 (𝑚𝑜𝑑 60) =
(66)
= 1(𝑚𝑜𝑑 60)
Astfel, avem:
𝑑 = 𝑒 −1 (𝑚𝑜𝑑 𝛷(77)) = 53 (𝑚𝑜𝑑 60) (67)
În concluzie, cheia publică va fi:
𝐾𝑝𝑟 = (53,77) (68)
Criptografie și Criptanaliză
Andrei-Ștefan Duluță MPI
2017-2018

3.4.2. Criptare
Vom alege mesajul pe care dorim să îl criptăm astfel încât să se
îndeplinească relația 𝑥 ∈ ℤ𝑛 cu 𝑛 = 77.
Fixăm 𝑥 = 13.
Folosind funcția de criptare (36) obținem:
𝑦 = 𝑒𝑛𝑐𝐾𝑝𝑢𝑏 (13) = 𝑒𝑛𝑐(17,77) (13) = 1317 (𝑚𝑜𝑑 77) (69)
Dat fiindcă valoarea exponentului este ridicată, vom utiliza Algoritmul
„Square-and-Multiply”.
Inițial, vom exprima exponentul în baza 2:
𝑒10 = 1710 = 100012 (70)
Folosind relațiile din secțiunea 3.3.2.2.1, avem:
2
2 𝑏𝑁−𝑖 𝑦𝑖−1 (𝑚𝑜𝑑 77), 𝑏𝑁−𝑖 = 0
𝑦𝑖 = 𝑦𝑖−1 ∙𝑥 (𝑚𝑜𝑑 77) = { 2 (71)
𝑦𝑖−1 ∙ 𝑥 (𝑚𝑜𝑑 77), 𝑏𝑁−𝑖 = 1
Cu inițializările:
𝑦0 = 𝑥 = 13 (𝑚𝑜𝑑 77)
(72)
𝑁=4
Rezultatele algoritmului sunt prezentate în tabelul următor:
𝒊 𝒚𝒊−𝟏 𝒚𝟐𝒊−𝟏 𝒃𝟒−𝒊 𝒚𝒊
1 13 15 0 15
2 15 71 0 71
3 71 36 0 36
4 36 64 1 62
Tab. 2 – Aplicarea Algoritmului „Square-and-Multiply”
Mesajul criptat este:
𝑦 = 𝑦4 = 62 (73)

22 | 24
Algoritmi Asimetrici.
Studiu de Caz: RSA. Andrei-Ștefan Duluță MPI
Vulnerabilități

3.4.3. Decriptare
Folosind funcția de decriptare (50) obținem:
𝑥 = 𝑑𝑒𝑐𝐾𝑝𝑟 (62) = 𝑑𝑒𝑐(53,77) (62) = 6253 (𝑚𝑜𝑑 77) (74)
Dat fiindcă valoarea exponentului este ridicată, vom utiliza Algoritmul
bazat pe Teorema Chineză a Resturilor, în conjuncție cu Algoritmul „Square-
and-Multiply” și cu Algoritmul lui Euclid.
Pe baza relațiilor (53), avem:
𝑢𝑝 = 62 (𝑚𝑜𝑑 7) = 6 (𝑚𝑜𝑑 7)
𝑢𝑞 = 62 (𝑚𝑜𝑑 11) = 7 (𝑚𝑜𝑑 11)
(75)
𝑑𝑝 = 53 (𝑚𝑜𝑑 6) = 5 (𝑚𝑜𝑑 6)
𝑑𝑞 = 53 (𝑚𝑜𝑑 10) = 3 (𝑚𝑜𝑑 10)
Mai departe, trebuie calculate:
𝑦𝑝 = 65 (𝑚𝑜𝑑 7)
(76)
𝑦𝑞 = 73 (𝑚𝑜𝑑 11)
Se aplică Algoritmul „Square-and-Multiply” similar cu cazul criptării și
se obține:
𝑦𝑝 = 6 (𝑚𝑜𝑑 7)
(77)
𝑦𝑞 = 2 (𝑚𝑜𝑑 11)
În continuare, sunt necesare:
𝑐𝑝 = 11−1 (𝑚𝑜𝑑 7) = 4−1 (𝑚𝑜𝑑 7)
(78)
𝑐𝑞 = 7−1 (𝑚𝑜𝑑 11)
Folosind Algoritmul lui Euclid Extins, se obține:
𝑐𝑝 = 2 (𝑚𝑜𝑑 7)
(79)
𝑐𝑞 = 8 (𝑚𝑜𝑑 11)
În final, folosind relația (51), avem:
6253 (𝑚𝑜𝑑 77) = (11 ∙ 2 ∙ 6 + 7 ∙ 8 ∙ 2) (𝑚𝑜𝑑 77) =
(80)
= (132 + 112) (𝑚𝑜𝑑 77) = 244 (𝑚𝑜𝑑 77) = 13 (𝑚𝑜𝑑 77)
Se poate observa că:
6253 (𝑚𝑜𝑑 77) = 13 = 𝑥 ∎ (81)
Criptografie și Criptanaliză
Andrei-Ștefan Duluță MPI
2017-2018

3.5. Vulnerabilități
Orice sistem de criptare conține anumite aspecte care pot reprezenta
puncte vulnerabile, în cazul unor atacuri. În cazul algoritmului RSA, câteva
dintre cele mai cunoscute vulnerabilități sunt:
a) Criptarea este deterministă
Un anumit mesaj va fi criptat în același mod, la orice moment de timp,
daca se folosește aceeași cheie. Pornind de la această caracteristică, pot fi
realizate, cu succes, atacuri de tip statistic.
b) Există combinații de valori e și x ce pot fi atacate foarte ușor
În cazul în care se utilizează valori mici pentru mesaj și valoarea e, se
poate recupera valoarea mesajului original, calculând rădăcina de ordinul e
a numărului criptat.
Pentru a evita această situație, se folosesc, pentru e, valori mai mari (de
exemplu 65537). De asemenea, mesajul este inclus într-o schemă de
„padding” cu scopul creșterii, în mod artificial, a dimensiunii valorii care
trebuie criptată.
c) Există valori care rămân nemodificate după criptare
În care se dorește criptarea valorilor 0 sau ±1, acestea vor rămâne
nemodificate, în urma procesului.
d) Algoritmul este maleabil
RSA permite prelucrarea mesajului cifrat într-o manieră care să
conducă, în urma decriptării, la o valoare validă, diferită de mesajul original.
De exemplu, dacă asupra mesajului criptat y se aplică transformarea:
𝑦̃ = 𝑠 𝑒 𝑦 (𝑚𝑜𝑑 𝑛) (82)
În urma decriptării va rezulta:
𝑥̃ = (𝑠 𝑒 𝑦)𝑑 (𝑚𝑜𝑑 𝑛) = (𝑠 𝑒 𝑥 𝑒 )𝑑 (𝑚𝑜𝑑 𝑛) = (𝑠𝑥)𝑒𝑑 (𝑚𝑜𝑑 𝑛) =
(83)
= 𝑠𝑥 (𝑚𝑜𝑑 𝑛) ≠ 𝑥
e) Factorizarea folosind calculatoare cuantice
Robustețea algoritmului RSA se bazează pe problema factorizării
numerelor întregi. În momentul în care va putea fi implementat, algoritmul
de factorizare al lui Shor permite decompunerea numerelor întregi în timp
polinomial, spre deosebire de cazul actual în care problema este rezolvată în
timp subexponențial.

24 | 24

S-ar putea să vă placă și