Sunteți pe pagina 1din 23

Criptosisteme cu cheie publică II

Martie 2020
Criptosistemul Rabin

Michael O. Rabin, 1979


Funcţia trapă:
x 7−→ x 2 (mod n)
unde n = pq, cu p şi q numere prime.
Este primul exemplu de criptosistem pentru care se poate
demonstra că descifrarea unui mesaj, fără a cunoaşte cheia de
decriptare, este echivalentă cu factorizarea lui n.
SQROOT: Dat un număr compus n (= pq) şi dat
a ∈ {1, 2, . . . , n − 1} care este un pătrat perfect, să se determine o
rădăcină pătrată a lui a modulo n.
FACTOR: Dat un număr n care este produsul a 2 numere prime
(necunoscute), să se determine factorii primi ai lui n.
Problemele SQROOT şi FACTOR sunt echivalente din punct
de vedere computaţional.
Criptosistemul Rabin

Alegerea cheilor
Fiecare utilizator A:
alege două numere prime mari, p şi q, de aproximativ aceeaşi
mărime
calculează n = pq
Ke = n (public), Kd = (p, q) (secret)
Criptosistemul Rabin

Algoritm de criptare
B obţine cheia de criptare a lui A, n
reprezintă mesajul in clar ca un număr intreg
m ∈ {0, 1, . . . , n − 1}
calculează c = m2 (mod n)
trimite c
Criptosistemul Rabin
Algoritm de decriptare
A primeşte mesajul c.
A aplică algoritmi de determinare a rădăcinii pătrate a lui c
modulo n (funcţionarea lor depinde de cunoaşterea factorilor p
şi q).
A determină 4 solutii, una dintre ele fiind m.
Algoritm de determinare a rădăcinii pătrate modulo n = pq,
când p ≡ q ≡ 3 (mod 4).
Se determină (folosind algoritmul lui Euclid) u, v ∈ Z astfel
ı̂ncât up + vq = 1.
r := c (p+1)/4 (mod p).
s := c (q+1)/4 (mod q).
x := ups + vqr (mod n), y := ups − vqr (mod n).
Cele 4 rădăcini pătrate a lui c modulo n sunt
x, −x, y , −y (mod n).
Criptosistemul Rabin

Exemplu
p = 7, q = 11.
Cheia publică: n = 77.
Cheia secretă: (7, 11).
Criptare: m = 20 c = m2 (mod n) = 400 (mod 77) = 15.
Decriptare: Cu algoritmul de mai sus se obţine

m ∈ {64, 20, 13, 57}.


Criptosistemul Rabin

Exemplu
p = 277, q = 331.
Cheia publică: n = 91687.
Cheia secretă: (277, 331).
Criptare: Presupunem că este necesar ca ultimii 6 biţi ai mesajelor
ı̂n clar trebuie să fie repetaţi. Avem de criptat şi trimis mesajul
m = 1001111001 m = 1001111001111001 = 40569
c = 405692 (mod 91687) = 62111.
Decriptare: m ∈ {69654, 22033, 40569, 51118}
m1 = 10001000000010110, m2 = 101011000010001,
m3 = 1001111001111001, m4 = 1100011110101110
din care numai m3 = 1001111001111001 verifică regula de
redundanţă.
Logaritmul discret
Funcţie cu sens unic: ridicarea la putere intr-un corp finit cu multe
elemente.
In R: y = b x ⇐⇒ x = logb y .
Intr-un corp finit:
b x se calculează relativ uşor
dat fiind y , cum se calculează x astfel incât y = b x ?
problema logaritmului discret.
Definiţie
Dacă G este un grup finit, b ∈ G , y ∈ G care este o putere a lui b,
numim logaritm discret al lui y in baza b orice număr intreg x ce
verifică b x = y .

Exemplu
G = Z∗19 , b = 2. Logaritmul discret al lui 7 in baza 2 este 6.
Criptosistemul Diffie–Hellman

Cunoscut ca protocol de schimb a cheilor pentru criptosisteme


simetrice (1976)
Permite a două entităţi care nu se cunosc şi nu se intâlnesc direct
să cadă de acord asupra unei chei secrete k, printr-un schimb de
informaţii public, a.i. in final un observator nu poate avea nici un
bit din k
A şi B cad de acord, in mod public, asupra unui număr prim
mare p şi a unui număr β.
A generează un număr secret a, calculează şi trimite lui B
u = β a (mod p).
B generează un număr secret b, calculează şi trimite lui A
v = β b (mod p).
A calculează k = v a , B calculează k = u b .
Criptosistemul Diffie–Hellman

Precautii:
p−1
p trebuie să fie un număr prim perfect, i.e. 2 este
deasemenea prim
β trebuie să fie un generator al lui Z∗p
folosirea unor semnături digitale, pentru a evita ca unul din
parteneri să fie un inamic
Whitfield Diffie, Martin Hellman 1976
Criptosistemul El Gamal

Taher Elgamal, 1984


Implementat in GNU Privacy Guard
Siguranta sistemului depinde de Decisional Diffie-Hellman (DDH)
assumption: dat fiind un generator g al unui grup finit G de ordin
q, este imposibil, din punct de vedere computaţional, să distingem
ı̂ntre tripletele:
- (g a , g b , g ab ), unde a, b ∈ Zq aleatorii;
- (g a , g b , g c ), unde a, b, c ∈ Zq aleatorii.
Alegerea cheilor
Fiecare utilizator A:
generează un număr prim p, un generator g ∈ Z∗p , alege aA ,
0 < aA < p − 1
calculează α = g aA
face public Ke = (p, g , α), păstrează secret Kd = aA
Criptosistemul El Gamal

Algoritm de criptare:
B vrea să trimită mesajul m lui A.
B obţine cheia de criptare a lui A, Ke = (p, g , α)
alege k la intâmplare
trimite (u = g k , v = m · αk ) (mod p)
αk (= g aA k ) = masca, g k =cheia măştii
Algoritm de decriptare:
A primeşte (u, v )
ridică u la puterea p − 1 − aA şi obţine
w = u p−1−aA = u −aA (mod p)
calculează m = v · w (mod p)
Criptosistemul El Gamal

Exemplu
Generarea cheilor: A alege numărul prim p = 2357 şi generatorul
g = 2 ∈ Z∗2357 .
A alege aA = 1751 şi calculează

g aA (mod p) = 21751 (mod 2357) = 1185.

Cheia publică: (2357, 2, 1185).


Cheia secretă: 1751.
Criptosistemul El Gamal

Exemplu
Criptare: B vrea să-i trimită lui A mesajul m = 2035. B alege
k = 1520 şi calculează

u = 21520 (mod 2357) = 1430

v = 2035 · 11851520 (mod 2357) = 697.


B trimite (u = 1430, v = 697).
Decriptare: A calculează

w = 14302357−1−1751 (mod 2357) = 1430605 (mod 2357) = 872

m = 697 · 872 (mod 2357) = 2035.


Criptosistemul Massey-Omura

Un corp finit Zp (p număr prim) este fixat in mod public şi


cunoscut de toţi utilizatorii.
Alegerea cheilor:
Fiecare utilizator alege un număr e ∈ {1, 2 . . . , p − 1} astfel
incât cmmdc(e, p − 1) = 1, şi calculează
d = e −1 (mod p − 1). Aşadar ed = 1 (mod p − 1).

Propoziţie
Dacă a ∈ Z∗p , atunci

aed = a (mod p)
Criptosistemul Massey-Omura

Transmitrea mesajelor:
B vrea să trimită mesajul P lui A.
B trimite lui A mesajul C1 := P eB .
A primeşte C1 , calculează şi trimite lui B C2 := C1eA (mod p).
B primeşte C2 , calculează şi trimite lui B C3 := C2dB (mod p).
A primeşte C3 , calculează C3dA (mod p) şi obţine P.
1 11 21 31 41 51 2 11 22 31 42 51 4 13 22 31 44 53

3 13 23 33 43 53 3 14 23 34 43 54 5 14 23 36 45 54

5 15 25 35 45 55 6 15 26 35 46 55 6 15 28 37 46 55

7 17 27 37 47 57 7 18 27 38 47 58 7 20 29 38 47 60

9 19 29 39 49 59 10 19 30 39 50 59 12 21 30 39 52 *

8 13 26 31 44 57 16 21 26 31 52 57 32 37 42 47 52 57

9 14 27 40 45 58 17 22 27 48 53 58 33 38 43 48 53 58

10 15 28 41 46 59 18 23 28 49 54 59 34 39 44 49 54 59

11 24 29 42 47 60 19 24 29 50 55 60 35 40 45 50 55 60

12 25 30 43 56 * 20 25 30 51 56 * 36 41 46 51 56 *
Problema rucsacului (“knapsack problem”)
Considerăm un număr natural V > 0 şi o mulţime finită de numere
naturale pozitive
{v0 , v1 , . . . , vk−1 } .
Problemă: Determinaţi o submulţime I ⊆ {0, 1, 2, . . . , k − 1}
astfel incât X
V = vi .
i∈I

Reformulare: Determinaţi un număr ε = (εk−1 εk−2 . . . ε0 )2 scris in


baza 2 (εi ∈ {0, 1}) astfel incât
k−1
X
V = ε i vi .
i=0

Problema rucsacului este foarte dificilă! Nu există nici un algoritm


care să o rezolve in timp polinomial.
Problema rucsacului - cazul supercrescător

Problema rucsacului este mult mai simplă in cazul in care şirul


{v0 , v1 , . . . , vk−1 } este supercrescător
i−1
X
vi > vj , i = 1, 2, . . . , k − 1 .
j=0
Algoritm (cazul supercrescător)

1 w := V , j := k − 1, εk−1 = . . . = ε0 = 0
2 Dacă vj > w scrie j := j − 1
Dacă j ≥ 0 mergi la 2
Dacă j < 0 scrie Problema nu are soluţie; exit.
Dacă vj ≤ w scrie εj := 1, w := w − vj , j := j − 1
Dacă w = 0 scrie εk−1 εk−2 . . . ε0 ; exit.
Dacă w > 0
- Dacă j ≥ 0 mergi la 2
- Dacă j < 0 scrie Problema nu are soluţie; exit.
Criptosistemul Merkle-Hellman (1978)
Unitatea de mesaj: bloc de k biţi = intreg m scris in baza 2, cu k
biţi
Exemplu: o literă din alfabetul latin = număr in baza 2 intre 0 şi
11001 = 25, k = 5.
Alegerea cheilor:
Fiecare utilizator A alege un şir de numere naturale
{v0A , v1A , . . . , vk−1
A }, supercrescător.

A alege un intreg mA > k−1 A


P
i=0 vi .
A alege un intreg aA , 0 < aA < mA , (aA , mA ) = 1.
A calculează
−1
bA := aA (mod mA )
wiA = aA · viA (mod mA )
A face publică cheia Ke = {w0A , w1A , . . . , wk−1
A }

A ţine secretă cheia Kd = {bA , mA }. Informaţiile viA , aA sunt


secrete şi pot fi şterse.
Criptosistemul Merkle-Hellman (1978)

Algoritm de criptare:
B vrea să trimită mesajul m = (εk−1 εk−2 . . . ε0 )2 lui A.
B calculează
k−1
X
c := f (m) = εi wiA
i=0

B transmite c.
Criptosistemul Merkle-Hellman (1978)

Algoritm de decriptare:
A primeşte c şi calculează

V := bA · c (mod mA )

Avem
k−1
X k−1
X
V = εi bA wiA ≡ εi viA (mod mA )
i=0 i=0
Pk−1
Observăm că V < mA , i=0 viA < mA , deci congruenţa de
mai sus este chiar egalitate.
A aplică algoritmul anterior pentru a determina
εk−1 , εk−2 , . . . , ε0 şi recuperează mesajul m.

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