Sunteți pe pagina 1din 13

Algoritmul RSA

Sorin Petrus
Master TM , an II
1
1. Introducere
Algoritmul RSA a fost publicat pentru prima oar n 1977 de R. Rivest, A. Shamir i L.
Adleman n revista Scientific American i se compune din calcule numerice n inelul
n
Z
.
Sistemele de tipul RSA fac parte din categoria sistemelor criptografice cu cheie public.
Securitatea algoritmului se bazeaz pe problema factorizrii numerelor foarte mari. Algoritmul
poate fi utilizat att pentru criptare, ct i pentru autentificare (semnturi digitale) i este foarte
larg rspndit la ora actual. El este ntlnit n servere i browsere de web, n clieni i servere
de e-mail, reprezentnd practic coloana vertebral a sistemului de pli electronice prin card-uri
de credit.
Algoritmul funcioneaz dup cum urmeaz:
Se genereaz dou numere prime p i q, de lungime 2n bii (de exemplu 512, 1024, 2048 bii
lungime). Deoarece mulimea numerelor prime este suficient de dens, numerele prime pot fi
generate alegnd aleator numere ntregi de 2 n bii i testndu-le cu ajutorul unui test
probabilistic. Apoi, fie N=p*q, de lungime n bii.
Numrul e trebuie ales astfel nct s ndeplineasc urmtoarele condiii: 1 < e < N iar e i (p -
1) * (q - 1) s fie relativ prime, sau altfel spus, s nu aib factori primi n comun.
Se calculeaz d cu ajutorul algoritmului euclidian extins, astfel nct acesta s fie multiplul
invers al lui e sau altfel spus d * e - 1 s fie divizibil cu (p-1) * (q-1). n practic, d se
poate obine foarte simplu cutnd rezolvarea ecuaiei
e
q p x
d
1 ) 1 ( * ) 1 ( * +
astfel nct d
i x s fie numere ntregi. Valorile d i e sunt numite exponentul privat, respectiv exponentul
public al algoritmului.
Funcia de criptare/semnare arat astfel: N M C
e
mod , unde M reprezint mesajul de
criptat (un ntreg pozitiv mai mic dect N).
Funcia de decriptare/verificare arat astfel: N M C
d
mod , unde C reprezint textul criptat.
Cheia public este reprezentat de perechea (N, e), iar cheia privat de perechea (N, d).
Numrul d mai este cunoscut i sub numele de trap door, deoarece cunoaterea sa permite
inversarea rapid a funciei RSA.
Viteza algoritmului RSA depinde n mare msur de lungimea cheilor utilizate, de tipul
de implementare, de procesorul pe care se ruleaz aplicaia, dar i de protocolul ce trebuie
implementat. Deseori, pentru a obine o vitez sporit n aplicaiile practice, sunt utilizai
exponeni publici mici, acest fapt implicnd ns i riscuri corespunztoare. Exist chiar grupuri
ntregi de utilizatori care folosesc acelai exponent public, doar modulul N fiind
diferit. n acest caz exist ns reguli stricte ce trebuiesc respectate pentru cele dou numere
prime p i q, astfel nct sigurana algoritmului s nu fie periclitat. Utiliznd, cum spuneam,
exponeni publici mici, se obine o vitez mai mare de criptare i verificare n comparaie cu
procesele inverse de decriptare i semnare a datelor. Utiliznd algoritmii generali de calcul ai
exponenialului, operaiile cu cheie public consum un timp proporional cu O(n), iar
operaiile cu cheie privat necesit aproximativ O(n), unde n reprezint numrul de bii ai lui
N. Tehnicile de multiplicare rapid, necesit de obicei mai puini pai, sunt ns destul de rar
folosite datorit complexitii lor, i a faptului c pentru lungimi tipice de chei, ele sunt totui
mai lente. Dac comparm viteza algoritmului RSA cu cea a unui algoritm cu cheie simetric
(DES de exemplu), putem observa c n funcie de implementare (HW sau SW) cel din urm
este cu pn la aproximativ 1000 de ori mai rapid dect RSA. Cu toate acestea, utilizarea RSA
n algoritmi de distribuire de chei (simetrice) sau n alte aplicaii, n care viteza este mai puin
important, prezint avantaje de netgduit.
2
Securitatea sistemelor RSA se bazeaz pe presupunerea c funcia N M C
e
mod este
unidirecional, fiind computaional dificil de a se gsi mesajul iniial M n absena
exponentului de decriptare d. Exist ns posibilitatea, cel puin teoretic, de a ncerca
factorizarea lui N prin metoda forei brute sau prin alte metode, fapt ce ar duce la aflarea
numerelor p i q. Apoi utiliznd algoritmul euclidian extins se poate calcula exponentul de
decriptare d, ceea ce ar duce la compromiterea cheii private i la descifrarea textului criptat.
nc de la publicarea sa, algoritmul RSA a fost studiat de o mulime de cercettori, fiind supus
la nenumrate teste. Cu toate c de-a lungul celor mai bine de 25 de ani de utilizare au rezultat
diverse vulnerabiliti, algoritmul s-a dovedit suficient de rezistent (pn n prezent) pentru a
putea oferi un grad ridicat de securitate. Metodele de atac rezultate nu fac dect s ilustreze nc
o dat pericolul utilizrii RSA n condiii necorespunztoare, programarea unei versiuni sigure
de RSA nefiind deloc o problem simpl.
2. Metode de analiz i atac. O clasificare general a acestora.
Dificultatea de a inversa funcia RSA pentru mesaje aleatoare duce la concluzia c, dat
fiind tuplul (N, e, C), un atacator nu va putea obine mesajul criptat M. Cu toate acestea, se pot
obine diverse informaii despre M, astfel nct RSA nu este un sistem sigur din punct de vedere
semantic (date fiind N, e, C, se pot obine relativ uor proprieti ale lui M de exemplu
simbolul Jacobi al lui M peste N). RSA poate fi fcut ns sigur din punct de vedere semantic
dac se adaug informaie aleatoare n procesul de criptare [1].
O clasificare a metodelor de atac este relativ dificil de fcut, cu toate acestea se poate
aborda problema din dou direcii. n primul rnd se poate ncerca clasificarea metodelor de
atac dup impactul pe care l au asupra algoritmului. Astfel, se pot identifica dou categorii de
atacuri:
atacuri ce compromit cheia privat, compromind practic ntreaga securitate a sistemului;
atacuri ce compromit un singur mesaj criptat, cheia privat putnd fi ns utilizat n
continuare.
Din prima categorie putem enumera metoda forei brute, atacul exponentului privat mic etc.
Atacurile din cea de a doua categorie sunt n general mult mai subtile, folosind metode relativ
complicate de aflare a mesajului. Cu toate acestea, timpul utilizat pentru aflarea unui mesaj
trebuie s fie mult mai mic dect timpul necesar metodei forei brute, pentru ca atacul s aib o
anumit relevan. Totodat sunt importante i condiiile ce trebuiesc ndeplinite astfel nct
metoda s poat fi aplicat. O alt metod de a aborda o eventual clasificare a metodelor de
analiz i atac o reprezint imprirea acestora pe categorii dup proprietile utilizate n cadrul
atacului. Putem enumera astfel:
metode elementare de atac;
metoda exponentului privat mic;
metodele exponentului public mic;
atacuri ndreptate mpotriva diverselor implementri.
3. Factorizarea numerelor ntregi
O metod de a ataca algoritmul RSA este aceea de a ncerca factorizarea modulului N.
Aceasta mai este numit i metoda forei brute. Dac factorizarea lui N reuete, este foarte
simplu de a se calcula apoi (p-1)*(q-1) i de a se gsi exponentul de decriptare. n practic
aceasta nsemn compromiterea cheii private, permind atacatorului att citirea mesajelor, ct
i falsificarea semnturilor. O perioad de timp s-a crezut c securitatea RSA este direct
proporional cu problema factorizrii numerelor prime, dar cercetri recente au dezvluit faptul
c spargerea unui sistem RSA nu este echivalent cu factorizarea lui N. Cu alte cuvinte, s-a
3
dovedit c a sparge un sistem RSA cu exponent privat mic este mai simpl dect rezolvarea
problemei factorizrii lui N. Aceasta ns nu nsemn neaprat gsirea unei vulnerabiliti a
algoritmului [2]. Securitatea RSA ar fi puternic afectat dac s-ar reui gsirea unei metode
uoare de factorizare a numerelor mari i foarte mari. Doar avansurile tehnologice n domeniul
hardware (n particular viteza crescut de procesare) nu pot duce la o ameninare real a
algoritmului, deoarece prin alegerea unor chei cu lungime tot mai mare, aceast problem se
rezolv de la sine. De notat este i faptul c algoritmul cel mai rapid de factorizare este
General Number Field Sieve, care ruleaz pe numere de n bii lungime n
) log * * )) 1 ( ) exp((
3 / 2 3 / 1
n n O c+ , unde c < 2.
De aceea, pentru ca un sistem criptografic de tip RSA s fie sigur se recomand ca n practic
N s aib o lungime de cel puin 1024 de bii, dat fiind faptul c n ultima vreme s-au obinut
rezultate bune n rezolvarea factorizrii lui N (cu mijloacele actuale s-a reuit factorizarea unor
numere N de lungime de 512 bii). O alt metod de a ataca RSA, dar care nu este echivalent
cu problema factorizrii numerelor prime, este gsirea unei metode rapide de calcul a rdcinii
la e. Deoarece N M C
e
mod , acest atac ar permite oricui decriptarea datelor i falsificarea
semnturilor, chiar i n absena cheii private. Nu se cunoate ns o aplicaie practic n care
aceast metod s fi fost folosit cu succes, dar n anumite cazuri, dac se folosete un exponent
public mic, este teoretic posibil aplicarea ei i decriptarea unor mesaje. Cele dou metode
descrise anterior sunt metode cu ajutorul crora se pot recupera toate mesajele criptate cu o
anumit cheie. Exist ns i metode ce au ca int aflarea textului unui singur mesaj criptat. Un
succes n aceast direcie nu va permite ns atacatorului s decripteze i alte mesaje criptate cu
aceeai cheie. Dac, de exemplu, metoda factorizrii duce practic la compromiterea cheii
private, nu acesta este rezultatul n cazul altor tipuri de atac.
4. Metode elementare de atac
Exist un numr de metode elementare de atac, care dei nu au o relevan mare,
demonstreaz totui c folosirea diletant a sistemului poate duce la compromiterea ideii de
securitate. Cel mai simplu atac de acest gen este ncercarea de a ghici textul. Atacatorul
presupune textul i l cripteaz cu cheia public pentru a verifica dac rezultatul obinut este
acelai cu mesajul criptat. Metoda cea mai simpl de a prentmpina acest atac este adugarea
unor bii aleatori n mesajul original.
O alt metod relativ banal o reprezint metoda modulului comun N. Pentru a evita generarea
unor numere prime mari pentru fiecare utilizator, s-a ncercat, de exemplu, utilizarea aceluiai
modul N pentru un grup de utilizatori. O autoritate central distribuie n aceast situaie
perechile
) , (
i i
d e
pentru fiecare utilizator. La o analiz atent se poate observa ns faptul c
fiecare membru al grupului poate utiliza perechea sa
) , (
i i
d e
, pentrua factoriza N. Odat N
factorizat, utilizatorul poate restaura orice cheie privat a unui alt membru al grupului. De aici
rezult i concluzia c modulul N nu trebuie folosit niciodat n comun de ctre membrii unui
grup. O alt metod clasic, numit blinding, faciliteaz obinerea unei semnturi false asupra
unui mesaj M. Cel ce dorete obinerea semnturii produce un mesaj N M r M
e
mod *
'
, apoi
l trimite spre semnare victimei. n cazul n care destinatarul semneaz mesajul i l trimite
napoi, nu a fcut altceva dect s produc o semntur N M S mod
d ' '
. Falsificatorul nu
trebuie dect s calculeze S = S' / r mod N pentru a obine semntura pentru mesajul M. De
obicei ns semnturile se aplic asupra amprentei unui mesaj (obinut prin aplicarea unui hash
unidirecional), i nu direct asupra mesajului, caz n care atacul i pierde nsemntatea. Aceast
proprietate a RSA este totui foarte important pentru implementarea a ceea ce se numete
anonymous digital cash (atunci cnd identitatea persoanei ce semneaz nu trebuie dezvluit).
5. Metoda exponentului privat mic
4
Aceast metod de atac se concentreaz asupra cazului n care se folosete un exponent de
valoare mic. Alegerea unui exponent privat ct mai mic are loc atunci cnd se dorete
reducerea timpului de decriptare, sau a celui de semnare a datelor. n acest caz se poate observa
o mbuntire a performanei algoritmului cu un factor de ordinul de mrime 10. M. Wiener a
demonstrat c, tocmai n aceste cazuri, sistemul RSA prezint o vulnerabilitate excesiv,
atacatorul putnd afla exponentul d. El a formulat teorema ce st la baza acestei metode de atac:
Fie N=p*q astfel nct q<p<2*q i
4 / 1
*
3
1
N d < . Dat fiind ecuaia de forma:
e* d=1mod(p-1)(q-1), se poate afla d printrun numr rezonabil de calcule aritmetice.
Demonstraia se bazeaz pe aproximaii ce utilizeaz fracii continue. Din existena unui k
ntreg, ecuaia mai sus amintit se poate rescrie dup cum urmeaz:
) 1 )( 1 (
1
) 1 )( 1 (

q p d d
k
q p
e
, rezultnd c
N q p N 3 ) 1 )( 1 ( <
. Ulterior se obine
o inecuaie de forma:
2 4 / 1
2
1
*
1
d N d d
k
N
e
< <
.
Numrul de fracii k/d cu d < N ce aproximeaz e/N nu este mai mare de N
2
log . Aceast
metod poate fi utilizat ca algoritm liniar de aflare a valorii d, avnd ca efect compromiterea
cheii private. Pentru un modul N de lungime 1024 de bii, d ar trebui s aib o lungime de cel
puin 256 bii pentru a evita acest atac (ceea ce reprezint cteodat o problem n domeniul
smartcard-urilor). Wiener a prezentat i alte cteva metode de a prentmpina acest atac [3],
printre care enumerm alegerea unui exponent privat e suficient de mare. Dac
5 , 1
N e > atacul
nu mai poate fi realizat, din pcate ns odat cu creterea lui e crete i timpul necesar criptrii
sau verificrii semnturilor. Nu s-a demonstrat totui ct de sigure sunt aceste metode de
prentmpinare a acestui atac. Boneh i Durfee au demonstrat c pentru
292 , 0
N d < , exponentul
privat se poate recupera n mod eficient, indiferent de alegerea celorlalte variabile ale sistemului
[4].
6. Metodele exponentului public mic
n practic se prefer de multe ori utilizarea unui exponent public mic pentru a
mbunti timpul de criptare sau de verificare a semnturii. Cu toate c i metodele
exponentului public atac valorile mici ale acestuia, cu rezultate adeseori satisfctoare,
pericolul de compromitere a cheii private este mai mic dect n cazul metodei precedente. Cea
mai mic valoare ce poate fi aleas pentru exponentul public este 3, dar de obicei pentru a
prentmpina anumite atacuri se alege valoarea 65537, ce pare a fi mai sigur.

Teorema lui Coppersmith. MetodaHastad (broadcast attack)
S-a observat c, unele dintre cele mai puternice atacuri ndreptate mpotriva algoritmului
RSA ce utilizeaz un exponent public mic au la baz o teorem enunat de cercettorul
Coppersmith:
Fie N un numr ntreg i
[ ] x Z f
N

un polinom monic de gradul d. Fie


d
N X
1
unde
> 0. Dat fiind perechea (N, f), se pot afla ntr-un timp eficient toi ntregii
X x <
0
, ce
satisfac relaia f(
0
x
) = 0 mod N. Timpul de rulare este dominat de timpul n care algoritmul
LLL ruleaz pe o latice de dimensiunea O(w) cu ) log , / 1 min(
2
N w .
Teorema ofer o cale eficient de a afla rdcinile lui f mod N, iar demonstraia sa se bazeaz
5
la rndul su pe o lem datorat lui Howgrave-Graham ce poate fi studiat n [5]. O prim
aplicaie a teoremei lui Coppersmith este mbuntirea unei metode mai vechi, atribuit lui
Hastad, ce poate fi ntlnit n literatura de specialitate i sub numele de broadcast attack.
Pentru a trimite un mesaj M unui numr k de destinatari, expeditorul trebuie s cripteze mesajul
cu cheile publice corespunztoare
) , (
i i
e N
. Presupunnd, pentru simplitate c toi membrii
grupului au
i
e
= 3 i c grupul este alctuit din 3 persoane (k=3), se obin urmtoarele relaii:

'

3
3
3
2
3
2
1
3
1
mod
mod
mod
N M C
N M C
N M C

Se poate presupune i faptul c cmmdc
1 ) , (
j i
N N
, pentru orice i j. Aplicnd teorema
chinezeasc a restului se obine egalitatea
3 2 1
3
mod ' N N N M C , criptanalistul avnd
posibilitatea de a recupera mesajul M, cu condiia de a putea calcula rdcina cubic a lui C.
Dup cum lesne se poate observa, pentru exponeni publici mici, acest atac devine realizabil de
ndat ce k e . Hastad menioneaz n continuare un atac i mai puternic: dac se ncearc
adugarea unei secvene de forma
m
i 2 * la mesajul iniial, aceasta nu va mpiedica atacul
descris anterior. Hastad a demonstrat, enunnd o teorem ce i poart numele, c aplicarea
oricrui polinom liniar de completare, ce aduce mesajul iniial la forma M i Mi
m
+ 2 * , nu
mpiedic atacul. Singura posibilitate de a prentmpina atacul n condiiile date este
completarea mesajului cu o secven aleatoare [6].
Metoda mesajelor nrudite (Franklin-Reiter). Metoda secvenei de completare
(Coppersmith).
O alt metod interesant ce poate fi utilizat pentru a descifra mesaje aflate ntr-o
anumit relaie unul fa de cellalt, este cunoscut i sub numele de metoda Franklin-Reiter,
dup numele celor doi cercettori care au descoperit- o:
Presupunnd c mesajele
1
M i
2
M sunt distincte i satisfac o relaie de forma
N M f M mod ) (
2 1
, i c
2 1
, C C i funcia
[ ] x Z f
N

sunt cunoscute, atunci se pot afla


mesajele
1
M i
2
M pentru orice exponent public e mic.
Atacul se bazeaz pe urmtoarea lem:
Fie e=3 i (N,e) o cheie public RSA. Fie
2 1
M M , ce satisfac relaia N M f M mod ) (
2 1
,
unde f este o funcie liniar f = ax + b n
[ ] x Z
n
, i b 0. Cunoscndu-se tuplul (N, e,
2 1
, C C , f),
atunci se pot recupera
1
M i
2
M ntr-un timp ptratic n log N.
Lema funcioneaz i pentru e 3, dar atta timp ct e este mic. O demonstraie a acesteia poate
fi gsit n [7]. Metoda Franklin-Reiter pare pentru nceput un pic artificial, apare firesc
ntrebarea de ce ar dori cineva s trimit mesaje
1
M i
2
M ce se afl ntr-o anumit relaie?
Coppersmith a prezentat o extindere a atacului mpotriva unei secvene de completare aleatoare,
ce se bazeaz tocmai pe metoda Franklin-Reiter, enunnd urmtoarea teorem:
Fie (N, e) o cheie public RSA n care modulul N are n bii lungime,
1
]
1

2
e
n
m
, i M este un
mesaj de lungime n - m bii. Se fixeaz
1 1
* 2 r M M
m
+ i
2 2
* 2 r M M
m
+ , unde r1 i r2
sunt doi ntregi distinci astfel nct:
m
r r 2 2 , 0
1
< < . Dac se cunosc
2 1
, C C , atunci se pot
recupera
1
M i
2
M ntr-un mod eficient.
6
Dac se definesc
2 2 1 1
) ( ) , ( , ) , ( C y x y x g C x y x g
e e
+ , , i
1 2
r r y , atunci
cele dou polinoame au ca rdcin comun
1
M . Cu alte cuvinte,
1 2
r r este o rdcin
a lui
) , ( ) (
2 1
g g res y h
x

, iar gradul lui h este cel mult e. Se cunosc totodat urmtoarele:


2
/ 1
2
e m
N < < , i este o rdcin mic a lui h mod N . De aici rezult c se poate calcula
utiliznd teorema anterioar a lui Coppersmith. Odat calculat, se poate aplica metoda
Franklin-Reiter. Metoda funcioneaz pentru valoarea e=3 atta timp ct secvena de completare
este mai scurt dect 1/9 din lungimea mesajului. Pentru valoarea e = 65537, atacul nu mai
poate fi aplicat.
Expunerea parial a cheii
S-a pus deseori ntrebarea ce se ntmpl atunci cnd o parte a cheii private, s zicem un
sfert din biii acesteia sunt expui? Poate duce aceasta la compromiterea total a cheii private?
Rspunsul la aceast ntrebare este afirmativ, n cazul n care exponentul public este mic.
Recent Boneh, Durfee i Frankel [8] au demonstrat c este posibil s se reconstruiasc cheia
privat, dac se cunoate o secven din biii acesteia. Condiia ce trebuie ndeplinit este ca
N e < . Acest rezultat demonstreaz nc odat ct de important este pstrarea secret a
ntregii chei private. Iat i teorema ce st la baza acestui atac:
Fie (N, d) o cheie privat RSA, n care modulul N are n bii lungime. Dac se cunosc cei
mai puin semnificativi n/4 bii ai lui d, cheia privat poate fi reconstruit ntr-un timp liniar
cu ) log (
2
e e O .
Demonstraia teoremei se bazeaz pe o alta teorem, datorat lui Coppersmith:
Fie N = p * q un modul RSA de n bii lungime. Dai fiind cei mai semnificativi n/4 bii ai lui p
sau cei mai puini semnificativi n/4 bii ai lui q, se poate factoriza N ntr-un mod eficient.
Metoda funcioneaz att pentru un exponent public mic, ct i pentru valori ceva mai mari, dar
numai ct timp se respect inegalitatea N e < , n ultimul caz calculele fiind ns ceva mai
complicate. Este interesant de reinut i aspectul c sistemele criptografice ce se bazeaz pe
logaritmi discrei (de exemplu ElGamal), nu sunt susceptibile la atacul expunerii pariale a cheii
private. Se poate lesne observa c dintre metodele prezentate n clasa exponentului public mic,
acest ultim atac este unul dintre cele mai periculoase. Dei presupune cunoaterea unei fraciuni
din cheia privat, aceast condiie nu este imposibil de ndeplinit n practic. De multe ori,
folosirea diletant a sistemului sau neglijena n utilizarea acestuia au avut rezultate catastrofale
i compromiterea ideii de securitate.
7.Atacuri ndreptate mpotriva diverselor implementri
O clas aparte ntre metodele prezentate o constituie atacurile ndreptate mpotriva
diverselor implementri. Exist un numr de atacuri ce intesc nu att algoritmul RSA, ci
diverse implementri ale acestuia. Acestea nu pot fi considerate ns puncte slabe ale
algoritmului, ci ale implementrilor respective. Pentru a obine o securitate ridicat nu este
suficient doar de a avea o cheie cu un numr ct mai mare de bii, este necesar att pstrarea
acesteia ntr-un loc sigur, ct i o implementare ct mai robust a algoritmului (atacurile
mpotriva diverselor implementri se concentreaz de obicei pe slbiciuni n managementul
cheilor). Fr a avea pretenia de a epuiza acest capitol, prezentm n continuare cteva exemple
practice de atacuri ncununate de succes, i domeniul de aplicaie al acestora.
Atacul random faults
7
Multe din implementrile RSA folosesc teorema chinezeasc a restului (Chinese
Remainder Theorem - CRT) n cadrul operaiilor de decriptare sau semnare, pentru a calcula
ct mai repede N M
d
mod . n loc de a lucra cu modulul N, se lucreaz cu numerele p i q,
combinnd apoi rezultatele cu ajutorul CRT. Obinem astfel
p M C
dp
p
mod
i
q M C
dq
q
mod
, unde
) 1 mod( p d d
p
i
) 1 mod( q d d
q
. Semntura se obine n final
prin combinarea celor doi termeni astfel:
q p
C T C T C * *
2 1
+
, unde

'

q
p
T
mod 0
mod 1
1
,

'

q
p
T
mod 1
mod 0
2
Deoarece p i q au jumtate din lungimea modulului N, i deoarece implementrile simple ale
multiplicrilor necesit un timp ptratic, rezult c, calculele modulo p vor fi de 4 ori mai
rapide dect calculele modulo N. n acest caz, timpul de realizare al semnturii este de 4 ori mai
mic dect n mod normal. S-a demonstrat c, atunci cnd se folosete aceast metod, dac
dintr-un anumit defect (hardware: un bit resetat n mod incorect; software: un bug n program)
se ealizeaz o semntur fals, aceasta va duce la compromiterea cheii, N putnd fi uor
factorizat [10].
Presupunem n continuare c la generarea semnturii apare o singur eroare. Aceasta are ca
rezultat faptul c unul din cei doi termeni
p
C
sau
q
C
este incorect (fie
C
q
'
acesta).
Semntura rezultat
' * * '
2 1 q p
C T C T C +
este fals, deoarece N M C
e
mod ' . Avem ns i
alte dou relaii: p M C
e
mod ' i
q M e C mod '
. De aici rezult c cel mai mare divizor
comun al perechii ) ' , ( M C N
e
expune un factor al lui N. Pentru ca atacul s funcioneze, se
presupune cunoaterea lui N i nefolosirea unor adaosuri aleatoare la mesajul M. Dac se
adaug o serie aleatoare de bii la mesaj, nainte ca acesta s fie semnat, atacul nu mai poate fi
instrumentat. O alt metod de a prentmpina acest atac, sau atacuri similare, n special atunci
cnd se folosete metoda CRT pentru a obine o vitez mai mare la producerea semnturii, este
aceea de a verifica semntura,
nainte de a o face public.
Metode bazate pe durata de execuie (Timing Atacks)
Aceasta este o metod des utilizat n implementrile RSA pentru smartcard-uri.
Presupunnd c nu se poate accesa cheia privat stocat n smartcard, exist totui posibilitatea
de a msura exact timpii [9] necesari pentru ca smartcard-ul s efectueze diverse operaii
(decriptare/semnare). Examinarea acestor timpi duce n final la descoperirea exponentului privat
d, avnd ca efect compromiterea cheii private. Pentru exemplificare, considerm n continuare o
implementare simpl a algoritmului RSA, ce calculeaz N M C
d
mod folosind 2*n
multiplicri modulare. Fie
0
..d d d
n

reprezentarea binar a exponentului privat. Dac se


rescrie d ca sum, obinem:

n
i
i
i
d
0
* 2 , unde
} { 1 , 0
i
d
. Putem rescrie textul criptat dup cum
urmeaz:

n
i
d
N M C
i
i
0
* 2
mod
Algoritmul funcioneaz astfel: se atribuie lui z valoarea M i lui C valoarea 1, apoi se repet
paii pentru i=0..n
dac
1
i
d
se calculeaz C = C * z mod N ;
se calculeaz N z z mod
2
.
La sfrit C are valoare N M C
d
mod . Pentru a instrumenta atacul, se cere smartcard-ului
8
generarea unor semnturi pentru un numr mare de mesaje, msurnd timpul necesar pentru
calcularea fiecrei semnturi (
i
T
). n acest timp se descoper exponentul privat d bit cu bit. d0
este 1, deoarece d trebuie s fie impar. Iniial N M z mod
2
, iar C = M . Dac d1 = 1,
smartcard-ul va calcula produsul N M M z C mod * *
2
. Fie timpul
i
t
, care este necesar
smartcard-ului pentru a calcula N M M
i i
mod *
2
. Valorile
i
t
vor depinde de valorile Mi , dar
persoana ce instrumenteaz atacul are posibilitatea de a msura off-line aceti timpi, dac
posed specificaiile card-ului. Astfel, se poate stabili dac d1 are valoarea 0 sau 1. Procednd
mai departe dup acelai raionament se pot afla valorile biilor d2, d3 , etc. O metod de
aprare mpotriva acestui atac este introducerea unor ntrzieri, care s aib ca rezultat calculul
exponentului modular ntr-un timp fix, indiferent de mesajul de criptat. Exist i posibilitatea de
a utiliza metoda de blinding (prezentat n capitolul Metode elementare de atac), datorat
lui Rivest. Smartcard-ul alege un numr r aleator, calculeaz N r M M
e
mod * ' , apoi, cu
noul M se calculeaz C. n final C = C' / r mod N . Aceasta are ca rezultat faptul c smartcard-
ul efectueaz calcule asupra unui mesaj M aleator, atacul nemaiputnd fi instrumentat. Kocher
a prezentat recent o alt metod asemntoare de atac, numit criptanaliza puterii. El a artat c,
msurnd cu atenie puterea consumat de smartcard n timpul generrii unei semnturi, se
poate descoperi destul de uor cheia secret. Dup cum a rezultat, n timpul unei multiplicri de
precizie, consumul smartcard-ului este mai ridicat dect de obicei. Msurnd lungimea acestor
perioade de consum ridicat se poate stabili cte multiplicri face smartcard-ul, dezvluind astfel
valoarea bitului respectiv [9].
Metoda Bleichenbacher (PKCS1)
Dac N este un modul RSA de n bii lungime, iar M este un mesaj alctuit din m bii
astfel nct m < n, unele versiuni de software obinuiesc de a completa mesajul M cu un numr
de bii aleatori pn la lungimea n o versiune mai veche a PKCS1 procedeaz asemntor.
Dup completare, mesajul arat astfel:
n varianta respectiv, valoarea 0x02 ocup 16 bii i specific faptul c s-a utilizat o
completare aleatoare a mesajului. La recepie, destinatarul decripteaz mesajul, ncercnd s
ndeprteze completarea aleatoare. Unele implementri au returnat n acest moment eroarea
text cifrat invalid, dac nu au ntlnit codul 0x02 la nceputul secvenei. Bleichenbacher a
demonstrat c, profitnd de acest mesaj, un atacator poate decripta texte cifrate [11].
Presupunnd c atacatorul recepioneaz textul cifrat C, el alege un r aleator i calculeaz
N C r C mod * ' i trimite noul C destinatarului. Pe baza rspunsului ce vine de la destinatar,
el va afla dac decriptarea primilor 2 octei a avut ca rezultat valoarea 0x02 sau nu. De fapt,
atacatorul are la dispoziie un oracol care i va prezice ntotdeauna cu exactitate dac primii
doi octei se decripteaz n valoarea 0x02 sau nu, pentru orice r ales aleator. Bleichenbacher a
demonstrat c un astfel de oracol este suficient pentru a decripta mesajul criptat.
Algoritmul RSA n aplicaii practice
n practic, RSA este foarte des utilizat mpreun cu algoritmi cu cheie simetric (de
exemplu DES). Se genereaz o cheie DES, cu care se cripteaz mesajul. Apoi, cheia simetric
se cripteaz cu ajutorul cheii publice a persoanei creia i este destinat mesajul i se trimite
destinatarului mpreun cu mesajul criptat (acestea dou formeaz un plic digital RSA).
Destinatarul va decripta mai nti cheia DES cu ajutorul cheii sale private, apoi mesajul, cu
ajutorul cheii simetrice, obinut din prima decriptare. Cheia DES poate fi n continuare
utilizat i ca o cheie de sesiune. Pentru semnarea unui mesaj, mai nti se creeaz o amprent
9
digital (message digest) a acestuia cu ajutorul unei funcii hash. Aceasta se cripteaz cu
ajutorul cheii private, rezultatul urmnd a fi trimis destinatarului. Pentru verificarea semnturii,
se decripteaz mesajul cu ajutorul cheii publice a semnatarului, obinnd astfel amprenta
digital, care va fi comparat cu cea obinut aplicnd din nou funcia hash asupra mesajului.
Dac cele dou amprente sunt identice, rezult faptul c semntura digital este autentic. n
momentul de fa, RSA este utilizat ntr-o varietate de produse, platforme i standarde. El poate
fi ntlnit n sisteme de operare, precum: Microsoft, Apple, Sun sau Novell, n componente
hardware, precum: sisteme telefonice, card-uri de reea sau smartcard-uri, n protocoale de
comunicaie, precum: S/MIME, SSL, IPSec, PKCS sau S/WAN. El este n mod sigur cel mai
rspndit algoritm cu cheie public utilizat la ora actual.
Concluzii
La ora actual exist o multitudine de metode de atac i o mulime de vulnerabiliti ce
trebuie luate n considerare pentru a putea programa o versiune robust de RSA. Numai o
analiz atent i o cunoatere amnunit a acestora poate duce la realizarea unei implementri
robuste. Metodele prezentate au att o valoare teoretic ct i una practic, n funcie de
impactul pe care l au asupra algoritmului. Prezentm n continuare un set de msuri ce trebuie
ndeplinite pentru a prentmpina vulnerabilitile prezentate anterior:
folosirea unor chei de lungime potrivit (de obicei se caut un compromis ntre nivelul de
securitate i vitez);
adugarea unei secvene aleatoare de completare a mesajului;
folosirea unor valori ale exponentului privat ce ndeplinesc condiia , pentru a
mpiedica atacul exponentului privat;
evitarea folosirii unor anumite valori ntregi pentru exponentul public (de exemplu 3);
semnarea amprentei (hash-ului) unui mesaj, nu a mesajului n sine;
evitarea producerii de semnturi sau criptri false, eventual prin verificarea lor ulterioar
nainte de publicare, dac nu exist alt metod;
introducerea de timpi aleatori n algoritm, acolo unde este posibil o analiz temporal
a acestuia;
evitarea de a rspunde automat la toate cererile primite, pentru a nu transforma serverul n
oracol, eventual realizarea unui jurnal pentru a putea pstra o istorie a cererilor primite. n
ultimul timp a devenit clar c sistemele cu chei publice sunt un mecanism indispensabil att
pentru managementul cheilor ct i pentru comunicaiile sigure. Ceea ce este mai puin clar este
modalitatea de a alege cel mai bun sistem ntr-o anumit situaie. Unul dintre criteriile cele mai
des folosite pentru a alege l constituie tehnica utilizat de algoritm. Fr o cunoatere profund
a acesteia, a vulnerabilitilor, dar mai ales a metodelor de atac, cu greu mai putem concepe
astzi programarea unui versiuni robuste i sigure a unui algoritm criptografic. Mai mult de
dou decenii de atacuri mpotriva RSA au produs o serie de atacuri interesante, dar nu au fost
gsite (pn n prezent) metode astfel nct algoritmul s fie compromis. Atacurile prezentate i
n aceast lucrare subliniaz n mare parte capcanele ce ar
trebui ocolite atunci cnd se implementeaz algoritmul. Se poate deci presupune c
implementrile RSA, ce respect un set de reguli bine stabilit, pot furniza un grad ridicat de
securitate [12] [13].
Bibliografie
1. An Overview of the Attack Methods Directed Against the RSA Algorithm
Ing. Cristian MARINESCU, prof.dr.ing. Nicolae PU
10
2. Bellare, M., Rogaway, P.: Optimal asymmetric encryption, Eurocrypt 94, Lecture Notes in
Computer Science, Springer-Verlag, vol. 950, 1994, p. 92-111.
3. Boneh, D., Venkatesan, R.: Breaking RSA may not be equivalent to factoring, Advances in
Cryptology - Eurocrypt 98, Springer-Verlag, 1998, p. 59-71.
4. Wiener, M.: Cryptanalysis of short RSA secret
exponents, IEEE Transactions on Information Theory,
1990, vol.36, p.553-558.
5. D. Boneh, D., Durfee, G.: New results on cryptanalysis
of low private exponent RSA, Preprint, 1998.
6. Howgrave-Graham, N.: Finding small roots of
univariate modular equations revisited, Cryptography
and Coding, Lecture Notes in Computer Science,
Springer-Verlag, vol. 1355, 1997, p. 131-142.
6. Hastad, J.: Solving simultaneous modular equations
of low degree, SIAM Journal of Computing,
1988, p.336-341.
7. Coppersmith, D., Franklin, M., Patarin, J., Reiter,
M.: Low-exponent RSA with related messages,
Eurocrypt '96, Lecture Notes in Computer Science,
Springer-Verlag , vol. 1070, 1996, p. 1-9.
8. D. Boneh, D., Durfee, G., Frankel, Y.: An attack
on RSA given a fraction of the private key bits, Asia-
Crypt 98, Lecture Notes in Computer Science,
Springer-Verlag, vol. 1514, 1998, p. 25-34.
9. Kocher, P.: Timing attacks on implementations of
Diffie-Hellman, RSA, DSS, and other systems, Crypto
96, Lecture Notes in Computer Science, Springer-
Verlag, vol. 1109, 1996, p. 104-113.
10. Boneh, D., DeMillo, R., Lipton, R.: On the importance
of checking cryptographic protocols for
faults, Eurocrypt 97, Lecture Notes in Computer
Science, Springer-Verlag, vol. 1233, 1997, p.37-51.
11. Bleichenbacher, D.: Chosen ciphertext attacks
against protocols based on the RSA encryption standard
PKCS #1, Crypto 98, Lecture Notes in Computer
Science, Springer-Verlag, vol. 1462, 1998
12. Boneh., D.: Twenty years of attacks on the RSA
cryptosystem, American Mathematical Society, vol.
46, No. 2, 1999, p. 203-213.
13. Wiener, M. J.: Performance Comparison of Public-
Key Cryptosystems, CryptoBytes, Vol.4, Nr.1,
1998
Partea practica: Criptare, Decriptarea RSA
RSA.java
package com.myproject.Encrypter;
11
import java.math.BigInteger;
import java.security.SecureRandom;
public class RSA {
private final static BigInteger one = new BigInteger("1");
private final static SecureRandom random = new SecureRandom();
private BigInteger privateKey;
private BigInteger publicKey;
private BigInteger modulus;
// generate an N-bit (roughly) public and private key
RSA(int N) {
BigInteger p = BigInteger.probablePrime(N / 2, random);
BigInteger q = BigInteger.probablePrime(N / 2, random);
BigInteger phi = (p.subtract(one)).multiply(q.subtract(one));
modulus = p.multiply(q);
publicKey = new BigInteger("65537"); // common value in practice = 2^16
// + 1
privateKey = publicKey.modInverse(phi);
}
BigInteger encrypt(BigInteger message) {
return message.modPow(publicKey, modulus);
}
BigInteger decrypt(BigInteger encrypted) {
return encrypted.modPow(privateKey, modulus);
}
public String toString() {
String s = "";
s += "public = " + publicKey + "\n";
s += "private = " + privateKey + "\n";
s += "modulus = " + modulus;
return s;
}
public SecureRandom getSecureRandom() {
return random;
}
}
App.java
package com.myproject.Encrypter;
import java.math.BigInteger;
12
import java.security.SecureRandom;
public class App {
public static void main(String[] args) {
System.out.println("START");
int N = Integer.parseInt(args[0]);
RSA key = new RSA(N);
System.out.println("RSA object: ----------------------\n" + key.toString()
+ "\n-----------------------------");
// create random message, encrypt and decrypt
SecureRandom random = key.getSecureRandom();
BigInteger message = new BigInteger(N - 1, random);
BigInteger encrypt = key.encrypt(message);
BigInteger decrypt = key.decrypt(encrypt);
System.out.println("message = " + message);
System.out.println("encrpyted = " + encrypt);
System.out.println("decrypted = " + decrypt);
System.out.println("END");
}
}
13

Evaluare