Sunteți pe pagina 1din 3

Algoritmul RSA

Denumirea de algoritm RSA provine de la initialele numelor inventatorilor sai,


Ron Rivest, Adi Shamir si Len Adleman.
Algoritmul RSA poate fi folosit atat pentru criptare cu cheie publica cat si
pentru semantura digitala. Securitatea algoritmului se bazeaza pe dificultatea
de a descompune numere intregi mari in factori primi.
Continut
Algoritm de generare a cheilor
Criptare
Decriptare
Semnatura digitala
Verificarea semnaturii
Observatii si aplicatii practice
Un exemplu de criptare RSA
Implementarea Java
Algoritm de generare a cheilor

1.Se genereaza doua numere prime mari ( la intamplare) , p si q, de lungimi


aproximativ egale astfel incat produsul lor este de lungimea ceruta
(ex. 1024 biti).(obs 1)
2.Se calculeaza n=p*q is ?=(p-1)*(q-1).
3.Se alege un numar intreg e (1<e<?) astfel incat cmmdc(e, ?)=1.(obs 2)
4.Se afla exponentul secret d, 1<d<?, astfel incat (e*d)? 1 (mod ?).(obs 3)
5.Cheia publica este perechea (n,e) ,iar cheia privata perechea (n,d). Valorile lui p, q,
? trebuie de asemenea pastrate secrete.
e este cunoscut si sub denumirea de exponent public (exponent de criptare) , iar d sub
numele de exponent secret (exponent de decriptare).

Criptarea
Expeditorul A face urmatoarele lucruri:
1.Obtine cheia publica (n,e) a destinatarului B.
2.Reprezinta mesajul ca un numar pozitiv m.
3.Compune textul criptat c=m^e mod n.
4.Ii trimite textul c lui B.
Decriptare
Destinatarul B face urmatoarele lucruri:
1.Foloseste cheia privata (n,d) pentru a calcula m=c^d mod n.
2.Extrage textul original din numarul reprezentativ m.
Semnarea digitala

Expeditorul A face urmatoarele lucruri:


1.Creeaza un mesaj corespunzator informatiei care va fi trimisa.
2.Il reprezinta pe acesta ca un numar intreg m cuprins intre 0 si
n-1.
3.Foloseste cheia privata (n,d) pentru a calcula semnatura
s=m^d mod n.
4.Trimite aceasta semnatura s destinatarului B.
Verificarea semnaturii
Destinatarul B face urmatoarele lucruri:
1.Utilizeaza cheia publica (n,e) a expeditorului A pentru a calcula numarul intreg v=s^e
mod n.
2.Extrage mesajul din acest intreg.
3.Independent calculeaza mesajul corespunzator al informatiei care a fost
semnat.
4.Daca sunt identice, inseamna ca semnatura este valida.
Observatii si aplicatii practice
1.Pentru a genera numerele prime p si q se genereaza un numar cu b/2 biti unde b este
numarul de biti ai lui n; se seteaza bitul cel mai putin semnificativ (asigura faptul ca
numarul este impar) si cei mai semnificativi doi biti (inseamna ca si bitul cel mai
semnificativ al lui n este setat); se verifica daca este prim; daca nu se creste numarul cu doi
si se verifica din nou.Acesta va fi p.Se repeta si pentru q pornind cu un intreg de lungime bb/2.
2.In practica alegeri comune pentru e sunt 3,17,65537(2^16+1).Acestea sunt numere
prime Fermat si sunt alese pentru ca produc exponentierea modulara mai rapid.
3.Pentru a calcula valoarea lui d se foloseste algoritmul euclidian extins (d=e^-1 mod f).
Algoritmul RSA
1.Se aleg la intamplare doua numere prime mari de aproximativ aceeasi dimensiune.
2.Se calculeaza produsul n=p*q (inmultire obisnuita de numere intregi).
3.Se alege un exponent de criptare e la intamplare mai mic decat n care nu are factor
comun nici cu p-1 si nici cu q-1(e si (p-1)*(q-1) sunt relativ prime).
4.Se calculeaza exponentul de decriptare (unic) care satisface urmatoarea conditie
e*d mod (p-1)*(q-1)=1.
5.Functia de criptare este E(m)=me mod n, pentru orice mesaj m.
6.Functia de decriptare este D(c)=cd mod n, pentru orice text cifrat c.
7.Cheia publica (facuta publica) este perechea de intregi (n,e).
8.Cheia privata (pastrata secreta) este tripletul de intregi (p,q,d).
Cateva indicatii pentru regulile prezentate anterior:
1.In present, mare inseamna cel putin 512 de biti.Pentru o mai mare securitate fiecare
numar prim ar trebui sa fie de cel putin 1024 biti.
2.n este de lungime cel putin 1024 sau 2048 biti.
3.Exponentul de criptare e poate fi doar 3.Daca cineva foloseste acest exponent, atunci
numerele prime trebuie alese astfel incat p-1 si q-1 sa nu fie divizibile cu 3.
Pentru a arata ca decriptarea RSA intoarece ceea ce RSA a criptat, trebuie aratat doar
faptul ca D(E(m))=m pentru orice mesaj m sau ca (me)d mod n=m.
Dar e*d mod (p-1)*(q-1)=1, deci
(me)d mod n=(med mod n=med mod(p-1)*(q-1) mod n= m1 mod n=m.

Implementarea Java a algoritmului RSA uilizeaza clasa BigInteger care contine toate
metodele care sunt necesare implementarii algoritmului fara dificultate.
Un simplu exemplu de criptare RSA

1.Se selecteaza numerele prime p=11, q=3


2. n = pq = 11*3 = 33
f = (p-1)*(q-1) = 10*2 = 20
1. Se alege e=3
Se verifica daca cmmdc(e, p-1) = cmmdc(3, 10) = 1 (adica 3 si 10 nu au alt divizor comun
in afara de 1),si se verifica daca cmmdc(e, q-1) = cmmdc(3, 2) = 1
astfel cmmdc(e, f) = cmmdc(e, (p-1)(q-1)) = cmmdc(3, 20) = 1
2. Se calculeaza d astfel incat ed = 1 (mod f)
d = e^-1 mod f = 3^-1 mod 20 adica se gaseste o valoare pentru d astfel incat f este
divizibli cu (ed-1) adica 20 este divizibil cu 3d-1.
O simpla testare (d = 1, 2, ...) si-l obtinem pe d: d = 7
Se verifica: ed-1 = 3*7 - 1 = 20, care este divizibil cu f.
3. Cheia publica= (n, e) = (33, 3)
Cheia privata = (n, d) = (33, 7).
Acesta este de fapt cea mai mica valoare a lui n pentru care funcitoneaza algoritmul RSA.
Sa zicem ca vrem sa criptam mesajul m=7,c = m^e mod n = 7^3 mod 33 =
343 mod 33 = 13.
Deci textul cifrat este c = 13.
Pentru a verifica decriptarea calculam m' = c^d mod n = 13^7 mod 33 = 7.
Observam ca nu trebuie sa calculam valoarea lui 13 la puterea a 7-a. Ne putem folosi de
faptul ca a=bc mod n=(b mod n)*(c mod n) mod n asa ca putem descompune un numer
mare in componente si sa combinam rezultatul facand calcule mai simple pentru a afla
valoarea finala.
O modalitate de a calcula m' este urmatorul:m' = 13^7 mod 33 = 13^(3+3+1) mod 33 = 13^3*13^3 13 mod 33
= (13^3 mod 33)*(13^3 mod 33)*(13 mod 33) mod 33
= (2197 mod 33)*(2197 mod 33)*(13 mod 33) mod 33
= 19*19*13 mod 33 = 4693 mod 33
= 7.
Acum daca calculam textul cifrat cpentru toate valorile posibile ale lui m (0 ..32), obtinem
m 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
c 0 1 8 27 31 26 18 13 17 3 10 11 12 19 5 9 4
m 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32
c 29 24 28 14 21 22 23 30 16 20 15 7 2 6 25 32
Implementarea Java

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