Sunteți pe pagina 1din 4

2.6.

Algoritmul RSA

Sistemul de criptare RSA, denumit după inventatorii săi Ron Rivest, Adi
Shamir şi Leon Adleman este la ora actuală cel mai popular şi mai folosit sistem de
criptare cu cheie publică. Acest lucru se datorează în primul rând datorită modalităţii
foarte simple de criptare şi decriptare, ce realizează similar şi folosind aceleaşi
module de calcul. Poate fi folosit atât pentru a asigura că un mesaj rămâne secret, dar
şi pentru semnături digitale.

Din punct de vedere al securităţii, RSA se bazează pe caracterul ireductibil al


problemei factorizării întregilor. Se porneşte astfel de la presupunerea că este uşor să
înmulţeşti două numere prime, dar foarte dificil să descompui rezultatul înapoi în
acele două numere prime. Acest lucru face însă ca sistemele RSA să fie destul de
lente, astfel încât se folosesc adesea pentru a cripta o aşa-numită „cheie de sesiune”
(session key). Cheia de sesiune este cea care se foloseşte pentru a cripta mesajul
propriu-zis cu un sistem de criptare pe bază de cheie secretă.

Mecanismul de criptare/decriptare funcţionează în felul următor. Presupunem


că Bob doreşte să cripteze un mesaj m pe care să i-l trimită lui Alice, pe care aceasta
să îl decripteze. Pentru criptare, Bob trebuie să urmeze următorii paşi:

1) să îi obţină cheia publică a lui Alice, cheie compusă din n şi e (modulus şi


exponent de criptare)
2) să reprezinte mesajul m ca un întreg în intervalul [0, n – 1]
3) să calculeze c = me mod n
4) să îi trimită lui Alice textul criptat c

Pentru a decripta mesajul c primit de la Bob, Alice are de urmat un singur pas:
1) folosindu-şi cheia privată d (exponent de decriptare) calculează m =
cd mod n

Pentru calculul lui c la criptare, sau al lui m la decriptare, RSA se foloseşte de


următorul algoritm de exponenţiere: se iau ca date de intrare a şi un întreg k, 0

≤ k < n, a cărui reprezentare binară este k = ki 2i şi generează ca date de ieşire


ak mod n. Etapele de calcul sunt următoarele:

1) se setează b ← 1. Dacă k = 0 se returnează (b)


2) se setează A ← a
3) dacă k0 = 1 atunci setează b ← a
4) pentru i = 1 până la t se efectuează:
4.1) se setează A ← A2 mod n
4.2) dacă ki = 1 atunci setează b ← A ∙ b mod n
5) se returnează b

Generarea perechilor de chei pentru criptarea cu RSA are de asemenea mai


multe etape:

1) se generează două numere prime distincte p şi q, cu valori foarte


mari, şi de aproximativ aceleaşi dimensiuni
2) se calculează n = pq şi Φ = (p – 1)(q – 1).
Observaţie: numărul λ = cmmmc(p -1, q - 1)1, numit şi exponentul universal al lui n
poate fi folosit în locul lui Φ = (p – 1)(q – 1) în generarea cheilor RSA. Prin
utilizarea lui λ va rezulta un exponent de decriptare d mai mic astfel încât procesul de
decriptare va fi mai rapid. Dacă însă p şi q sunt alese în mod aleator, atunci cmmdc(p

1
Cel mai mic multiplu comun al numerelor p – 1 şi q - 1
-1, q - 1)2 va fi probabil mic şi, drept urmare, Φ şi λ vor fi aproximativ de aceeaşi
dimensiune
3) se selectează în mod aleator un număr întreg e, 1 < e < Φ astfel
încât cmmdc(e, Φ) = 1
4) folosindu-se algoritmul euclidian extins3 se generează un număr
întreg unic d, 1 < e < Φ astfel încât ed ≡ 1 (mod Φ)

În urma rulării acestui algoritm, cheia publică generată a RSA va fi (n, e) iar
cheia privată va fi d, unde e şi d sunt exponentul de criptare şi exponentul de
decriptare, iar n este modulus.

Pentru a se găsi două numere prime mari p şi q, se testează numere aleatorii de


anumite mărimi cu anumite teste probabilistice ce elimină repede teoretic aproape
toate numerele care nu sunt prime. Valorile lui p şi q nu trebuie să fie foarte apropiate,
ca nu cumva factorizarea Fermat pentru n să aibă succes. Dacă p – q este de exemplu
mai mică decât 2n1/4 (care chiar şi pentru valori mici de 1024 de biţi ale lui n este de 3
× 1077), descoperirea lui p şi q este uşoară. Mai mult, dacă oricare dintre p – 1 sau q –
1 au numai factori primi mici, n poate fi factorizat rapid cu algoritmul p – 1 al lui
Pollard astfel încât şi aceste valori ale lui p şi q trebuie eliminate.

Este de asemenea important ca cheia privată d să fie suficient de mare.


Michael J. Wiener a demonstrat4 că dacă p se află între q şi 2q, un lucru destul de des
întâlnit, şi dacă d < n1/4 /3 atunci d poate fi calculat în mod eficient pe baza lui n şi e.

2
Cel mai mare divisor comun
3
Algoritmul euclidian extins ia două numere întregi pozitive a ş b cu a ≥ b şi determină d = cmmdc(a, b) şi
două alte numere întregi x şi y astfel încât ax + by = d. Algoritmul funcţionează în felul următor:
- dacă b = 0 atunci setează d ← a, x ← 1, y ← 0 şi returnează (d, x, y)
- setează x2 ← 1, x1 ← 0, y1 ← 1
- cât timp b > 0 execută
o q ← [ a/b], r ← a – qb, x ← x2 – qx1 şi y ← y2 – qy1
o a ← b, b ← r, x2 ← x1, x1 ← x, y2 ← y1 şi y1 ← y
- seteaza d ← a, x ← x2, y ← y2 şi returnează (d, x, y)
4
M. J. Wiener, “Cryptanalysis of short RSA secret exponents”, Information Theory, IEEE Transactions, mai
1990
Împotriva cazurilor în care valorile lui e sunt mici, cum ar fi de exemplu e = 3,
nu a fost descoperit până acum nici un atac posibil dacă se foloseşte un padding
corespunzător. Dacă nu se foloseşte aşa ceva sau dacă este prost implementat,
exponenţii publici mici au un risc mult mai ridicat de a fi vulnerabili în faţa unui atac.
Astfel, se recomandă ca valoarea lui e să nu fie mai mică de 65537.

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