Sunteți pe pagina 1din 86

Prelegerea 4

Sistemul de criptare DES

4.1 Consideraţii generale


În mai 1973, Biroul Naţional de Standarde din SUA a lansat ı̂n Registrul Federal (jurnalul
oficial al guversnului) un apel la oferta unui sistem de criptare care să se numească Data
Encryption Standard (DES). Firma IBM a construit acest sistem – publicat ı̂n Registrul
Federal la 17 martie 1975, modificând un sistem de criptare mai vechi, numit Lucif er.
După dezbateri publice, DES a fost adoptat oficial la 17 ianuarie 1977 ca standard de
criptare. De atunci, el a fost re-evaluat la fiecare 5 ani. Spargerea sa ı̂n iulie 1998 a coincis
(ı̂ntâmplător ?) cu durata sa oficială de utilizare.

4.2 Descrierea sistemului DES


Sistemul DES criptează un bloc de text clar de 64 biţi ı̂ntr-un text criptat tot de 64 biţi,
utilizând o cheie de 56 biţi. Algoritmul cuprinde 3 etape:
1. Fie α textul clar inţial, de 64 biţi. Lui i se aplică o permutare IP iniţială fixată,
obţinându-se α0 = IP (α) = L0 R0 . L0 este format din primii 32 biţi ai lui α0 , iar
R0 – din ultimii 32 biţi.
2. Se efectuează 16 iteraţii (tururi) ale unei funcţii care se va preciza. La fiecare tur
se calculează Li Ri (1 ≤ i ≤ 16) după regula

Li = Ri−1
Ri = Li−1 ⊕ f (Ri−1 , Ki )

unde ⊕ este sau - exclusiv (XOR) a două secvenţe binare. f este o funcţie care se
va preciza, iar K1 , K2 , . . . , K16 sunt secvenţe de 48 biţi calculaţi din cheia K. Se
spune că K1 , K2 , . . . , K16 sunt obţinuţi prin diversificarea cheii (key shedule).
3. Blocului R16 L16 i se aplică inversa permutării iniţiale pentru a obţine textul criptat
β = IP −1 (R16 L16 ).

1
2 PRELEGEREA 4. SISTEMUL DE CRIPTARE DES

Funcţia de criptare f (I, J) are ca argumente două secvenţe binare: una de 32 biţi, iar
a doua de 48 biţi. Rezultatul este o secvenţă de 32 biţi. Etapele de calcul ale funcţiei
sunt:

1. Argumentul A este extins la 48 biţi folosind o funcţie de expansiune E. E(A)


cuprinde biţii lui A aşezaţi ı̂ntr-o anumită ordine, unii biţii fiind scrişi de două ori.

2. Se calculează B = E(A) ⊕ J; rezultatul se descompune ı̂n 8 subsecvenţe de câte 6


biţi fiecare: B = B1 B2 B3 B4 B5 B6 B7 B8 .

3. Se folosesc 8 cutii S1 , S2 , . . . , S8 , fiecare din ele fiind un tablou de dimensiuni 4×16 cu


elemente numere ı̂ntregi din intervalul [0, 15]. Pentru o secvenţă Bj = b1 b2 b3 b4 b5 b6
se calculează un şir de 4 biţi Sj (Bj ) astfel: biţii b1 b6 dau reprezentarea binară a
indicelui unei linii r (0 ≤ r ≤ 3) din Sj ; ceilalţi biţi b2 b3 b4 b5 dau reprezentarea
binară a indicelui unei coloane c (0 ≤ c ≤ 15) din tablou. Atunci Cj = Sj (Bj ) =
[Sj (r, c)]2 (1 ≤ j ≤ 8).

4. Secvenţa C = C1 C2 C3 C4 C5 C6 C7 C8 – de lungime 32 – se rearanjează folosind o


permutare fixată P . Rezultatul final este f (A, J) = P (C).

Mai rămâne să specificăm funcţiile particulare folosite de sistemul DES:

• Permutarea iniţială IP este:

58 50 42 34 26 18 10 2
60 52 44 36 28 20 12 4
62 54 46 38 30 22 14 6
64 56 48 40 32 24 16 8
57 49 41 33 25 17 9 1
59 51 43 35 27 19 11 3
61 53 45 37 29 21 13 5
63 55 47 39 31 23 15 7

• Permutarea inversă IP −1 este:

40 8 48 16 56 24 64 32
39 7 47 15 55 23 63 31
38 6 46 14 54 22 62 30
37 5 45 13 53 21 61 29
36 4 44 12 52 20 60 28
35 3 43 11 51 19 59 27
34 2 42 10 50 18 58 26
33 1 41 9 49 17 57 25

• Funcţia de expansiune E este definită de tabloul:


4.2. DESCRIEREA SISTEMULUI DES 3

32 1 2 3 4 5
4 5 6 7 8 9
8 9 10 11 12 13
12 13 14 15 16 17
16 17 18 19 20 21
20 21 22 23 24 25
24 25 26 27 28 29
28 29 30 31 32 1

• Cele opt cutii S (S-boxes) sunt:

S1
14 4 13 1 2 15 11 8 3 10 6 12 5 9 0 7
0 15 7 4 14 2 13 1 10 6 12 11 9 5 3 8
4 1 14 8 13 6 2 11 15 12 9 7 3 10 5 0
15 12 8 2 4 9 1 7 5 11 3 14 10 0 6 13
S2
15 1 8 14 6 11 3 4 9 7 2 13 12 0 5 10
3 13 4 7 15 2 8 14 12 0 1 10 6 9 11 5
0 14 7 11 10 4 13 1 5 8 12 6 9 3 2 15
13 8 10 1 3 15 4 2 11 6 7 12 0 5 14 9
S3
10 0 9 14 6 3 15 5 1 13 12 7 11 4 2 8
13 7 0 9 3 4 6 10 2 8 5 14 12 11 15 1
13 6 4 9 8 15 3 0 11 1 2 12 5 10 14 7
1 10 13 0 6 9 8 7 4 15 14 3 11 5 2 12
S4
7 13 14 3 0 6 9 10 1 2 8 5 11 12 4 15
13 8 11 5 6 15 0 3 4 7 2 12 1 10 14 9
10 6 9 0 12 11 7 13 15 1 3 14 5 2 8 4
3 15 0 6 10 1 13 8 9 4 5 11 12 7 2 14
S5
2 12 4 1 7 10 11 6 8 5 3 15 13 0 14 9
14 11 2 12 4 7 13 1 5 0 15 10 3 9 8 6
4 2 1 11 10 13 7 8 15 9 12 5 6 3 0 14
11 8 12 7 1 14 2 13 6 15 0 9 10 4 5 3
S6
12 1 10 15 9 2 6 8 0 13 3 4 14 7 5 11
10 15 4 2 7 12 9 5 6 1 13 14 0 11 3 8
9 14 15 5 2 8 12 3 7 0 4 10 1 13 11 6
4 3 2 12 9 5 15 10 11 14 1 7 6 0 8 13
4 PRELEGEREA 4. SISTEMUL DE CRIPTARE DES

S7
4 11 2 14 15 0 8 13 3 12 9 7 5 10 6 1
13 0 11 7 4 9 1 10 14 3 5 12 2 15 8 6
1 4 11 13 12 3 7 14 10 15 6 8 0 5 9 2
6 11 13 8 1 4 10 7 9 5 0 15 14 2 3 12
S8
13 2 8 4 6 15 11 1 10 9 3 14 5 0 12 7
1 15 13 8 10 3 7 4 12 5 6 11 0 14 9 2
7 11 4 1 9 12 14 2 0 6 10 13 15 3 5 8
2 1 14 7 4 10 8 13 15 12 9 0 3 5 6 11

• Permutarea fixată P este:

16 7 20 21
29 12 28 17
1 15 23 26
5 18 31 10
2 8 24 14
32 27 3 9
19 13 30 6
22 11 4 25

Mai rămâne de prezentat procesul de diversificare al cheii K. De fapt, K este o secvenţă


de 64 biţi, din care 56 definesc cheia, iar 8 (cei de pe poziţiile 8, 16, 24, . . . , 64) sunt biţi
de paritate, aranjaţi ı̂n aşa fel ı̂ncât fiecare octet să conţină un număr impar de 1. Aceşti
8 biţi sunt ignoraţi ı̂n procesul de diversificare.
1. Din cheie se elimină biţii de paritate, iar asupra celorlalţi se aplică o permutare
P C1 , obţinându-se P C1 (K) = C0 D0 (C0 sunt primii 28 biţi din secvenţă, iar D0 –
ceilalţi 28 biţi). Permutarea P C1 este

57 49 41 33 25 17 9
1 58 50 42 34 26 18
10 2 59 51 43 35 27
19 11 3 60 52 44 36
63 55 47 39 31 23 15
7 62 54 46 38 30 22
14 6 61 53 45 37 29
21 13 5 28 20 12 4

2. Pentru i = 1, 2, . . . , 16 se calculează

Ci = LSi (Ci−1 )
Di = LSi (Di−1 )
4.3. CONTROVERSE LEGATE DE DES 5

şi Ki = P C2 (Ci Di ). LSi este o rotaţie circulară la stânga cu una sau două poziţii,
ı̂n funcţie de valoarea lui i: o poziţie dacă i = 1, 2, 9, 16, altfel rotirea este de două
poziţii. Permutarea P C2 este:
14 17 11 24 1 5
3 28 15 6 21 10
23 19 12 4 26 8
16 7 27 20 13 2
41 52 31 37 47 55
30 40 51 45 33 48
44 49 39 56 34 53
46 42 50 36 29 32
Decriptarea se realizează plecând de la textul criptat β şi utilizând acelaşi algoritm, ı̂n
ordine inversă; se vot folosi ı̂n ordine cheile K16 , . . . , K1 .

4.3 Controverse legate de DES


Încă de la lansarea sa, DES a fost supus la numeroase critici. O primă obiecţie a fost
folosirea cutiilor S. Toate calculele din DES sunt liniare, cu excepţia cutiilor. Deci, de
fapt toată securitatea sistemului se bazează pe acestea. Dar, nimeni (cu excepţia autorilor)
nu ştie cum sunt concepute cutiile. Multe persoane sunt convinse că ele ascund diverse
trape secrete care permit celor de la Agenţia naţională de securitate (N SA - serviciul
american care răspunde de chestiunile legate de criptografie) să decripteze orice mesaj.
Ca urmare, N SA afirmă ı̂n 1976 că S - cutiile au fost construite pe baza următoarelor
criterii:
1. Fiecare linie este o permutare a numerelor 0, . . . , 15;
2. Nici o cutie nu este o funcţie liniară sau afină;
3. După modificarea unui bit din operand, o S - cutie provoacă modificarea cel puţin
a doi biţi din rezultat;
4. Pentru fiecare cutie S şi α (secvenţă de lungime 6), S(α) şi S(α ⊕ 001100) diferă
prin cel puţin doi biţi.
Alte două proprietăţi au fost menţionate ca fiind ”consecinţe ale criteriilor de construcţie”:
5. Pentru orice cutie S şi orice α, S(α) 6= S(α ⊕ 11ab00), oricare ar fi a, b ∈ {0, 1};
6. Pentru orice cutie S, dacă un bit din operand este menţinut constant şi se urmărşte
un bit al rezultatului, numărul de valori care produc 0 este ”apropiat” de numărul
de valori care produc 1. Într-adevăr, dacă bitul fixat este unul din cei doi biţi care
determină linia cutiei S, există – conform criteriului 1. – 16 valori care produc 0 şi
16 valori care produc 1; pentru ceilalţi biţi, aceasta nu este adevărat, dar numărul
de valori care produc 0 (sau 1) este cuprins totdeauna ı̂ntre 13 şi 19.
6 PRELEGEREA 4. SISTEMUL DE CRIPTARE DES

Nici un alt criteriu referitor la S - cutii nu a mai fost recunoscut public.


Cea mai pertinentă critică referitoare la DES se referă la mărimea prea mică (numai
56
2 ) a spaţiului cheilor. Ca urmare s-au conceput numeroase maşini dedicate atacurilor
cu text clar cunoscut, care să caute cheia. fiind dat un text clar α de 64 biţi şi textul său
criptat β, se verifică toate cheile posibile K până se obţine eK (α) = β (de remarcat că
soluţia există totdeauna, dar nu este unică).

4.4 Moduri de utilizare ale DES -ului


În istoria sa, sistemul de criptare DES a cunoscut patru moduri de utilizare: electronic
codebook mode (ECB), cipher feedback mode (CF B), cipher block chaining mode (CBC)
şi output feedback mode (OF B).
Modul ECB corespunde metodei descrise anterior: fiind dat un text clar α1 , α2 , . . .,
fiecare bloc αi de 64 biţi este criptat cu cheia K, procedeul conducând la textul criptat
β1 , β2 , . . ..
În modul CBC, fiecare bloc de text criptat βi acţionează sub forma unui XOR (⊕) cu
textul clar următor αi+1 , ı̂nainte de criptarea acestuia. Operaţia decurge conform schemei
următoare:

α1 α2 Decriptare β1 - β2 -
? ? -...
V I = β0 - +j - +j ? ?
6 6 dk dK
? ?
eK eK ? ?
- ...
- +j ?- +j ?
V I = β0
? ? ? ?
Criptare β1 - β2 - α1 α2

Se defineşte un bloc cu valoarea iniţială V I = β0 , după care blocurile se criptează


după formula βi = eK (βi−1 ⊕ αi ), i ≥ 1.
În modurile OF B şi CF B se generează o secvenţă de chei care se vor combina cu
textul clar. OF B este o criptare ı̂n lanţ sincron: secvenţa de chei este obţinută prin
criptarea iterativă a unui bloc iniţial V I de 64 biţi; se defineşte γ0 = V I şi se calculează
cheile γ1 , γ2 , . . . cu formula γi = eK (γi−1 ), i ≥ 1. Secvenţa textelor clare α1 , α2 , . . . este
criptată apoi prin formula βi = αi ⊕ γi , i ≥ 1.
În modul CF B se ı̂ncepe cu β0 = V I (un bloc iniţial de 64 biţi) şi se calculează cheia
γi criptând din nou blocul de text criptat obţinut anterior: γi = eK (βi−1 ), i ≥ 1. ca şi la
modul OF B, avem βi = αi ⊕ γi , i ≥ 1. De remarcat că funcţia de criptare eK este folosită
aici atât la procesul de criptare cât şi la cel de decriptare. Modul CF B este ilustrat de
figura de pe pagina următoare.
Deşi metoda prezentată a fost descrisă pentru blocuri de mătime 64, modurile OF B
şi CF B pot fi utilizate ı̂n general pentru blocuri de k biţi (1 ≤ k ≤ 64).
4.5. COMPROMISUL SPAŢIU - TIMP AL UNUI ATAC 7

α1 α2 β1 β2
?
²¯ ?
²¯ ?
²¯ ?
²¯
V I = β0 - ek - ±° + -. . .
+ - ek -±° V I = β0 - ek - ±° + -. . .
+ - ek -±°
6 6 6 6
? ? ? ?
Criptare β1 - β2 - Decriptare α1 - α2 -

Cele patru moduri de utilizare prezintă deiverse avantaje şi dezavantaje. Astfel, la
ECB şi OF B, modificarea unui bloc de text clar αi provoacă modificarea unui singur
bloc de text criptat, βi . În anumite situaţii, acest fapt constituie un defect. Modul OF B
este utilizat adesea pentru transmisiile prin satelit.
În modurile CBC şi CF B dimpotrivă, modificarea unui bloc αi de text clar antrenează
modificări ı̂n toate blocurile de texte criptate, ı̂ncepând cu βi . De aceea, aceste moduri
sunt adaptate ı̂n particular problemelor de autentificare a mesajelor (M AC - Message
Authentication Code). Un M AC este adăugat la un text clar cu scopul de a-l convinge
pe Bob că textul primit a fost scris de Alice şi nu a fost alterat de Oscar. El garantează
astfel integritatea (sau autenticitatea) mesajului, dar nu şi confidenţialitatea.
Să descriem cum este utilizat modul CBC la construcţia unui M AC. Se pleacă de la
blocul iniţial V I ı̂n care toţi biţii sunt 0. Se construieşte textul criptat β1 , β2 , . . . , βn
cu cheia K, ı̂n modul CBC, iar M AC etse blocul βn . Alice va transmite mesajul
α1 , α2 , . . . , αn , asociat cu M AC-ul βn . Când Bob primeşte mesajul α1 , α2 , . . . , αn , el
generează β1 , . . . , βn folosind cheia (secretă) K şi verifică dacă βn este identic cu mesajul
M AC primit.
De remarcat că Oscar nu poate construi un M AC deoarece nu cunoaşte cheia K
utilizată de Alice şi Bob; orice modificare a mesjelor clare este depistată astfel uşor.
Se poate realiza şi o combinare a integrităţii cu confidenţialitatea, ı̂n felul următor:
Alice utilizează cheia K1 pentru a calcula un M AC bazat pe α1 , . . . , αn ; fie αn+1 acest
M AC. Apoi, ea criptează mesajul α1 , . . . , αn+1 ı̂n β1 , . . . , βn+1 folosind o a doua cheie
K2 . Când Bob primeşte mesajul, el decriptază ı̂n prima fază (cu cheia K2 ), apoi verifică
cu cheia K1 dacă αn+1 este M AC-ul lui α1 , . . . , αn .
Sau – ca altă variantă – Alice poate utiliza K1 pentru criptarea mesajului α1 , . . . , αn ;
apoi, pentru β1 , . . . , βn determină M AC-ul βn+1 foloisnd cheia K2 . Bob va face ı̂ntâi ver-
ificarea corectitudinii dată de M AC şi – dacă totul este ı̂n ordine – va trece la decriptare.

4.5 Compromisul spaţiu - timp al unui atac


Vom studia aici un compromis ı̂ntre spaţiu şi timp ı̂ntr-un atac cu text clar ales. Aici
Oscar va dispune de o pereche α, β cu β = eK (α), şi caută să determine cheia K.
Nu vom folosi aici nici o structură particulară de DES; ştim numai că textele clare şi
cele criptate sunt de lungime 64, iar cheia are lungimea 56.
O căutare exhaustivă constă ı̂n a ı̂ncerca toate cele 256 chei posibile. Această operaţie
nu necesită memorie, dar sunt necesare ı̂n medie 255 chei pentru a o găsi pe cea bună. Sau,
8 PRELEGEREA 4. SISTEMUL DE CRIPTARE DES

fiind dat un text clar α, Oscar poate forma anterior un tabel cu 256 perechi βk , K), astfel
ca yK = eK (x), trierea urmând a fi făcută după yK . Când Oscar obţine textul criptat
β din textul clar α, el va căuta ı̂n tabelă şi va afla imediat cheia K. Astfel, aflarea cheii
va necesita un timp de calcul neglijabil, dar un spaţiu de memorie gigantic şi un timp de
precalcul important. Această variantă nu aduce nici un avantaj din punct de vedere al
timpului total, pentru aflarea unei singure chei. Avantajul apare atunci când este necesară
cautarea mai multor chei, deoarece atunci tabela precalculată a fost construită o singură
dată.
Compromisul spaţiu - timp permite obţinerea unui timp de calcul (precalculul nu se
include) inferior celui unei căutări exhaustive, cu un spaţiu de memorie inferior celui
necesar reţinerii tuturor cheilor. Algoritmul foloseşte o funcţie de reducere R, care reduce
o secvenţă de 64 biţi la una de 56 biţi (de exemplu, R poate şterge pur şi simplu 8 biţi
din secvenţa iniţială).
Fie α un text clar de 64 biţi; se defineşte g(K0 ) = R(eK0 (α)) pentru orice secvenţă K0
de 56 bit i (rezultatul g(K0 ) este de asemenea de lungime 56).
Algoritmul mai foloseşte doi parametri ı̂ntregi pozitivi m, t. În faza de precalcul, Oscar
defineşte m secvenţe arbitrare de 56 biţi fiecare, notate X(i, 0), 1 ≤ i ≤ m. Apoi, folosind
relat ia de recurenţă

X(i, j) = g(X(i, j − 1)), 1 ≤ i ≤ m, 1 ≤ j ≤ m

Oscar determină valorile X(i, j), 1 ≤ j ≤ t, formând cu ele o matrice Xm×t . Din aceste
valori, Oscar păstrează ı̂ntr-o tabelă T numai 2m perechi (X(i, t), X(i, 0)) (deci sunt
memorate numai prima şi ultima coloană a matricii X).
În momentul atacului, Oscar obţine textul criptat β al textului clar α ales. El va
căuta cheia K ı̂n cele t coloane ale matricii X, consultând tabloul T . Să presupunem
K = X(i, t − j) pentru un j (1 ≤ j ≤ t) dat (K este ı̂n una din cele t coloane ale lui X).
Vom avea g j (K) = X(i, t), şi
g j (K) = g j−1 (g(K)) = g j−1 (R(eK (α))) = g j−1 (R(β)).
Să calculăm şirul βj (1 ≤ j ≤ t) definit de relaţia de recurenţă

(
R(β) dacă j = 1
βj =
g(βj−1 ) dacă 2 ≤ j ≤ t

Dacă K = X(i, t − j), vom avea βj = X(i, t). De remarcat că reciproca nu este adevărată:
nu este suficient ca βj = X(i, t) pentru a avea K = X(i, t−j), deoarece funcţia de reducere
R nu este injectivă (R reduce un spaţiu de 264 ı̂n unul de 256 valori, deci fiecare valoare
provine ı̂n general din 28 = 256 valori). Trebuie deci verificat că β = eX(i,t−j) (α) pentru
a decide că X(i, t − j) este ı̂ntr-adevăr cheia. valoarea X(i, t − j) nu este disponibilă ı̂n
memorie, dar ea se poate recalcula ı̂n t − j paşi, plecând de la X(i, 0).
Oscar va folosi deci următorul algoritm:
4.6. CRIPTANALIZA DIFERENŢIALĂ 9

1. β1 ← R(β)
2. for j := 1 to t do
2.1. if ∃ i cu βj = X(i, t) then
2.2.1. calculează X(i, t − j) = g t−j (X(i, 0))
2.2.2. if β = eX(i,t−j) (α) then K ← X(i, t − j), ST OP
2.2. βj+1 ← g(βj )

Analizând probabilitatea de succes a algoritmului, se poate arăta că dacă mt2 ≈ N =


256 , atunci probabilitatea ca să avem cheia K ı̂n cele t coloane ale matricii X este de circa
0, 8mt/N . Coeficientul 0, 8 provine din faptul că valorile X(i, t) pot să nu fie distincte. O
sugestie este de a alege m ≈ t ≈ N 1/3 şi de a construi N 1/3 tabele, fiecare cu altă funcţie
de reducere R. Astfel, spaţiul de memorie necesar este de 112 · N 2/3 biţi (trebuie păstraţi
2N 2/3 valori de 56 biţi). Timpul de precalcul este liniar O(N ).
Timpul de calcul al atacului este mai dificil de evaluat. De remarcat că pasul 2.1
poate fi implementat ı̂n cel mai rău caz ı̂ntr-un timp O(log m), utilizând arbori binari de
căutare. Dacă acest pas eşuează (deci nu se găseşte nici o valoare), timpul de calcul este
O(N 2/3 ). Ceilalţi paşi care urmează cresc acest timp doar cu un factor constant.

4.6 Criptanaliza diferenţială


Unul din atacurile cele mai cunoscute ale DES-ului este criptanaliza diferenţială, intro-
dusă de Biham şi Shamir. Este un atac cu text clar cunoscut. Cu toate că nu dă o
modalitate practică de spargere a funcţiei DES ı̂n 16 tururi, ea furnizează atacuri eficace
pentru variantele de DES cu un număr de tururi redus. De exemplu, un DES cu 8 tururi
poate fi spart ı̂n câteva minute cu un P C obişnuit.
Într-un astfel de atac se ignoră permutarea iniţială IP şi inversa sa (ele nu joacă nici
un rol ı̂n criptanaliză). Ne vom mărgini la un DES restrâns pe n (n ≤ 16) tururi. Deci
textul clar este L0 R0 şi Ln Rn textul criptat (vom ignora de asemenea inversarea finală
dintre Ln şi Rn ).
Criptanaliza diferenţială consideră două texte clare L0 R0 , L∗0 R0∗ şi textele criptate
corespunzătoare Ln Rn respectiv Ln Rn . Ea va efectua studii asupra mesajelor L00 R00 =
L0 R0 ⊕ L∗0 R0∗ şi L0n Rn0 = Ln Rn ⊕ L∗n Rn∗ .

Definiţia 4.1 Fie Sj (1 ≤ j ≤ 8) o cutie din sistemul DES. Pentru orice pereche
(Bj , Bj∗ ) de şiruri de 6 biţi, vom defini XOR-ul de intrare pentru Sj prin Bj0 = Bj ⊕ Bj∗ ,
iar XOR-ul de ieşire prin Sj (Bj ) ⊕ Sj (Bj∗ ).

De remarcat că un XOR de intrare este o secvenţă de 6 biţi, iar un XOR de ieşire este
o secvenţă de 4 biţi.

Definiţia 4.2 Pentru orice Bj0 ∈ Z26 se notează ∆(Bj0 ) mulţimea perechilor (Bj , Bj∗ ) care
prin XOR dau Bj0 .
10 PRELEGEREA 4. SISTEMUL DE CRIPTARE DES

Observaţii:

• O mulţime ∆(Bj0 ) conţine 26 = 64 elemente;

• ∆(Bj0 ) = {(Bj , Bj ⊕ Bj0 )| Bj ∈ Z26 }

Pentru fiecare pereche din ∆(Bj0 ) vom calcula XOR-ul de ieşire al lui Sj şi construim
o tabelă de distribuţii ale valorilor obţinute (sunt 64 ieşiri pe un spaţiu de 24 = 16 valori
posibile). Pe această tabelă se va baza atacul diferenţial de criptanaliză.

Exemplul 4.1 Să considerăm prima S - cutie S1 şi XOR-ul de intrare 110100. Vom
avea:

∆(110100) = {(000000, 110100), (000001, 110101), . . . , (111111, 001011)}.

Pentru fiecare pereche din ∆(110100) vom calcula XOR-ul de ieşire al lui S1 . De exemplu,
S1 (000000) = E16 = 1110, S1 (110100) = 916 = 1001 deci XOR-ul de ieşire S1 al perechii
(000000, 110100) este 0111.
Efectuând acest calcul pentru toate cele 64 perechi din ∆(110100), vom obţine distribu-
ţia următoare a XOR-urilor de ieşire pentru S1 :
0000 0001 0010 0011 0100 0101 0110 0111
0 8 16 6 2 0 0 12

1000 1001 1010 1011 1100 1101 1110 1111


6 0 0 0 0 8 0 6

În Exemplul 4.1 au apărut numai 8 din cele 16 valori de ieşire posibile. În general, dacă
se fixează o S-cutie Sj şi un XOR de intrare diferit de 000000, se constată că vor apare
numai 75 − 80 % din valorile posibile de ieşire.

Definiţia 4.3 Pentru 1 ≤ j ≤ 8 şi secvenţele Bj0 , Cj0 de 6 respectiv 4 biţi, definim
INj (Bj0 , Cj0 ) = {Bj ∈ Z26 | Sj (Bj ) ⊕ Sj (Bj ⊕ Bj0 ) = Cj0 }
Nj (Bj0 , Cj0 ) = card(INj (Bj0 , Cj0 )).

Distribuţia dată ı̂n Exemplul 4.1 dă valorile N1 (110100, C10 ), C10 ∈ Z24 . Toate aceste valori
se găsesc ı̂n Tabelul următor:
4.6. CRIPTANALIZA DIFERENŢIALĂ 11

XOR de ieşire intrări posibile


0000
0001 000011, 001111, 011110, 011111, 101010, 101011, 110111, 111011
0010 000100, 000101, 001110, 010001, 010010, 010100, 011010, 011011
100000, 100101, 010110, 101110, 101111, 110000, 110001, 111010
0011 000001, 000010, 010101, 100001, 110101, 110110
0100 010011, 100111
0101
0110
0111 000000, 001000, 001101, 010111, 011000, 011101, 100011, 101001
101100, 110100, 111001, 111100
1000 001001, 001100, 011001, 101101, 111000, 111101
1001
1010
1011
1100
1101 000110, 010000, 010110, 011100, 100010, 100100, 101000, 110010
1110
1111 000111, 001010, 001011, 110011, 111110, 111111

Pentru fiecare din cele 8 S-cutii există 64 XOR-uri de intrare posibile; deci ı̂n total vor fi
512 date de distribuit, lucru uşor de realizat cu un calculator.
Reamintim că intrarea ı̂ntr-o S-cutie la turul i este B = E ⊕J, unde E = E(Ri−1 ) este
rezultatul expandării lui Ri−1 , iar J = Ki este un subşir reordonat al cheii K. XOR-ul
de intrare (al celor 8 cutii) este deci

B ⊕ B ∗ = (E ⊕ J) ⊕ (E ∗ ⊕ J) = E ⊕ E ∗ .

De remarcat că XOR-urile de intrare nu depind de sub-cheia J, pe când XOR-urile de


ieşire depind.
Să detaliem pe grupuri de câte 6 biţi, cuvintele cu care se lucrează;

B = B1 B2 B3 B4 B5 B6 B 7 B8 , E = E1 E2 E3 E4 E5 E6 E7 E8 , J = J1 J2 J3 J4 J5 J6 J7 J8

În mod similar se scriu B ∗ şi E ∗ . Să presupunem acum că se ştiu valorile Ej şi Ej∗ pentru
un j (1 ≤ j ≤ 8) dat, precum şi valoarea XOR de ieşire Cj0 = Sj (Bj ) ⊕ Sj (Bj∗ ) a lui Sj .
Vom avea
Ej ⊕ Jj ∈ INj (Ej0 , Cj0 )
unde Ej0 = Ej ⊕ Ej∗ .
Să presupunem că se defineşte mulţimea testj astfel:

testj (Ej , Ej∗ , Cj0 ) = {Bj ⊕ Ej | Bj ∈ INj (Ej0 , Cj0 )}

(s-au luat toate XOR-urile lui Ej cu elemente din INj (Ej0 , Cj0 )). Din aceste consideraţii
rezultă imediat teorema:
12 PRELEGEREA 4. SISTEMUL DE CRIPTARE DES

Teorema 4.1 Dacă Ej , Ej∗ sunt subsecvenţe construite pentru intrarea ı̂n S-cutia Sj , iar
Cj0 este XOR-ul de ieşire al lui Sj , atunci biţii cheii Jj apar ı̂n mulţimea testj (Ej , Ej∗ , Cj0 ).
Cum se poate remarca, există exact Nj (Ej0 , Cj0 ) secvenţe de 6 biţi ı̂n testj (Ej , Ej∗ , Cj0 );
valoarea corectă Jj este una din acestea.
Exemplul 4.2 Să considerăm E1 = 000001, E1∗ = 110101, C10 = 1101. Deoarece
N1 (110100, 1101) = {000110, 010000, 010110, 011100, 100010, 101000, 110010}, are 8 el-
emente, există 8 secvenţe posibile pentru J1 , cumulate ı̂n test1 (000001, 110101, 1101) =
{000111, 010001, 010111, 011101, 100011, 100101, 101001, 110011}.
Dacă se ia un alt triplet (E1 , E1∗ , C10 ), vom obţine alt test1 cu valori pentru J1 , deci
valoarea corectă se va găsi ı̂n intersecţia lor.

4.6.1 Atac pe trei tururi


Să vedem cum se aplică aceste idei pentru un DES construit pe 3 tururi. Vom ı̂ncepe cu
o pereche de texte clare L0 R0 şi L∗0 R0∗ , criptate ı̂n L3 R3 respectiv L∗3 R3∗ . Vom avea
R3 = L2 ⊕ f (R2 , K3 ) = R1 ⊕ f (R2 , K3 ) = L0 ⊕ f (R0 , K1 ) ⊕ f (R2 , K3 ).
Construcţia pentru R3∗ este similară. Deci
R30 = L00 ⊕ f (R0 , K1 ) ⊕ f (R0∗ , K1 ) ⊕ f (R2 , K3 ) ⊕ f (R2∗ , K3 ).
Să presupunem că s-a ales R0 = R0∗ , deci R00 = 00 . . . 0. Atunci f (R0 , K1 ) = f (R0∗ , K1 )
şi deci R30 = L00 ⊕ f (R2 , K3 ) ⊕ f (R2∗ , K3 ).
R30 se poate calcula pe baza textelor criptate, iar L00 – pe baza textelor clare; deci se
poate determina f (R2 , K3 ) ⊕ f (R2∗ , K3 ) = R30 ⊕ L00 .
Avem f (R2 , K3 ) = P (C), f (R2∗ , K3 ) = P (C ∗ ) unde C respectiv C ∗ sunt ieşirile core-
spunzătoare din cele 8 S-cutii (reamintim, P este o permutare fixată din descrierea sis-
temului DES). Deci P (C) ⊕ P (C ∗ ) = R30 ⊕ L0 , de unde
C 0 = C ⊕ C ∗ = P −1 (R30 ⊕ L00 )
Acesta este XOR-ul de ieşire din cele opt S-cutii după al treilea tur.
R2 = L3 şi R2∗ = L∗3 sunt cunoscute (componente ale textelor criptate); deci se poate
calcula
E = E(L3 ), E ∗ = E(L∗3 )
folosind funcţia de expansiune E. Aceste valori sunt intrările ı̂n S-cutii la al treilea tur. Se
cunosc deci E, E ∗ , C 0 la al treilea tur şi se poate trece – aşa cum am văzut – la construcţia
mulţimilor test1 , test2 , . . . , test8 de valori posibile pentru J1 , J2 , . . . , J8 .
Un algoritm pentru această metodă este formalizat mai jos. Atacul foloseşte mai multe
triplete E, E ∗ , C 0 . Se utilizează opt tabele de valori şi se determină astfel cei 48 biţi ai
cheii K3 de la al treilea tur. Cheia de 56 biţi se calculează apoi printr-o căutare exhaustivă
a celor 28 = 256 posibilităţi a celor 8 biţi necunoscuţi.
Intrare: L0 R0 , L∗0 R0∗ , L3 R3 , L∗3 R3∗ cu R0 = R0∗ .
1. C 0 ← P −1 (R30 ⊕ L00 )
2. E ← E(L3 ), E ∗ ← E(L∗3 )
3. for j := 1 to 8 do testj (Ej , Ej∗ , Cj ).
4.6. CRIPTANALIZA DIFERENŢIALĂ 13

4.6.2 Atacul pe şase tururi


Să extindem ideile precedente ı̂n cazul unui atac probabilist asupra unui sistem de criptare
DES de 6 tururi. Ideea este de a alege o pereche de texte clare cu un XOR bine ales şi de
studia comportamentul rpobabilist al evoluţiei acestui XOR de-alungul ı̂ntregii operaţie
de criptare. Pentru aceasta este necesar să introucem o nouă noţiune.

Definiţia 4.4 Fie n ≥ 1 un număr ı̂ntreg. O ”caracteristică” de n tururi este un şir de


forma
L00 , R00 , L01 , R10 , p1 , . . . , L0n , Rn0 , pn
care verifică condiţiile:

1. L0i = Ri−1
0
pentru 1 ≤ i ≤ n;

2. Pentru 1 ≤ i ≤ n se aleg Li−1 Ri−1 şi L∗i−1 Ri−1 ∗


astfel ca Li−1 ⊕ L∗i−1 = L0i−1 şi
∗ 0
Ri−1 ⊕Ri−1 = Ri−1 ; dacă Li Ri şi L∗i Ri∗ sunt calculate la al i-lea tur DES cunoscând
Li−1 Ri−1 , probabilitatea de a obţine relaţiile Li ⊕ L∗i = L0i , Ri ⊕ Ri∗ = Ri0 este pi
0 0

(probabilitatea se ı̂ntinde pentru toate cheile posibile J1 , J2 , . . . , J8 ).

Probabilitatea caracteristicii este produsul p = p1 · p2 · . . . · pn .

Observaţii:

• Dacă L0 R0 şi L∗0 R0∗ sunt alese astfel ca L0 ⊕ L∗0 = L00 , R0 ⊕ R0∗ = R00 , nu se
poate afirma că probabilitatea ca pentru orice i = 1, 2, . . . , n să avem Li ⊕ L∗i =
L0i , Ri ⊕Ri∗ = Ri0 este p1 ·p2 ·. . .·pn . Într-adevăr, procesul de diversificare a cheilor nu
generează distribuţia independentă a sub-cheilor K1 , . . . , Kn . Totuşi, probabilitatea
p1 · p2 · . . . · pn furnizează o estimare destul de precisă a probabilităţii reale.

• Probabilităţile pi sunt inserate ı̂n caracteristica pentru o pereche de texte clare oare-
care, având un XOR dat, pentru o distibuţie de 48 biţi ai sub-cheii. Criptanalistul
caută o cheie fixată necunoscută. De aceea el va utiliza texte clare aleatoare (cu
XOR-ul cerut), sperând ca distribuţia obţinută de XOR-urile de la al n-lea tur să
coincidă cu cea descrisă de o cheie aleatoare, deci cu p1 , p2 , . . . , pn .

Exemplul 4.3 O caracteristică pe un tur – care forma baza atacului pe 3 tururi – este
(ı̂n notaţie hexazecimală):

L00 = oarecare R00 = 0000000016


L01 = 0000000016 R10 = L00 p=1

O altă caracteristică poate fi de exemplu:

L00 = 0000000016 R00 = 6000000016


L01 = 6000000016 R10 = 0080820016 p = 16/64
14 PRELEGEREA 4. SISTEMUL DE CRIPTARE DES

Într-adevăr, ı̂n calculul lui f (R0 , K1 ) şi f (R0∗ , K1 ), funcţia de expansiune operează ı̂ntâi
asupra lui R0 şi R0∗ ; XOR-ul rezultatelor este 001100 . . . 0. Deci XOR-ul de intrare al lui
S1 este 001100, iar pentru celelalte S - cutii este 000000. La ieşire XOR - ul este 0000
la aceste cutii şi 1110 pentru S1 ; deoarece N( 001100, 1110) = 14 (se poate verifica), vom
avea probabilitatea 14/64.
Se obţine deci C 0 = 11100000000000000000000000000000 cu probabilitate 14/64.
Aplicând P , vom avea
P (C) ⊕ P (C ∗ ) = 00000000 10000000 10000010 00000000,
ceea ce dă 00808200 ı̂n hexazecimal. După calculul XOR-ului cu L00 se obţine valoarea lui
R10 cu probabilitate 14/64. Vom avea bineı̂nţeles L01 = R00 .

Atacul asupra DES-ului ı̂n 6 tururi este bazat pe caracteristica celui pe 3 tururi ı̂n modul
următor:
L00 = 4008000016 R00 = 0400000016
L01 = 0400000016 R10 = 0000000016 p = 1/4
L02 = 0000000016 R20 = 0400000016 p=1
L03 = 0400000016 R30 = 4008000016 p = 1/4

Se ı̂ncepe cu o pereche de texte clare (L0 R0 , L∗0 R0∗ ) cu proprietatea L00 = 4008000016 , R00 =
0400000016 şi cu perechea de texte criptate corespunzătoare (L6 R6 , L∗6 R6∗ ). Vom avea
R6 = L5 ⊕ f (R5 , K6 ) = R4 ⊕ f (R5 , K6 ) = L3 ⊕ f (R3 , K4 ) ⊕ f (R5 , K6 ).
În mod similar se exprimă R6∗ . Atunci
R60 = L03 ⊕ f (R3 , K4 ) ⊕ f (R3∗ , K4 ) ⊕ f (R5 , K6 ) ⊕ f (R5∗ , K6 ) (∗)
0 0 0
R6 este cunoscut. După caracteristică, avem L3 = 0400000016 şi R3 = 4008000016 cu
probabilitate 1/16. Dacă s-a obţinut ı̂ntr-adevăr aşa, se poate calcula XOR - ul de intrare
al S - cutiilor la al patrulea tur, după expansiune:
00100000 00000000 01010000 0000.
XOR - urile de intrare pentru S2 , S5 , S6 , S7 , S8 sunt deci 000000, de unde rezultă că
XOR - ul de ieşire este ı̂n toate aceste cazuri 0000. Rezultă că se poate calcula XOR -
ul de ieşire al acestor cinci S - cutii la al şaselea tur, pe baza relaţiei (∗). Deci se poate
calcula
C10 C20 C30 C40 C50 C60 C70 C80 = P −1 (R60 ⊕ 0400000016 )
unde fiecare Ci0 are lungimea 4. C20 , C50 , C60 , C70 şi C80 sunt respectiv XOR - urile de
ieşire ale cutiilor S2 , S5 , S6 , S7 , S8 cu probabilitate 1/16. Intrările E2 , E5 , E6 , E7 , E8 şi
E2∗ , E5∗ , E6∗ , E7∗ , E8∗ ı̂n aceste cutii se pot calcula cu relaţiile
E1 E2 E3 E4 E5 E6 E7 E8 = E(R5 ) = E(L6 )
E1∗ E2∗ E3∗ E4∗ E5∗ E6∗ E7∗ E8∗ = E(R5∗ ) = E(L∗6 )
plecând de la textele criptate, conform algoritmului:

Intrare: L0 R0 , L∗0 R0∗ , L6 R6 , L∗6 R6∗ cu L00 = 4008000016 , R00 = 0400000016 .


1. C 0 ← P −1 (R60 ⊕ 4008000016 )
2. E ← E(L6 ), E ∗ ← E(L∗6 )
3. for j = 2, 5, 6, 7, 8 do testj (Ej , Ej∗ , Cj0 )
4.6. CRIPTANALIZA DIFERENŢIALĂ 15

Ar fi ideal de determinat cei 30 biţi din J2 , J5 , J6 , J7 , J8 ca la atacul asupra DES -


ului ı̂n 3 tururi. Problema este că aici valorile XOR - ului de ieşire la al 6 - lea tur sunt
adevărate cu probabilitate 1/16. Deci ı̂n circa 15/16 din cazuri se obţin valori aleatoare
fără interes pentru criptanaliză, valori are trebuiesc eliminate. Ce este interesant este
faptul că acest lucru este deseori posibil.

Definiţia 4.5 Fie L0 ⊕ E0∗ = E00 , R0 ⊕ R0∗ = R00 . Spunem că perechea de texte clare
(L0 R0 , L∗0 R0∗ ) este o ”pereche bună” pentru carcateristica dată, dacă pentru orice i (1 ≤
i ≤ n) avem Li ⊕ L∗i = L0i , Ri ⊕ Ri∗ = Ri0 . Altfel, avem o ”perechea rea”.

Strategiile de calcul pentru Ej , Ej∗ , Cj0 şi testj pentru j = 2, 5, 6, 7, 8 a fost descrisă anterior.
Dacă avem o pereche bună, valoarea ei apare ı̂n testj . Pentru o pereche rea, valoarea lui
Cj0 este incorectă şi se poate presupune că toate testj au un conţinut aleator.
O pereche rea se poate recunoaşte astfel: dacă pentru un j avem card(testj ) = 0,
perechea este sigur rea. Fiind dată o pereche rea, probabilitatea de a avea card(testj ) = 0
pentru un anumit j, este cam 1/5 (card(testj ) = Nj (Ej0 , Cj0 ) şi Nj (Ej0 , Cj0 ) = 0 ı̂ntr-o
cincime din cazuri). Probabilitatea ca cinci mulţimi testj să fie nevide este 0, 85 ≈ 0, 33,
deci probabilitatea ca cel puţin un testj să fie vid este 0, 67. Se pot elimina astfel cam 2/3
din perechile rele prin acest test simplu, numit operaţie de filtrare. Proporţia perechilor
rele care rămân după filtrare este ce circa (15/16) · (1/3) = 5/16. Rezultă că proporţia
perechilor bune rămse după filtrare este de 1/6.

Exemplul 4.4 Să presupunem că dispunem de următoarele perechi:


text clar text criptat
86F A1C2B1F 51D3BE 1E23ED7F 2F 553971
C6F 21C2B1B51D3BE 296DE2B687AC6340
Se verifică imediat că L00 = 4008000016 , R00 = 0400000016 . Intrările şi ieşirile din S -
cutii la turul 6 se determină astfel:
j Ej Ej∗ Cj0
2 111100 010010 1101
5 111101 111100 0001
6 011010 000101 0010
7 101111 010110 1100
8 111110 101100 1101

Cele cinci mulţimi testj vor fi atunci:

j testj
2 14, 15, 26, 30, 32, 33, 48, 52
5
6 7, 24, 36, 41, 54, 59
7
8 34, 35, 48, 49
16 PRELEGEREA 4. SISTEMUL DE CRIPTARE DES

Deoarece test5 = test7 = ∅, perechea este rea şi va fi eliminată prin operaţia de filtrare.

Să presupunem acum că avem o pereche cu proprietatea testj 6= ∅ pentru j = 2, 5, 6, 7, 8,


deci care va rămâne după operaţia de filtrare. Spunem că secvenţa de 30 biţi J2 J5 J6 J7 J8
este sugerată de pereche, dacă ∀ j ∈ {2, 5, 6, 7, 8}, Jj ∈ testj . Numărul de secvenţe
sugerate este Y
card(testj ).
j∈{2,5,6,7}

adesea, numărul de lanţuri sugerate este destul de mare (de ordinul miilor).
Să presupunem că se construieşte tabela tuturor secvenţelor sugerate de N perechi
rămase după filtrare. Pentru fiecare pereche bună, secvenţa corectă J2 J5 J6 J7 J8 este
sugerată; deci ea va fi sugerată de n/6 ori. O secvenţă incorectă va fi sugerată de un
număaleator de ori, deci adesea mai puţin, comparabil cu numărul lanţurilor (230 ).
Este extrem de dificil de păstrat – ca spaţiu – tabela celor 230 numere; de aceea se
va folois un algoritm care să folosească un spaţiu mai mic. Astfel, codifică fiecare testj
ı̂ntr-un vector Tj de lungime 64, ı̂n care a i - a coordonată (0 ≤ i ≤ 63) este 1 dacă
secvenţa de 6 biţi care reprezintă pe i ı̂n binar este ı̂n testj , 0 ı̂n caz contrar.
Pentru fiecare pereche rămasă numărul i (1 ≤ i ≤ N ) se construiesc vectorii Tji (j =
2, 5, 6, 7, 8). Dacă I ⊆ {1, . . . , N }, spunem că I este admisibilă, dacă pentru orice j ∈
{2, 5, 6, 7, 8} există o coordonată egală cu card(I) ı̂n vectorul
X
Tji
i∈I

Dacă perechea numărul i este bună pentru orice i ∈ I, atunci I este admisibilă. Deci,
sperăm să avem o mulţime admisibilă de mărime aproximatic N/6, ceea ce sugerează
sigur o valoare unică de 30 biţi pentru cheie. Mulţimile admisibile I pot fi generate cu un
simplu algoritm recursiv.
Prelegerea 5

Sistemul de criptare AES

5.1 Istoric
La sfârşitul anilor 0 90 se decide ı̂nlocuirea sistemului de criptare DES.
Motivele sunt multiple, dar menţionăm numai două:

• În iulie 1998 sistemul DES pe 56 biţi este spart de către organizaţia
Electronic Frontier Foundation; s-a folosit un calculator construit
special ı̂n acest scop, iar timpul necesar spargerii a fost de 3 zile.

• În septembrie acelaşi an, administraţia americană acordă compani-


ilor producătoare de soft de securitate permisiunea de a exporta
implementări ale algoritmului DES bazate pe chei de criptare de
56 biţi.

În legătură cu aceste evenimente, pe 20 august 1998 N IST anunţă


(ı̂n cadrul unei conferinţe speciale) un set de 15 algoritmi candidaţi să
ı̂nlocuiască DES. Este ales şi numele noului sistem de criptare: AES
(Advanced Encryption Standard). Cei 15 algoritmi sunt trimis de mem-
brii din comunitatea criptografică mondială.
A doua conferinţă AES are loc ı̂n martie 1999; după analiza rezul-
tatelor algoritmilor propuşi, N IST selectează 5 algoritmi: M ars (pro-
prietate a firmei IBM ), RC6 (creat ı̂n laboratoarele RSA), Rijndael
(autori Joan Daemen şi Vincent Rijman, Olanda), Serpent (proiectat
de Ross Andreson, Eli Biham şi Lars Knudsen) şi T wof ish (creat de
un colectiv condus de Bruce Schneider). Aceştia sunt supuşi testelor şi
discuţiilor publice. Criterii de evaluare au fost: securitate, cost, imple-
mentare.
În mai 2000 N IST anunţă drept sistem ”câştigător” sistemul de
criptare Rijndael, care devine oficial AES.

1
2 PRELEGEREA 5. SISTEMUL DE CRIPTARE AES

5.2 Detalii ale sistemului de criptare AES


Similar sistemului DES, şi acest sistem criptează blocuri de text clar de
lungime fixă, folosind subchei ale unei chei generate aleator. Lungimile
folosite sunt de 128, 192 sau 256 biţi.

Definiţia 5.1 Un rezultat intermediar al sistemului de criptare se nu-


meşte ”stare”.

În această secţiune vom reprezenta starea unui bloc sub forma unui tablou
cu 4 linii şi Nb coloane, ale cărui elemente sunt octeţi; deci valoarea lui
Nb se determină uşor: Nb = N/32, unde N este lungimea blocului text
care se criptează.
Similar, o cheie de criptare se va reprezenta printr-un tablou 4 × Nk ,
unde Nk = K/32 (K fiind lungimea cheii).

Exemplul 5.1 O stare cu N b = 6 şi o cheie cu Nk = 4 au forma


următoare:
a0,0 a0,1 a0,2 a0,3 a0,4 a0,5 k0,0 k0,1 k0,2 k0,3
a1,0 a1,1 a1,2 a1,3 a1,4 a1,5 k1,0 k1,1 k1,2 k1,3
a2,0 a2,1 a2,2 a2,3 a2,4 a2,5 k2,0 k2,1 k2,2 k2,3
a3,0 a3,1 a3,2 a3,3 a3,4 a3,5 k3,0 k3,1 k3,2 k3,3

Uneori, aceste blocuri se reprezintă ca un vector ı̂n care fiecare element


este coloana unei stări (deci, având o lungime de 4 octeţi). În funcţie
de mărimea N a blocului de criptare (respectiv K a cheii), un astfel de
vector are 4, 6 sau 8 componente, numite cuvinte. Octeţii unui cuvânt
se notează cu a, b, c şi respectiv d; astfel, octetul 0 este a, octetul 1 este
b ş.a.m.d.
Intrarea şi ieşirea din sistemul AES sunt definite sub forma unor
vectori având drept componente octeţi, numerotate de la 0 la 4Nb − 1.
Un vector de intrare/ieşire are deci 16, 24 sau respectiv 32 componente,
numerotate 0 . . . 15, 0 . . . 23 sau 0 . . . 31.
Similar, cheia de criptare este definită ca un vector de 16, 24 sau 32
octeţi, numerotaţi de la 0 la 4Nk − 1 (unde Nk = 128, 192 şi respectiv
256).
Octeţii care formează intrarea ı̂n sistem (textul clar, dacă se foloseşte
modul de criptare ECB) completează pe coloane un tablou ca ı̂n exem-
plu, numit starea iniţială. Similar cheia de criptare.
Procedeul este identic la sfârşit, când se obţine blocul criptat prin
liniarizarea pe coloane a sţarii finale rezultate după criptare.
Relaţiile dintre indexul n al unui element (octet) din reprezentarea
liniară şi coordonatele (i, j) ale aceluiaşi octet din reprezentarea matri-
cială sunt
5.2. DETALII ALE SISTEMULUI DE CRIPTARE AES 3

i = n (mod 4); j = bn/4c; n = i + 4 · j.


În plus, i este indicele octetului ı̂n cadrul unui cuvânt care conţine
acel octet, iar j este indicele cuvântului ı̂n cadrul blocului care ı̂l conţine.
Criptarea se realizează ı̂n Nr runde, unde Nr depinde de Nb şi Nk .
Valorile lui Nr sunt date ı̂n tabelul:

Nr Nb = 4 Nb = 6 Nb = 8
Nk = 4 10 12 14
Nk = 6 12 12 14
Nk = 8 14 14 14

Fiecare rundă are la intrare o stare şi foloseşte o cheie de rundă.


Cu excepţia rundei finale, o rundă este formată din patru transformări,
notate pe scurt:

• ByteSub(Stare);

• ShiftRow(Stare);

• MixColumn(Stare);

• AddRoundKey(Stare, Cheie).

Ultima rundă conţine numai trei transformări, fiind eliminată MixCol-


umn(Stare). Să vedem cum sunt definite aceste transformări:

• ByteSub(Stare): Este o substituţie neliniară care operează pe octeţi.


Tabela de substituţie (S - box, dacă folosim termenul consacrat din
DES) este o matrice inversabilă formată din compunerea a două
transformări:
1. Fiecare octet nenul este ı̂nlocuit cu inversul său din GF (28 );
octetul ’00’ este lăsat nemodificat.
2. Rezultatul este modificat printr-o transformare afină peste Z2 :
      
y0 1 0 0 0 1 1 1 1 x0 1
      
 y1   1 1 0 0 0 1 1 1  x1   1 
      
 y2   1 1 1 0 0 0 1 1  x2   0 
      
 y3   1 1 1 1 0 0 0 1  x3   0 
      
 =  + 

 y4 


 1 1 1 1 1 0 0 0 
 x4  
  0 

 y5   0 1 1 1 1 1 0 0  x5   1 
      
      
 y6   0 0 1 1 1 1 1 0  x6   1 
y7 0 0 0 1 1 1 1 1 x7 0
4 PRELEGEREA 5. SISTEMUL DE CRIPTARE AES

Transformarea ByteSub se aplică tuturor octeţilor stării de intrare


ı̂n rundă, rezultatul fiind o altă stare de ieşie din rundă.
Inversa transformării se obţine aplicând fiecărui octet transforma-
rea afină inversă, după care se ia inversul multiplicativ din GF (28 )
(dacă octetul nu este nul).

• ShiftRow(Stare): La acest pas, liniile stării sunt permutate ciclic


spre stânga. Numă-rul de octeţi cu care se face ciclarea sunt: 0
pentru linia 0, Ci pentru linia i (1 ≤ i ≤ 3). Valorile Ci depind de
lungimea Nb a blocului şi sunt date de tabelul

Nb C1 C2 C3
4 1 2 3
6 1 2 3
8 1 3 4

Exemplul 5.2 Aplicând transformarea ShiftRow stării din Exem-


plul ?? (unde Nb = 6), vom obţine starea

a0,0 a0,1 a0,2 a0,3 a0,4 a0,5


a1,1 a1,2 a1,3 a1,4 a1,5 a1,0
a2,2 a2,3 a2,4 a2,5 a2,0 a2,1
a3,3 a3,4 a3,5 a3,0 a3,1 a3,2

Inversa transformării ShiftRow constă ı̂n permutarea ciclică spre


stânga cu Nb − Ci octeţi pentru linia i (1 ≤ i ≤ 3); ı̂n acest fel,
fiecare octet aflat pe poziţia j ı̂n linia i se deplasează pe poziţia
j + Nb − Ci (mod Nb ).

• MixColumn(Stare): În această transformare, fiecare coloană a stării


este privită ca un polinom de gradul 3 cu coeficienţi ı̂n GF (28 ).
Fiecare astfel de polinom este ı̂nmulţit cu
c(X) =0 030 X 3 +0 010 X 2 +0 010 X +0 02
ı̂n algebra polinoamelor modulo X 4 + 1; polinomul c(X) este prim
cu X 4 + 1, deci va fi inversabil.
Această transformare poate fi reprezentată şi sub forma unei ı̂nmul-
ţiri matriciale, care transformă starea coloană cu coloană; anume:
    
b0 02 03 01 01 a0
 b1   01 02 03 01  a1 
    
 =  
 b2   01 01 02 03  a2 
b3 03 01 01 02 a3
5.3. PRELUCRAREA CHEII DE CRIPTARE 5

Operaţia inversă este similară. Fiecare coloană este transformată


prin ı̂nmulţire cu polinomul invers lui c(X) modulo X 4 + 1; acesta
este
d(X) =0 0B 0 X 3 +0 0D0 X 2 +0 090 X +0 0E 0

• AddRoundKey(Stare, Cheie): Această transformare constă ı̂n apli-


carea unui XOR ı̂ntre starea curentă şi cheia de rundă. Cheia de
rundă are lungimea Nb şi este dedusă din cheia de criptare pe baza
unui procedeu pe care ı̂l descriem mai jos.
Formal, transformarea are loc conform figurii (pentru Nb = 6):

a0,0 a0,1 a0,2 a0,3 a0,4 a0,5


a1,0 a1,1 a1,2 a1,3 a1,4 a1,5

a2,0 a2,1 a2,2 a2,3 a2,4 a2,5
a3,0 a3,1 a3,2 a3,3 a3,4 a3,5
k0,0 k0,1 k0,2 k0,3 k0,4 k0,5 b0,0 b0,1 b0,2 b0,3 b0,4 b0,5
k1,0 k1,1 k1,2 k1,3 k1,4 k1,5 b b1,1 b1,2 b1,3 b1,4 b1,5
= 1,0
k2,0 k2,1 k2,2 k2,3 k2,4 k2,5 b2,0 b2,1 b2,2 b2,3 b2,4 b2,5
k3,0 k3,1 k3,2 k3,3 k3,4 k3,5 b3,0 b3,1 b3,2 b3,3 b3,4 b3,5

unde bi,j = ai,j XOR ki,j (0 ≤ i ≤ 3, 0 ≤ j ≤ 5).


Transformarea AddRoundKey şi inversa ei sunt identice.

Algoritmul de criptare AES este format din:

1. O transformare AddRoundKey iniţială;

2. Nr − 1 runde;

3. O rundă finală.

Înainte de aplicarea acestui algoritm (sau – eventual – ı̂n paralel) se


foloseşte un algoritm de obţinere a cheilor de rundă.

5.3 Prelucrarea cheii de criptare


Toate cheile de rundă se obţin din cheia de criptare printr-o prelucrare
separată, formată din două componente: extinderea cheii şi alegerea cheii
de rundă. Principiile de bază ale prelucrării sunt:

• Numărul total al biţilor din toate cheile de rundă este Nb (Nr + 1).

• Cheia de criptare este extinsă ı̂ntr-o Cheie Expandată.


6 PRELEGEREA 5. SISTEMUL DE CRIPTARE AES

• Cheia de rundă se obţine luând primii Nb octeţi din Cheia Ex-


pandată, care nu au fost folosiţi pentru alte chei.

Extinderea cheii
Cheia expandată (notată W [Nb (Nr + 1)]) este un tablou liniar ale
cărui elemente sunt cuvinte. Primele Nk cuvinte sunt cheia de criptare;
celelalte cuvinte se obţin recursiv din cuvintele definite anterior. Funcţia
de extindere a cheii depinde de valoarea lui Nk ; există o versiune pentru
Nk ≤ 6 şi o alta pentru Nk > 6.
Pentru Nk ≤ 6 avem:
KeyExpansion(byte Key[4 ∗ Nk ] word W [Nb ∗ (Nr + 1)])
{
f or (i = 0; i < Nk ; i + +)
W [i] = (Key[4∗i], Key[4∗i+1], Key[4∗i+2], Key[4∗i+3]);
f or (i = Nk ; i < Nb ∗ (Nr + 1); i + +)
{
temp = W [i − 1];
if (i % Nk == 0)
temp = SubByte(RotByte(temp)) ˆ Rcon(i/Nk );
W [i] = W [i − Nk ] ˆ temp;
}
}
În acest algoritm (scris in C + +), SubByte(W ) este o funcţie care
ı̂ntoarce un cuvânt ı̂n care fiecare octet este rezultatul aplicării S - boxului
definit la transformarea ByteSub fiecărui octet din cuvântul de intrare.
RotByte(w) ı̂ntoarce un cuvânt ı̂n care octeţii sunt rotiţi ciclic la stânga
(pentru intrarea (a, b, c, d) ieşirea este (b, c, d, a)).
Esenţa algoritmului este următoarea: primele Nk cuvinte sunt com-
pletate cu cheia de criptare. În continuare, fiecare cuvânt W [i] este egal
cu W [i − 1] XOR W [i − Nk ]. Pentru cuvintele care sunt pe poziţii multi-
pli de Nk , ı̂nainte de această operaţie, lui W [i − 1] i se aplică o permutare
ciclică spre stânga a octeţilor, urmată de aplicarea unui S - box. În plus,
rezultatul este XOR - at ı̂ncă odată, cu o constantă de rundă.
Pentru Nk > 6, algoritmul este:
KeyExpansion(byte Key[4 ∗ Nk ] word W [Nb ∗ (Nr + 1)])
{
f or (i = 0; i < Nk ; i + +)
W [i] = (Key[4∗i], Key[4∗i+1], Key[4∗i+2], Key[4∗i+3]);
f or (i = Nk ; i < Nb ∗ (Nr + 1); i + +)
{
temp = W [i − 1];
5.4. COMENTARII RELATIVE LA IMPLEMENTARE 7

if (i % Nk == 0)
temp = SubByte(RotByte(temp)) ˆ Rcon(i/Nk );
else if (i % Nk == 4)
temp = SubByte(temp)
W [i] = W [i − Nk ] ˆ temp;
}
}
La această schemă apare condiţia suplimentară ca pentru situaţia
când i − 4 este multiplu de Nk , procedura SubByte este aplicată lui
W [i − 1] ı̂nainte de XOR.
Constantele de rundă sunt independente de Nk şi sunt definite prin
Rcon[i] = (RC[i],0 000 ,0 000 ,0 000 )
unde RC[i] = αi−1 unde α este un element generator al lui GF (28 ).

Selectarea cheii de rundă


Cheia rundei i este formată din secvenţa de cuvinte
W [Nb ∗ i] . . . W [Nb ∗ (i + 1) − 1].
Ca o remarcă, această cheie poate fi calculată treptat, pe măsură ce
se ajunge la runda respectivă.

5.4 Comentarii relative la implementare


Sistemul de criptare AES poate fi implementat eficient pe o gamă extrem
de largă de microprocesoare. Ne vom referi doar două astfel de platforme
hard, anume procesoarele pe 8 - biţi (caracteristice pentru Smart Car-
duri) şi cele pe 32 biţi (specifice P C - urilor).
Procesorul pe 8 biţi
Pe un astfel de procesor, algoritmul AES se poate implementa cos-
ntruind direct transformările componente. Acest lucru este realizabil
imediat pentru RowShif t şi AddRoundKey. Pentru ByteSub este nece-
sară utilizarea unei tabele de 256 octeţi.
ByteSub, Shif tRow şi AddRoundKey se pot combina şi executa se-
rial pentru fiecare octet al stării. Aceasta va permite şi unele optimizări
ale indicilor octeţilor.
M ixColumn necesită o ı̂nmulţire cu o matrice ı̂n corpul GF (28 ).
Aceasta se poate implementa extrem de eficient, astfel (ilustrăm metoda
numai pentru o coloană).
Fie a un octet. Vom avea:
Tmp=a[0]ˆa[1]ˆa[2]ˆa[3];
Tm=a[0]ˆa[1]; Tm=xtime(Tm); a[0]ˆ=TmˆTmp;
Capitolul 5

Criptare cu cheie publică

5.1 Consideraţii generale


În sistemele de criptare clasice, Alice şi Bob ı̂şi aleg o cheie secretă K care defineşte
regulile de criptare (eK ) şi decriptare (dK ). În aproape toate cazurile dK şi eK coincideau
sau se puteau deduce imediat una din alta. Astfel de sisteme sunt numite sisteme cu cheie
privată deoarece publicarea lui eK face sistemul extrem de vulnerabil (cazul DES - ului
este o excepţie).
Un punct slab al sistemelor cu cheie privată este acela că necesită o comunicare pre-
alabilă a cheii ı̂ntre Alice şi Bob printr-un canal sigur, ı̂nainte de transmiterea mesajului
criptat. Practic, acest lucru este tot mai dificil de realizat.
Obiectivul sistemelor de criptare cu cheie publică este acela de a face ”imposibil”
(asupra acestui termen vom reveni) de obţinut cheia dK plecând de la eK . Astfel, regula
de criptare eK poate fi publicată ı̂ntr-un registru public (de unde şi numele sistemelor).
Avantajul constă ı̂n faptul că Alice (sau oricare altă persoană) poate trimite lui Bob
un mesaj criptat cu eK fă ră a intra ı̂n prealabil ı̂n contact. Bob este singura persoană
capabilă să decripteze textul, utililând cheia sa secretă dK .
Ideea de sistem de criptare cu cheie publică apare ı̂n 1976 şi este prezentată de Diffie
şi Hellman. De atunci au apărut diverse astfel de sisteme, a căror securitate este bazată
pe probleme calculatorii. Cele mai cunoscute ı̂n acest moment sunt:
• Sistemul RSA: se bazează pe dificultatea descompunerii ı̂n factori primi a numerelor
mari (de sute de cifre). Este sistemul cel mai larg utilizat ı̂n acest moment.
• Sistemul Merkle - Hellman: primul sistem definit cu cheie publică, cunoscut şi sub
numele de problema rucsacului, problemă cunsocută ca fiind N P - completă. Fiind
spart din 1984, este adesea utilizat doar pentru exemplificări.
• Sistemul McEliece: este bazat pe teoria algebrică a codurilor, decodificarea unui cod
liniar fiind de asemenea N P - completă.
• Sistemul El Gamal: se bazează pe dificultatea calculului logaritmului discret ı̂ntr-un
corp finit.

1
2 CAPITOLUL 5. CRIPTARE CU CHEIE PUBLICĂ

• Curbe eliptice: sunt modificări ale altor sisteme, care utilizează curbe eliptice ı̂n loc
de corpuri. Considerate ca promiţătoare, ele au fost sparte de criptanalişti destul
de repede.

5.2 Funcţii neinversabile


O observaţie importantă este aceea că că un sistem cu cheie publică nu este sigur necon-
diţionat; oricine - putând să efectueze criptări, nu este exclus să găsească anumite puncte
slabe care să ı̂i permită să şi decripteze mesajele. Ideea de bază folosită este aceea de
funcţie neinversabilă. Să clarificăm puţin acest aspect.

Exemplul 5.1 Ne putem imagina uşor străzile cu sens unic dintr-un oraş. Astfel, este
uşor ca mergând pe astfel de străzi să ajungi de la A la B, dar este imposibil să ajungi de
la B la A. În acest mod, criptarea este privită ca direcţia A → B; deşi este foarte uşor de
parcurs drumul ı̂n această direcţie, nu te poţi ı̂ntoarce ı̂napoi spre A (adică să decriptezi
mesajul).

Exemplul 5.2 Să considerăm cartea de telefon a unui oraş mare; cu ajutorul ei este
foarte uşor să găsim numărul de telefon al unei anumite persoane. În schimb, este extrem
de greu - parctic imposibil - să afli persoana care are un anumit număr de telefon. Te
afli ı̂n situaţia parcurgerii secvenţiale a (cel puţin) unui volum gros, ceea ce conduce la o
creştere exagerată a timpului.
Aceasta dă o sugestie de construcţie a unui sistem de criptare cu cheie publică. Crip-
tarea se face independent de context, literă cu literă. Pentru fiecare literă a textului clar se
alege un nume care ı̂ncepe cu acest caracter şi numărul de telefon al persoanei respective
va constitui criptarea. Sistemul este polialfabetic; douăapariţii diferite ale aceleiaşi litere
vor fi codificate foarte probabil cu numere diferite. De exemplu, textul clar SOLIST se
poate cripta astfel:
S Simion Pavel 6394502
O Olaru Ştefan 7781594
L Lambru Stelian 6300037
I Ilie Romeo 3134971
S Solovean Raluca 6281142
T Tecuceanu Paul 3359962
Deci, textul criptat va fi
639450 277815 946300 037313 497162 811423 359962.
De remarcat că metoda este nedeterministă; din acelaşi ext clar se pot obţine enorm
de multe texte criptate. Pe de-altă parte, orice text criptat conduce la un text clar unic.
Bob va avea la dispoziţie pentru decriptare o carte de telefon scrisă ı̂n ordinea crescă-
toare a numerelor. Aceasta ı̂i va permite să decripteze mesajele cu un algoritm liniar.

Deci, o funcţie neinversabilă f trebuie să verifice două condiţii:


5.2. FUNCŢII NEINVERSABILE 3

• Fiind dat x, f (x) este uşor de calculat;

• Calculul lui x din f (x) este imposibil.

De remarcat că, din punct de vedere strict matematic, nu se cunosc astfel de funcţii. A
demonstra că există funcţii neinversabile este echivalent cu a demonstra relaţia P 6= N P,
conjectură care stă la baza ı̂ntregii teorii criptografice. De aceea, termenii folosiţi sunt
relativi la complexitatea calculatorie. Astfel, o problemă este:

1. uşoară dacă se poate rezolva cu un algoritm liniar;

2. grea dacă se poate rezolva cu un algoritm polinomial neliniar;

3. imposibilă dacă este N P - completă.

Am listat la ı̂nceput o serie de probleme N P - complete care stau la baza unor sisteme
de criptare cu cheie publică.

Exemplul 5.3 Să considerăm ”problema rucsacului”. Ea constă dintr-un vector de di-
mensiune n A = (a1 , a2 , . . . , an ) cu elemente numere ı̂ntregi pozitive distincte, şi un
număı̂ntreg pozitiv k. Trebuiesc aflaţi acei ai din A (dacă există) a căror sumă este
k. Numele intuitiv dat problemei este evident. De exemplu, fie
A = (43, 129, 215, 473, 903, 302, 561, 1165, 696, 1523) şi k = 3231.
Se determină 3231 = 129 + 473 + 903 + 561 + 1165, care este o astfel de soluţie (vom
da mai târziu o definiţie formală riguroasă a problemei).
În principiu o soluţie se poate găsi parcurgând sistematic toate submulţimile lui A şi
verificând dacă suma elementelor lor este k. În cazul de sus, aceasta ı̂nseamnă 210 − 1 =
1023 submulţimi (fără mulţimea vidă), dimensiune acceptabilă ca timp de lucru.
Ce se ı̂ntâmplă ı̂nsă dacă A are câteva sute de componente ? În acest caz se cunoaşte
fptul că problema rucsacului este N P - completă.
Cu ajutorul lui A se poate efini o funcţie f astfel:
Fie x ∈ [0, 2n − 1]; x poate fi reprezentat ı̂n binar ca un cuvânt de lungime n (adı̂ugând
eventual 0 - uri ı̂n faţă). f (x) va fi numărul obţinut din A prin ı̂nsumarea tuturor nu-
merelor ai aflate pe poziţiile marcate cu 1 ı̂n reprezentarea binară a lui x. Formal,
f (x) = A · Bx
unde Bx este reprezentarea binară a lui x, scrisă ca un vector coloană.
Să definim acum un sistem de criptare bazat pe problema rucsacului. Textul clar
este codificat iniţial ı̂n binar şi segmentat apoi ı̂n blocuri de câte n biţi (eventual ultimul
bloc este completat la sfârşit cu zerouri). Fiecare bloc rezultat este apoi criptat calculând
valoarea corespunzătoare a funcţiei f .
Pentru alfabetul latin sunt suficienţi 5 biţi pentru codificarea binară a literelor şi a
spaţiului. Mai exact, dacă asociem literelor A - Z reprezentările binare ale numerelor
1 − 26, vom avea:
4 CAPITOLUL 5. CRIPTARE CU CHEIE PUBLICĂ

− 00000 A − 00001 B − 00010


C − 00010 D − 00011 E − 00101
F − 00110 G − 00111 H − 01000
I − 01001 J − 01010 K − 01011
L − 01100 M − 01101 N − 01110
O − 01111 P − 10000 Q − 10001
R − 10010 S − 10011 T − 10100
U − 10101 V − 10110 W − 10111
X − 11000 Y − 11001 Z − 11010

Să considerăm un text clar, FLOARE DE COLT de exemplu. Cum fiecare caracter
se codifică ı̂n 5 biţi, ı̂n fiecare bloc intră două caractere: FL OA RE D E CO LT.
Codificând,se obţin şapte blocuri de câte 10 biţi:
0011001100 0111100001 1001000101 0000000100 0000000101 0001101111 0110010100
care conduc la textul criptat: (1814, 3243, 3204, 1165, 1118, 5321, 1811).

Să considerăm sistemul de criptare definit ı̂n Exemplul 5.3. Dacă ı̂l privim ca un sis-
tem clasic, criptanalistul trebuie să afle vectorul de bază A şi apoi să rezolve problema
rucsacului.
Dacă el foloseşte metoda textelor clare alese, ı̂l va afla uşor pe A: este suficient să
trimită n texte clare cu cı̂te un singur 1 iar restul 0. Problema apare ı̂n momentul
rezolvării problemei rucsacului; aici atât Bob cât şi Oscar sunt puşi ı̂n faţa acelaiaşi
probleme N P - complete. Ori, practic, doar Oscar trebuie să rezolve o problemă dificilă,
nu şi Bob.
O altă problemă ridicată de acest sistem de criptare: este obligatoriu ca un text criptat
să determine ı̂n mod unic un text clar. Aceasta ı̂nseamnă că nu trebuie să existe două
submulţimi ale lui A care să aibă aceeaşi sumă. Astfel, dacă se ia A = (17, 103, 50, 81, 33),
textul criptat (131, 33, 100, 234, 33) poate fi decriptat ı̂n două moduri: SAUNA şi FAUNA.

5.3 Trapa secretă


Pentru ca Bob să nu fie pus ı̂n aceaşi situaţie ca şi Oscar, el tebuie să dispună de un pro-
cedeu care să ı̂i permită să transforme problema N P - completă publică, ı̂ntr-o problemă
uşoară. Acest procedeu este numit trapă secretă. În primul exemplu, acest procedeu era
cartea de telefon ordonată după numerele de telefon, nu după abonaţi. Să vedem care
este trapa secretă ı̂n sistemul de criptare din Exemplul 5.3:

Exemplul 5.4 Sunt clase de probleme ale rucsacului uşor de rezolvat; una din ele o
formează vectorii cu creştere mare.
Spunem că vectorul rucsac A = (a1 , a2 , . . . , an ) este cu creştere mare dacă
j−1
X
∀ j ≥ 2, aj ≥ ai .
i=1
5.4. SISTEMUL MCELIECE 5

5.4 Sistemul McEliece


Sistemul de criptare McEliece este destul de apropiat de problema rucsacului. El utilizează
drept cadru teoria codurilor liniare (pentru detalii vezi [1]); aici, ı̂n general decodificarea
unui cod liniar binar corector de erori este o problema NP - completă. Pentru unele clase
de coduri sunt construiţi algoritmi de decodificare polinomiali; o astfel de clasă o formează
codurile Goppa, care constituie baza sistemului de criptare McEliece.

Definiţia 5.1 Fie k, n ∈ N k ≤ n. Un (n, k) - cod liniar binar este un subspaţiu liniar
C ⊆ Z2n de dimensiune k.
O matrice generatoare a lui C este o matrice binară k × n ale cărei linii formează o
bază a lui C.
Pentru a ∈ Z2n se defineşte ponderea w(a) = numărul de elemente nenule din a.
Pentru a, b ∈ Z2n a = (a1 , . . . , an ), b = (b1 , . . . , bn ), se defineşte distanţa Hamming
prin d(a, b) = w(a − b).
Pentru un (n, k) - cod liniar binar C, distanţa minimă este
dC = min{d(a, b)|a, b ∈ C, a 6= b}.
Un (n, k, d) - cod este un (n, k) - cod de distanţă minimă d.

Rolul unui cod corector de erori este de a corija modificări aleatoare care apar ı̂n trans-
miterea unui set de date (binare) printr-un canal. În linii mari, acesta funcţionează astfel:
dacă a este un mesaj de informaţie de k biţi, Alice ı̂l codifică ı̂ntr-un cuvânt de n biţi
b = aG, unde G este matricea generatoare a codului.
Bob primeşte un mesaj r ∈ Z2n (eventual r = b) şi caută un cuvânt b0 ∈ C cu d(r, b0 )
minimă posibil. Va decodifica r ı̂n b0 după care va calcula un mesaj de informaţie a0 astfel
ca b0 = a0 G. Cazul ideal este acela când b0 = b, a0 = a (adică erorile au fost acoperite
corect). Se cunoaşte că, dacă numărul de erori care apar nu depăşeşte (d − 1)/2, acest
procedeu corectează efectiv erorile.
Dacă Bob caută cuvântul - cod cel mai apropiat comparând r pe rând cu fiecare element
din C, cum sunt 2k astfel de cuvinte, algoritmul va fi exponenţial, deci nefuncţional.
Majoritatea algoritmilor de decodificare se bazează pe noţiunea de sindrom, definit
astfel.
Matricea de control a unui (n, k, d) - cod liniar binar de matrice generatoare G este o
matrice H de dimensiune (n − k) × n ale cărei linii formează o bază a unui spaţiu liniar
ortogonal. Evident, GH T = 0.
Pentru un cuvânt r ∈ Z2n , se numeşte sindrom secvenţa de n − k biţi definită HrT .

Teorema 5.1 a este un cuvânt - cod dacă şi numai dacă HaT = 0.
În plus, dacă a ∈ C, e ∈ Z2n şi r = a + e, atunci HrT = HeT .

Pentru demonstraţie se poate consulta de asemenea [1].


e poate fi considerat drept vectorul de erori care au apărut ı̂n transmiterea mesajului
a. Teorema anterioară afirmă că sindromul nu depinde decât de erori, nu de cuvântul -
cod transmis.
6 CAPITOLUL 5. CRIPTARE CU CHEIE PUBLICĂ

Această observaţie sugerează o metodă de decodificare bazată pe sindrom. Se cal-


culează ı̂ntâi s = HrT . Dacă s = 0, decodificarea lui r este tot r. Altfel, se ı̂ncearcă toate
cuvintele de pondere 1. Pentru fiecare astfel de cuvânt e se calculează HeT . Dacă s-a
găsit un e cu HeT = s, r se decodifică ı̂n r − e. În caz contrar se ı̂ncearcă vectorii de
pondere 2, 3, . . . , [(d − 1)/2]. Dacă nu s-a găsit nici un cuvânt e cu HeT = s, se deduce
că au apărut mai mult de [(d − 1)/2] erori ı̂n cursul transmisiei.
Metoda prezentată funcţionează pentru toate codurile liniare. Pentru anumite clase
speciale de coduri există algoritmi polinomiali de decodificare şi corectare a erorilor; ı̂n
cazul general ı̂nsă problema este N P - completă. Algoritmul de criptare McElliece se
bazează pe această idee. Trapa sa secretă o constituie o clasă de coduri pentru care există
algoritmi eficace de decodificare - codurile Goppa. În plus, există un număr mare de
coduri Goppa neechivalente, având aceiaşi parametri.
Nu vom intra ı̂n detalii privind definiţia codurilor Goppa ([1], Prelegerea 14). Acestea
pot fi privite ı̂nsă drept coduri liniare cu parametrii n = 2m , d = 2t + 1, k = n − mt.
Pentru o implementare practică referitor la criptare, McEliece sugerează m = 10, t = 50,
ceea ce corespunde unui (1024, 524, 101) - cod Goppa. Un text clar este o secvenţă de 524
biţi, iar un text criptat este o secvenţă de 1024 biţi. Cheia publică este o matrice binară
de dimensiuni 524 × 1024.
Algoritmul de criptare McEliece este următorul:
Fie G matricea generatoare a unui (n, k, d) - cod Goppa cu n =
2m , d = 2t + 1, k = n − mt.
Se definesc S o matrice inversabilă k × k peste Z2 şi P o matrice de
permutare n × n (matrice ı̂n care pe fiecare linie şi coloană există
o valoare 1, iar restul elementelor sunt 0).
Fie G0 = SGP, P= Z2k , C= Z2n , K= {(G, S, P, G0 )}.
G0 este publică iar G, S, P sunt secrete.
Pentru K = (G, S, P, G0 ) se defineşte
eK (a, e) = aG0 + e
unde e ∈ Z2n este un cuvânt aleator de pondere t.
Bob decriptează un mesaj b ∈ Z2n astfel:
1. Calculează b1 = bP −1 ;
2. Decodifică b1 obţinând b1 = a1 + e1 unde a1 ∈ C;
3. Calculează a0 ∈ Z2k astfel ca a0 G = a1 ;
4. Calculează a = a0 S −1 .

Exemplul 5.5 Vom exemplifica algoritmul pe un (8, 2, 5) - cod Goppa (deci n = 23 , k =


2, d = 5). Acest cod - extrem de mic (are doar 4 cuvinte) este generat de matricea
à !
0 0 1 1 1 1 1 1
G=
1 1 0 0 1 0 1 1
Să presupunem că Bob alege Ã
matricile
! Ã !
1 0 1 0
S= cu S −1 =
1 1 1 1
5.4. SISTEMUL MCELIECE 7

şi    
0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0
   
 0 0 0 1 0 0 0 0   1 0 0 0 0 0 0 0 
   
 0 0 0 0 0 0 1 0   0 0 0 0 1 0 0 0 
   
 1 0 0 0 0 0 0 0   0 1 0 0 0 0 0 0 
   
P =  cu P −1 =  

 0 0 1 0 0 0 0 0 


 0 0 0 0 0 0 1 0 

 0 0 0 0 0 1 0 0   0 0 0 0 0 1 0 0 
   
   
 0 0 0 0 1 0 0 0   0 0 1 0 0 0 0 0 
0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1
Matricea publică generată este deci
à !
0 1 0 1 0 1 1 1 1
G = SGP = .
1 1 0 1 0 1 1 0

Să presupunem că Alice vrea să cripteze textul clar a = (0, 1) folosind vectorul - eroare
e = (0, 0, 1, 0, 0, 1, 0, 0) (ales aleator) de pondere 2. Textul criptat este
b = aG0 + e = (1, 1, 1, 1, 0, 0, 1, 0).
După recepţionbarea mesajului, Bob calculează ı̂ntâi
b1 = bP −1 = (1, 1, 1, 1, 1, 0, 0, 0),
pe care ı̂l scie sub forma a1 + e1 unde a1 = (1, 1, 1, 1, 0, 1, 0, 0) este un cuvânt - cod,
iar e1 = (0, 0, 0, 0, 1, 1, 0, 0) 6= e (din cauza ı̂nmulţirii cu P −1 ).
Bob calculează apoi mesajul a0 = (1, 1), singurul cu proprietatea a0 G = a1 .
Ultimul pas este determinarea lui a = S −1 a0 = (0, 1), care este textul clar expediat de
Alice.
8 CAPITOLUL 5. CRIPTARE CU CHEIE PUBLICĂ
Bibliografie

[1] A. Atanasiu; Teoria Codurilor, Note de curs, 1998.

[2] D. Bayer, S.Haber, W.Stornetta; Improving the efficiency and reliability of digital
time-stamping. Sequences II, Methods in Communication, Security and Computer
Science, Springer Verlag (1993), 329-334.

[3] D. Chaum, E. van Heijst, B. Pfitzmann; Cryptographically strong undeniable signa-


tures, unconditionally secure for the signer. Lecture Notes in Computer Science, 576
(1992), 470-484.

[4] I.B. Damgard; A design principle for hash functions. Lecture Notes in Computer
Science, 435 (1990), 516-427.

[5] T. ElGamal; A public key cryptosystem and a signature scheme based on discrete
algorithms, IEEE Transactions on Information Theory, 31 (1985), 469-472

[6] J. Gibson; Discrete logarithm hash function that is collision free and one way. IEEE
Proceedings-E, 138 (1991), 407-410.

[7] S. Haber, W. Stornetta; How to timestamp a digital document. Journal of Cryptology,


3(1991), 99-111.

[8] R.C. Merkle; A fast software one-way functions and DES. Lecture Notes in Computer
Science, 435 (1990), 428-446

[9] Secure hash Standard. National Bureau of Standards, FIPS Publications 180, 1993

[10] B. Preneel, R. Govaerts, J. Vandewalle; Hash functions based on block ciphers: a


syntetic approach. Lecture Notes in Computer Science, 773 (1994), 368-378

[11] R.L. Rivest; The MD4 message digest algorithm. Lecture Notes in Computer Sci-
ence, 537, (1991), 303-311

[12] D. Stinton; Cryptographie, theorie et pratique, International Thompson Publishing


France, 1995

[13] A. Salomaa - Criptografie cu chei publice, ed. Militara, 1994

9
10 BIBLIOGRAFIE

[14] H.C.Williams, Some public-key criptofunctions as intractable as factorisation, Cryp-


tologia, 9 (1985), 224-237.
Capitolul 6

Sistemul de criptare RSA

6.1 Descrierea sistemului RSA


Sistemul de criptare RSA (Rivert - Shamir - Adleman) este ı̂n acest moment cel
mai cunoscut şi uzitat sistem cu cheie publică. Aceasta se datorează ı̂n primul rând
modalităţii foarte simple de criptare şi decriptare, care se realizează similar - cu
aceleaşi module de calcul (proprietate ı̂ntâlnită la sistemele clasice).
Iată ı̂n ce constă sistemul de criptare RSA:
Fie p, q numere prime impare distincte şi n = pq.
Indicatorul său Euler este φ(n) = (p − 1)(q − 1).
Fie P = C= Zn . Se defineşte
K= {(n, p, q, a, b)| n = pq, ab ≡ 1 (mod φ(n))}
Pentru K = (n, p, q, a, b) se definesc (∀x, y ∈ Zn ):
eK (x) = xb (mod n)
şi
dK (y) = y a (mod n)
Valorile n şi b sunt publice, iar p, q şi a sunt secrete.
Deoarece ab ≡ 1 (mod φ(n)), avem ab = tφ(n) + 1.
Atunci, pentru un x ∈ Zn∗ = Zn \ {0}, putem scrie (toate calculele se fac ı̂n Zn ):
³ ´t
(xb )a ≡ xtφ(n)+1 ≡ xφ(n) x ≡ 1t x ≡ x.
Pentru x = 0 afirmaţia este banală.

Exemplul 6.1 Să presupunem că Bob alege p = 101, q = 113. Atunci n =
11413, φ(n) = 11200. Deoarece 11200 = 26 52 7, un număr b poate fi utilizat ca
exponent de criptare dacă şi numai dacă nu este divizibil cu 2, 5 sau 7 (practic, Bob
nu trebuie să factorizeze φ(n); este suficient să verifice dacă (φ(n), b) = 1 folosind al-
goritmul lui Euclid). Fie de exemplu b = 3533. Avem atunci b−1 = 6597 mod 11200.
Deci, exponentul (secret) de decriptare este a = 6597.
Bob face public n = 11413 şi b = 3533.
Dacă Alice doreşte să-i transmită lui Bob mesajul 9726, ea calculează
97263533 mod 11413 = 5761
şi trimite prin canal textul criptat 5761. Când Bob primeşte acest număr, el
determină

1
2 CAPITOLUL 6. SISTEMUL DE CRIPTARE RSA

57616597 mod 11413 = 9726.

Securitatea sistemului de criptare RSA se bazează pe ipoteza că funcţia eK (x) =


xb mod n este neinversabilă din punct de vedere al complexităţii, deci este imposibil
pentru Oscar să o determine. Trapa secretă de care dispune Bob pentru decriptare
este descompunerea n = pq. Deoarece Bob ştie această factorizare, el poate calcula
φ(n) = (p−1)(q−1) şi apoi determina exponentul de decriptare a folosind algoritmul
lui Euclid extins.

6.2 Implementarea sistemului RSA


Pentru a realiza criptarea, Bob trebuie să efectueze următorii paşi (fiecare din ei va
fi detaliat mai târziu):

Tabelul 6.1:

1. Generează două numere prime mari p, q;

2. Calculează n = pq şi φ(n) = (p − 1)(q − 1);

3. Alege aleator un număr b (1 < b < φ(n)) astfel ca (b, φ(n)) = 1;

4. Calculează a = b−1 mod φ(n) folosind algoritmul lui Euclid;

5. Face public n şi b.

Un atac evident al sistemului constă ı̂n ı̂ncercarea de factorizare a lui n. Dacă


realizează aceasta, este uşor de determinat φ(n) = (p − 1)(q − 1) şi de calculat
exponentul de decriptare a plecând de la b.
Deci, pentru ca sistemul RSA să fie sigur, este necesar ca n să fie suficient de mare
pentru ca factorizarea sa să fie imposibilă (din punct de vedere al complexităţii).
Algoritmii de factorizare actuali pot descompune numere de până la 130 cifre zeci-
male. Se recomandă de aceea – pentru siguranţă – să se lucreze cu numere prime
p şi q de cel puţin 100 cifre fiecare, deci n va avea peste 200 cifre. Aproape toate
implementările actuale ale sistemului folosesc module de 512 biţi, care corespund
unui număr n de circa 154 cifre, deci căror siguranţă este tot mai ameninţată.
Cu intenţia că vom reveni asupra problemelor legate de numere prime mari,
să studiem ı̂ntâi operaţiile necesare pentru criptare şi decriptare. Orice astfel de
calcul se bazează pe o exponenţiere modulo n. Cum n este foarte mare, vom utiliza
aritmetica numerelor mari pentru lucrul ı̂n Zn , timpul de calcul necesar fiind direct
proporţional cu numărul de biţi ai lui n.
Dacă n ocupă k biţi ı̂n memorie (deci k = [log2 n] + 1), prin metode de calcul
uzuale se ajunge la concluzia că suma a două numere de k biţi se face ı̂n O(k), iar
ı̂nmulţirea ı̂n O(k 2 ). La fel şi reducerea modulo n. Deci, pentru x, y ∈ Zn , numărul
6.2. IMPLEMENTAREA SISTEMULUI RSA 3

xy mod n se poate determina prin calcule de complexitate O(k 2 ). Vom numi aceasta
multiplicare modulară.
Să cercetăm acum exponenţierea modulară xc mod n. O modalitate de calcul este
efectuarea de c − 1 multiplicări modulare - proces foarte ineficare pentru c mare,
deoarece algoritmul devine de complexitate exponenţială.
Există ı̂nsă un algoritm care realizează xc mod n cu complexitate O(k 3 ) (deci
polinomial). Acesta utilizează descompunerea binară a lui c,

s−1
X
c= ci 2i
i=0

unde s (s ≤ k) este numărul de biţi ai lui c, iar ci ∈ {0, 1}. Exponenţierea se face
doar prin ridicări la pătrat şi maxim s ı̂nmulţiri modulare, conform algoritmului:

z ← 1;
for i := s − 1 downto 0 do
z ← z 2 mod n;
if ci = 1 then z ← z · x mod n

Exemplul 6.2 Să reluăm datele din Exemplul 6.1. Calculul lui 97263533 mod 11413
se efectuează cu algoritmul de sus ı̂n numai 12 paşi; anume:

i ci z
2
11 1 1 · 9726 = 9726
10 1 97262 · 9726 = 2659
9 0 26592 = 5634
8 1 56342 · 9726 = 9167
7 1 91672 · 9726 = 4958
6 1 49582 · 9726 = 7783
5 0 77832 = 6298
4 0 62982 = 4629
3 1 46292 · 9726 = 10185
2 1 101852 · 9726 = 105
1 0 1052 = 11025
0 1 110252 · 9726 = 5761

Deci textul clar 9726 este criptat de Alice ı̂n 5761.

Pentru aplicarea sistemului de criptare RSA, trebuiesc generate ı̂ntâi numerele


prime p, q - despre care ne ocupăm ı̂n secţiunea următoare. Etapa a doua (din
Tabelul 6.1) se efectuează evident ı̂n O((log2 n)2 ). Etapele 3 şi 4 folosesc algoritmul
lui Euclid extins. Ca rezultat general, calculul celui mai mare divizor comun (a, b)
cu a > b se poate realiza cu complexitatea O((log2 a)2 ).
4 CAPITOLUL 6. SISTEMUL DE CRIPTARE RSA

6.3 Teste de primalitate probabiliste


În realizarea sistemului de criptare RSA trebuiesc generate numere prime aleatoare
cu număr mare de cifre. Practic, se realizează aleator numere, a căror primalitate
se testează, până se ajunge la un număr prim. Pentru teste se folosesc algoritmi
probabilişti al căror avantaj este rapiditatea (complexitatea lor este log n) dar care
pot afirma uneori primalitatea unor numere care nu sunt prime. Aceste erori se pot
reduce la o marjă acceptabilă prin multiplicarea testelor.
Problema generării aleatoare este posibilă din următorul considerent. Un rezultat
din teoria numerelor (nmit Teorema rarefierii numerelor prime) afirmă că sunt circa
n/log n) numere prime mai mici decât n. Astfel, pentru un modul de 512 biţi, un
număr p de 256 biţi are o probabilitate 1/logp ≈ 1/177 de a fi prim. Deci se fac
ı̂n medie cam 177 generări de numere p pentru a obţine un număr prim (dacă se
foloseşte şi faptul că se generează numai numere impare, aceasta reduce la jumătate
numărul de ı̂ncercări). Rezultă că este practic să se construiască numere mari, care
sunt probabil prime, pe baza cărora să se realizeze criptarea RSA. Vom detalia acest
procedeu.

Definiţia 6.1 O problemă de decizie este o problemă care pune o ı̂ntrebare al cărui
răspuns este dicotomic (Da/Nu).
Un algoritm probabilist este un algoritm care foloseşte numere aleatoare.

Definiţia 6.2 Un algoritm Monte - Carlo pozitiv este un algoritm probabilist care
rezolvă o problemă de decizie ı̂n care orice răspuns pozitiv este corect, dar pentru
care un răspuns negativ poate fi incorect.
În mod similar se defineşte algoritmul Monte - Carlo negativ.
Un algoritm Monte - Carlo pozitiv are o probabilitate de eroare ² dacă pentru
orice problemă al cărei răspuns ar trebui să fie pozitiv, algoritmul dă un răspuns
negativ cu probabilitatea cel mult ².

Problema de decizie folosită aici, numită Problema de descompunere este


Fiind dat un număr ı̂ntreg n, se poate descompune ı̂n produs de alte numere mai
mici ?
Vom prezenta ı̂n această secţiune doi algoritmi de tip Monte Carlo pozitiv care
rezolvă această problemă de de decizie.

6.3.1 Algoritmul Solovay - Strassen


Vom da ı̂ntâi câteva noţiuni suplimentare:
Definiţia 6.3 Fie p ≥ 3 număr prim şi a (1 ≤ a ≤ p − 1). Spunem că a este rest
(reziduu) pătratic modulo p dacă ecuaţia x2 = a (mod p) are soluţie ı̂n Zp . În caz
contrar, un număr a 6= 0 nu este rest pătratic.

Exemplul 6.3 Resturile pătratice modulo 11 sunt 1, 3, 4, 5, 9 Aceasta deoarece ı̂n


Z11 avem (±1)2 = 1, (±5)2 = 3, (±2)2 = 4, (±4)2 = 5, (±3)2 = 9.
6.3. TESTE DE PRIMALITATE PROBABILISTE 5

Problema resturilor pătratice constă ı̂n a decide dacă un număr n dat este sau nu un
rest pătratic. Un algoritm determinist pentru rezolvarea acestei probleme se bazează
pe

Teorema 6.1 (Criteriul lui Euler). Dacă p ≥ 3 este prim, un număr a este rest
pătratic dacă şi numai dacă
p−1
a 2 ≡ 1 (mod p)

Demonstraţie: Să presupunem a ≡ x2 (mod p). Cum ap−1 ≡ 1 (mod p) (Teorema


lui Fermat) pentru a 6≡ 0 (mod p), vom avea
p−1 p−1
a 2 ≡ (x2 ) 2 ≡ xp−1 ≡ 1 (mod p).
p−1
Invers, fie a 2 ≡ 1 (mod p) şi b ∈ Zp un element primitiv. Atunci a ≡ bi (mod p)
pentru un anumit i. Calculăm
p−1 p−1 i(p−1)
1 ≡ a 2 ≡ (bi ) 2 ≡ b 2 (mod p).
Ordinul p − 1 al lui b va divide i(p − 1)/2. Deci i este par şi rădăcinile pătrate
ale lui a sunt ±bi/2 . 2

Definiţia 6.4 Dacă p ≥ 3 este prim, pentru orice număr a ≥ 0 se defineşte simbolul
Legendre prin

à !  0 dacă a ≡ 0 (mod p)
a 
= 1 dacă a este rest pătratic modulo p
p 

−1 dacă a nu este rest pătratic modulo p

Teorema 6.1 asigură că a(p−1)/2 ≡ 1 (mod p) dacă şi numai dacă a este rest
pătratic modulo p. Dacă a este multiplu de p, evident a(p−1)/2 ≡ 0 (mod p). În
sfârşit, dacă a nu este rest pătratic modulo p, avem a(p−1)/2 ≡ −1 (mod p) deoarece
ap−1 ≡ 1, a(p−1)/2 6≡ 1 (mod p) şi −1 este singura rădăcină pătrată diferită de 1
modulo p. Este deci adevărată teorema următoare:

Teorema 6.2 Dacă p este număr prim impar, atunci


à !
a p−1
≡a 2 (mod p)
p
Simbolul lui Legendre se poate generaliza astfel:

Definiţia 6.5 Fie n = pe11 . . . pekk un număr impar descompus ı̂n factori primi. Dacă
a ≥ 0 este un număr ı̂ntreg, se defineşte simbolul Jacobi prin
µ ¶ k
à !ei
a Y a
=
n i=1 pi

µ ¶
6278
Exemplul 6.4 Să calculăm simbolul Jacobi . Descompunerea ı̂n factori
9975
primi a lui 9975 este 9975 = 3 · 52 · 7 · 19. Avem atunci
µ ¶ µ ¶µ ¶ µ ¶µ ¶ µ ¶ µ ¶2 µ ¶ µ ¶
6278 6278 6278 2 6278 6278 2 3 6 8
= = = (−1)(−1)2 (−1)(−1) =
9975 3 5 7 19 3 5 7 19
−1
6 CAPITOLUL 6. SISTEMUL DE CRIPTARE RSA

Fie n > 1 un număr impar. Dacă n este prim, atunci pentru orice a, avem
µ ¶
a n−1
≡ a 2 (mod n).
n
Invers, dacă n nu este prim, este posibil ca egalitatea de sus să fie falsă. Dacă
congruenţa se verifică, spunem că n este număr Euler pseudo - prim pentru baza a.
De exemplu, 91 este pseudo-prim
µ ¶ pentru baza 10 deoarece
10
= −1 = 1045 (mod 91).
91
Putem enunţa acum testul de primalitate Solovay - Strassen pentru un număr
impar n:

1. Se generează aleator un număr a (1 ≤ a ≤ n − 1);


µ ¶
a n−1
2. Dacă ≡ a 2 (mod n), atunci ”n este prim”,
n
altfel ”n nu este prim”.

Se poate arăta că numărul de baze a pentru care un număr neprim n este pseudo
- prim Euler, este cel mult n/2. Aceasta arată că testul de primalitate Solovay -
Strassen este un algoritm Monte Carlo pozitiv pentru problema de descompunere,
cu probabilitate de eroare 1/2. Un studiu referitor la complexitatea aplicării acestui
test de primalitate şi a probabilităţii de eroare se poate găsi ı̂n [10].

6.3.2 Algoritmul Miller - Rabin


Acest algoritm este cunoscut şi sub numele de testul de tare pseudo - primalitate.
Forma sa este:

1. Se descompune n − 1 = 2k m unde m este impar;

2. Se alege aleator a (1 ≤ a ≤ n − 1);

3. b ← am (mod n)

4. if b ≡ 1 (mod n) then ”n este prim”, Stop;

5. for i := 0 to k − 1 do

6. if b ≡ −1 (mod n) then ”n este prim”, Stop,


else b ← b2 (mod n)

7. ”n nu este prim”, Stop

Evident, algoritmul este polinomial, de complexitate O((log n)3 ).


Teorema 6.3 Algoritmul Miller - Rabin este un algoritm Monte Carlo pozitiv pen-
tru problema de descompunere.
6.4. CRIPTANALIZA 7

Demonstraţie: Să presupunem prin absurd că algoritmul răspunde că un număr prim
n se poate descompune, adică am 6≡ 1 (mod n). Vom urmări şirul de valori pe care le
k−1
ia b. Cum la fiecare iterare b este ridicat la pătrat, acest şir este am , a2m , . . . , a2 m .
Vom avea deci
i
a2 m 6≡ −1 (mod n) pentru 0 ≤ i ≤ k − 1.
k k−1
Deoarece n este prim, teorema lui Fermat dă a2 m ≡ 1 (mod n). Deci a2 m
este o rădăcină pătrată a lui 1 modulo n.
Din faptul că n este prim, singurele rădăcini pătrate ale lui 1 sunt ±1. Această
afirmaţie se poate arăta astfel:
x este rădăcină pătrată a lui 1 dacă şi numai dacă n|(x − 1)(x + 1). Cum n este
prim, avem n|(x − 1) (deci x ≡ 1 (mod n)) sau n|(x + 1) (adică x ≡ −1 (mod n)).
k−1 k−1
Cum prin ipoteză a2 m 6≡ −1 (mod n), avem a2 m ≡ 1 (mod n).
k−2
Atunci a2 m trebuie să fie rădăcină pătrată a lui 1, diferită de −1, deci
k−2
a2 m ≡ 1 (mod n).
Procedând iterativ, se ajunge la am ≡ 1 (mod n), ceea ce contrazice faptul că
algoritmul nu s-a oprit la Pasul 4. 2

6.4 Criptanaliza
Vom trece ı̂n revistă câteva modalităţi de atac ale sistemelor de criptare RSA.

6.4.1 Informaţii despre p şi q


Ca o primă observaţie, cunoaşterea lui φ(n) este suficientă pentru spargerea sistemu-
lui. În acest caz, totul se reduce la rezolvarea ı̂n N × N a sistemului
(
pq = n
(p − 1)(q − 1) = φ(n)

sau - după substituţie - a ecuaţiei

X 2 − (n − φ(n) + 1)X + n = 0

Deci, dacă Oscar determină φ(n), el poate factoriza n şi sparge sistemul. Cu alte
cuvinte, calculul lui φ(n) nu este mai simplu decât factorizarea lui n.
De asemenea, o slăbiciune constă ı̂n alegerea unor numere p, q prime apropiate
unul de altul. În acest caz (cu p > q), vom
√ avea (p − q)/2 un număr foarte mic, iar
(p + q)/2 un număr foarte apropiat de n. În plus,

(p + q)2 (p − q)2
−n= ,
4 4
deci membrul stâng este pătrat perfect.

Atunci, pentru factorizarea lui n se testează toate numerele ı̂ntregi x > n până
se găseşte unul astfel ı̂ncât x2 − n este pătrat perfect; fie acesta y 2 . Atunci vom avea
imediat p = x + y, q = x − y.
8 CAPITOLUL 6. SISTEMUL DE CRIPTARE RSA


Exemplul 6.5 Pentru n = 97343 se găseşte n = 311, 998. Apoi 3122 − n = 1,
ceea ce conduce la factorizarea p = 313, q = 311.

Deci, ı̂n general este recomandabil ca cele două numere prime p şi q să difere prin
lungime.

6.4.2 Exponentul de decriptare


Vom demonstra că un algoritm care calculează exponentul de decriptare a poate fi
utilizat ca oracol1 ı̂ntr-un algoritm probabilist care descompune n. Deci, se poate
spune că dacă a este descoperit, secretul factorizării lui n este compromis; deci Bob
va trebui să schimbe nu numai exponentul de decriptare, ci şi modulul n.
Algoritmul de descompunere care va fi descris este de tip Las Vegas.

Definiţia 6.6 Fie ² (0 ≤ ² < 1). Un algoritm tip Las Vegas este un algoritm
probabilist care, pentru orice apariţie a unei probleme, poate oferi un răspuns -
totdeauna corect - sau poate eşua şi să nu dea nici un răspuns, cu probabilitate ².

Observaţie: Un algoritm Las Vegas poate să nu dea răspuns, dar dacă dă - acest
răspuns este sigur corect. Algoritmii Monte Carlo ı̂n schimb dau totdeauna răspuns,
deşi acesta uneori este incorect.
Deci, dacă avem un algoritm Las Vegas pentru rezolvarea unei probleme, putem
să ı̂l apelăm de mai multe ori, până se obţine un răspuns. Probabilitatea ca el să nu
răspundă la m tentative consecutive este ²m .
Să considerăm un algoritm ipotetic A care calculează exponentul de decriptare
a plecând de la exponentul de criptare b. Se poate descrie atunci un algoritm Las
Vegas care utilizează A ca oracol. El este bazat pe studiul rădăcinilor pătrate ale
unităţii modulo n, când n = pq, p şi q fiind numere prime impare. În acest caz
x2 ≡ 1 (mod p) are ca singure soluţii x ≡ ±1 (mod p). La fel, x2 ≡ 1 (mod q) are
soluţiile x ≡ ±1 (mod q).
Din Teorema chineză a restului rezultă că x2 ≡ 1 (mod n) este echivalentă cu
x2 ≡ 1 (mod p) şi x2 ≡ 1 (mod q). Vom avea deci patru rădăcini pătrate ale unităţii
modulo n, care pot fi calculate cu Teorema chineză a restului. Două sunt soluţiile
triviale ±1 (mod n), iar celelalte - numite netriviale - sunt opuse modulo n.

Exemplul 6.6 Fie n = 403 = 13 · 31. Cele patru rădăcini pătrate ale lui 1 modulo
403 sunt 1, 92, 311 şi 402.

Să presupunem acum că n este o rădăcină pătrată netrivială a lui 1 modulo n, deci
o soluţie a ecuaţiei x2 ≡ 1 (mod n). Avem
n|(x − 1)(x + 1)
Dar n nu poate divide nici unul din factorii din membrul drept. Deci va trebui
ca (x + 1, n) = p, (x − 1, n) = q - sau invers - (x + 1, n) = q, (x − 1, n) = p. Acest cel
mai mare divizor comun se poate calcula fără a şti descompunerea lui n, construind
algoritmul de mai jos, care foloseşte A ca oracol:
1
program care răspunde numai cu Da/Nu la o ı̂ntrebare - tip a utilizatorului
6.4. CRIPTANALIZA 9

1. Fie w aleator (1 < w ≤ n − 1);


2. x ← (w, n);
3. if x > 1 then Stop (cu x = p sau x = q);
4. a ← A(b);
5. Se descompune ab − 1 = 2s r, r impar;
6. v ← wr (mod n);
7. if v ≡ 1 (mod n) then Stop (eşec);
8. while v 6≡ 1 (mod n) do
9. v0 ← v;
10. v ← v 2 (mod n);
11. if v0 ≡ −1 (mod n) then Stop (eşec);
else x ← (v0 + 1, n), Stop (x = p sau x = q).

Deci, cunoaşterea unei rădăcini pătrate netriviale a lui 1 modulo n determină des-
compunerea lui n printr-un calcul de complexitate polinomială.

Exemplul 6.7 Fie n = 89855713, b = 34986517, a = 82330933 şi să considerăm


că s-a tras aleator w = 5. Vom avea:
ab − 1 = 23 · 360059073378795.
La pasul 6 se obţine v = 85877701, iar la pasul 10, v = 1. La pasul 12 se va
obţine atunci (85877702, n) = 9103.
Acesta este un factor al lui n; celălalt este n/9103 = 9871.

Trebuie demonstrată următoarea afirmaţie:

Afirmaţia 6.1 Procedeul descris este un algoritm.

Demonstraţie: Ca o primă observaţie, dacă există suficientă şansă şi w este multiplu
de p sau q, atunci el se factorizează imediat (pasul 2).
Dacă w este prim cu n, atunci se calculează succesiv wr , w2r , . . . prin ridicări
t
succesive la pătrat, până se ajunge la un t cu w2 r ≡ 1 (mod n). Deoarece ab − 1 =
s
2s r ≡ 0 (mod φ(n)), se ştie că w2 r ≡ 1 (mod n). Deci bucla while va efectua
maxim s iteraţii.
La sfârşitul buclei se va găsi o valoare v0 6≡ 1 (mod n) cu v02 ≡ 1 (mod n). Dacă
v0 6≡ −1 (mod n), algoritmul eşuează; altfel, v0 este o rădăcină pătrată netrivială a
lui 1 modulo n care - la pasul 12 - permite descompunerea lui n. 2
Se poate arăta ([10]) că acest algoritm se termină cu succes cu probabilitate 1/2.

6.4.3 Informaţie parţială despre textul clar


Să studiem puţin informaţia din textul clar care ar putea trăda sistemul de criptare
RSA. Ştiind că y = eK (x), vom considera două exemple de informaţie parţială dată
de y despre x:

1. par(y) - dă valoarea ultimului bit din scrierea binară a lui x;

2. jum(y) - va da 0 dacă 0 ≤ x < n/2, 1 dacă n/2 ≤ x ≤ n − 1.


10 CAPITOLUL 6. SISTEMUL DE CRIPTARE RSA

Vom arăta ([11]) că orice algoritm care poate calcula par(y) sau jum(y) poate fi
utilizat ca oracol pentru regăsirea textului clar x. Altfel spus, a calcula una din
aceste funcţii este la fel de dificil cu a decripta tot textul y.
Faptul că cele două funcţii sunt polinomial echivalente rezultă din

jum(y) = par(y · eK (2) mod n) par(y) = jum(y · eK (2−1 ) mod n)

şi din relaţia eK (x1 x2 ) = eK (x1 )eK (x2 ).


Să arătăm acum cum se poate calcula x = dK (y) cu ajutorul unui oracol care dă
valoarea jum(y):

1. k ← [log2 n];
2. for i = 0 to k do
3. yi ← jum(y)
4. y ← (y · eK (2)) mod n
5. jos ← 0;
6. sus ← n;
7. for i = 0 to k do
8. mijloc ← (jos + sus)/2;
9. dacă yi = 1 atunci jos ← mijloc
altfel sus ← mijloc
10. x ← [sus]

În paşii 2 − 4 se calculează yi = jum(y · (eK (2))i ) = jum(eK (x · 2i )) pentru 0 ≤ i ≤


[log2 ] n. Se observă că · ¶
n
jum(eK (x)) = 0 ⇐⇒ x ∈ 0,
· 2 ¶ · ¶
n n 3n
jum(eK (2x)) = 0 ⇐⇒ x ∈ 0, ∪ ,
· 4¶ ·2 4 ¶ · ¶ · ¶
n n 3n n 5n 3n 7n
jum(eK (4x)) = 0 ⇐⇒ x ∈ 0, ∪ , ∪ , ∪ , , etc.
8 4 8 2 8 4 8
În acest mod, x se poate localiza printr-o căutare binară, realizată la paşii 7 −11.

Exemplul 6.8 Fie n = 1457, b = 779, iar textul criptat este y = 722. Calculăm
eK (2) = 946. Să presupunem că oracolul jum din pasul 3 dă următoarele răspunsuri:

i 0 1 2 3 4 5 6 7 8 9 10
yi 1 0 1 0 1 1 1 1 1 0 0
Căutarea binară este realizată ı̂n tabelul:
6.5. ALGORITMI DE DESCOMPUNERE 11

i jos mijloc sus


0 0, 00 728, 50 1457, 00
1 728, 50 1092, 75 1457, 00
2 728, 50 910, 62 1092, 75
3 910, 62 1001, 69 1092, 75
4 910, 62 956, 16 1001, 69
5 956, 16 978, 92 1001, 69
6 978, 92 990, 30 1001, 69
7 990, 30 996, 00 1001, 69
8 996, 00 998, 84 1001, 69
9 998, 84 1000, 26 1001, 69
10 998, 84 999, 55 1000, 26
998, 84 999, 55 999, 55

Textul clar este deci x = [999, 55] = 999.

6.5 Algoritmi de descompunere


Sunt extrem de numeroase lucrările care tratează descompunerea numerelor ı̂n fac-
tori primi. De aceea aici vom face doar o trecere ı̂n revistă a celor mai cunoscuţi
algoritmi de factorizare.
Astfel, cel mai simplu pare a fi ciurul lui Eratostene care constă ı̂n ı̂ncercarea
√ de
ı̂mpărţi numărul n impar prin toate numerele ı̂ntregi impare din intervalul [3, n].
Pentru n < 1012 tehnica este destul de eficientă.

6.5.1 Metoda p − 1
Un algoritm simplu care se poate aplica uneori şi la numere mari este metoda p − 1
enunţată de Pollard ı̂n 1974. El foloseşte esenţial trei variabile de intrare: numărul
n (impar) care trebuie descompus, o margine B şi un număr oarecare g ∈ [2, n − 1].
Descrierea algoritmului este:

Intrare: n, B, g.
1. a ← g
2. for j = 2 to B do a ← aj mod n
3. d ← (a − 1, n)
4. if d > 1 then ”d este factor al lui n”, Stop
else ”nu s-a găsit divizor al lui n”

Să vedem cum funcţionează acest algoritm:


Presupunem că p este un divizor prim al lui n şi că toţi divizorii primi ai lui p − 1
sunt mai mici decât B. Atunci p − 1|B!.
La terminarea ciclului de la pasul 2, avem
a ≡ g B! (mod n) deci a ≡ g B! (mod p)
12 CAPITOLUL 6. SISTEMUL DE CRIPTARE RSA

deoarece p|n. Cum g p−1 ≡ 1 (mod p) conform teoremei lui Fermat (ı̂n afară de
cazul când p|g) şi cum (p − 1)|B!, se obţine a ≡ 1 (mod p).
Deci, la pasul 3 se ajunge la p|(a − 1) şi p|n, de unde rezultă p|d = (a − 1, n).
Numărul d este un divizor netrivial al lui n (ı̂n afară de cazul a = 1 la pasul 3).
Având un divizor netrivial d, procesul se poate itera.
Exemplul 6.9 Să considerăm n = 15770708441. Aplicând metoda p − 1 cu B =
180, se găseşte a = 11620221425, iar d = 135979. Se ajunge la descompunerea finală
15770708441 = 135979 · 115979.
Descompunerea a reuşit deoarece 135978 are numai factori primi ”mici”:
135978 = 2 · 3 · 131 · 173. Luând deci B ≥ 173 se obţine 135978|B!.
Pentru valori relativ mici ale lui B algoritmul este √ de complexitate polinomial
3
scăzută (O(BlogB(log n) )). Dacă B creşte până la n, el va reuşi totdeauna, dar
nu va fi mai rapid decât ciurul lui Eratostene.
Deci slăbiciunea metodei rezidă ı̂n faptul că n trebuie să admită un divizor p cu
proprietatea că p − 1 să aibă numai factori primi mici. Este uşor de construit un
modul n = pq care să reziste la acest atac. Se ı̂ncepe prin a găsi două numere prime
mari p1 , q1 astfel ca p = 2p1 + 1 şi q = 2q + 1 să fie de asemenea prime (pe baza
testelor de primalitate Monte Carlo date anterior). Atunci modulul RSA n = pq va
rezista la atacul p − 1.
În anii 0 80 Lenstra construieşte un algoritm bazat pe curbe eliptice care genera-
lizează metoda aceasta, ı̂n ideea că există un număr ı̂ntreg destul de aproape de p
care are divizori primi mici. Nu vom prezenta aici acest algoritm.

6.5.2 Algoritmul lui Dixon şi sita pătratică


Algoritmul lui Dixon se bazează pe o idee extrem de simplă: dacă se pot afla două
numere x, y cu x 6≡ y (mod n) dar x2 ≡ y 2 (mod n), atunci (x − y, n) este un divizor
netrivial al lui n.
Metoda utilizează o bază B de factori primi ”mici”. Se caută ı̂ntâi mai multe
numere x pentru care divizorii primi ai lui x2 mod n sunt ı̂n B. Se formează apoi
produse cu aceste numere ı̂n aşa fel ca fiecare factor prim al pătratului produsului
să apară de un număr par de ori. Aceasta conduce la o relaţie x2 ≡ y 2 (mod n) care
va da – eventual – o descompunere a lui n.
Exemplul 6.10 Fie n = 15770708441 şi alegem mulţimea B= {2, 3, 5, 7, 11, 13}.
Selectăm
83409341562 ≡ 3 · 7 (mod n)
120449429442 ≡ 2 · 7 · 13 (mod n)
27737000112 ≡ 2 · 3 · 13 (mod n)
Dacă se ia produsul acestor trei congruenţe, se ajunge la
(8340934156 · 12044942944 · 2773700011)2 ≡ (2 · 3 · 7 · 13)2 (mod n)
Reducând conţinutul parantezelor modulo n, se obţine
95034357852 ≡ 5462 (mod n).
Vom calcula acum (9503435785 − 546, 15770708441) = 115759,
care va da un divizor 115759 al lui n.
6.6. SISTEMUL DE CRIPTARE RABIN 13

Fie B= {p1 , p2 , . . . , pB }; considerăm un număr C ”puţin” mai mare decât B (de


exemplu C = B + 10) şi presupunem că am găsit C relaţii de forma
α α α
x2j ≡ p1 1j · p2 2j · . . . · pBBj 1≤j≤C

Pentru fiecare j se consideră vectorul binar (elementele sale se iau modulo 2)


αj = (α1j , . . . , αBj ) ∈ Z2B .
Dacă se poate determina o submulţime a acestor vectori a căror sumă modulo 2
este (0, 0, . . . , 0), pătratul produsului elementelor xj corespunzătoare va avea fiecare
divizor ı̂n B de un număr par de ori.

Exemplul 6.11 Revenind la Exemplul 6.10, cei trei vectori care se construiesc sunt
α1 = (0, 1, 0, 1, 0, 0), α2 = (1, 0, 0, 1, 0, 1), α3 = (1, 1, 0, 0, 0, 1).
Se verifică imediat că α1 + α2 + α3 ≡ (0, 0, 0, 0, 0, 0) (mod 2).

Evident, a căuta o submulţime de C vectori de sumă nulă modulo 2 revine la a


căuta o relaţie de dependenţă liniară (ı̂n Z2 ) ı̂ntre aceşti vectori. Dacă C > B, o
asemenea relaţie există şi poate fi găsită uşor prin eliminare gaussiană.
Ar mai fi de văzut cum să se obţină acei xj pentru care x2j se descompun ı̂n factori
primi din baza B. Sunt mai multe metode posibile pentru aceasta; de exemplu, ciurul
pătratic - construit de Pomerance - foloseşte numere ı̂ntregi de forma

xj = j + [ n], j = 1, 2, . . ..
De remarcat că dacă B este mare, este foarte posibil ca un ı̂ntreg xj să se
descompună ı̂n B, dar numărul acestor xj trebuie să crească pentru a căuta relaţiile
de dependenţă. Se arată q că alegerea optimă pentru B este ı̂n jur de

e logn log logn .
Ultimul tip de atac asupra factorizării lui n - care se pare că are succes mai mare
- este construit la sfârşitul anilor 0 80. Numit ciur algebric, el caută de asemenea
relaţii de forma x2 ≡ y 2 (mod n) dar toate calculele se fac ı̂n inele algebrice finite,
nu ı̂n corpuri.

6.6 Sistemul de criptare Rabin


Sistemul de criptare Rabin este o variantă a sistemului RSA, care oferă o securitate
de calcul echivalentă. Descrierea sa este:

Fie n = pq unde p, q sunt numere prime distincte, p, q ≡ 3 (mod 4).


Se ia P = C= Zn şi K= {(n, p, q, B)|0 ≤ B ≤ n − 1}.
Pentru K = (n, p, q, B) se definesc: s
B2 B
eK (x) = x(x + B) (mod n) dK (y) = +y−
4 2

Există patru texte clare distincte care se pot cripta ı̂n acelaşi text. Să detaliem
această afirmaţie:
Fie α una din cele patru rădăcini pătrate modulo n ale unităţii, şi x ∈ Zn .
Efectuăm calculele
14 CAPITOLUL 6. SISTEMUL DE CRIPTARE RSA
µ µ ¶ ¶ µ ¶ µ ¶
B B 2 B 2 B 2
eK α x + − =α x+ − = x2 + Bx = eK (x)
2 2 2 2
(calculele s-au realizat ı̂n Zn , iar ı̂mpărţirea la 2 şi 4 s-a făcut prin ı̂nmulţirea ı̂n
Zn cu 2−1 respectiv 4−1 ).
Cele patru texte clare care se cifrează ı̂n eK (x) sunt
x, −x − B, α(x + B/2) − B/2 şi −α(x + B/2) − B/2,
unde α este o rădăcină pătrată netrivială a unităţii modulo n.
În general, Bob nu are nici un mijloc de a distinge care din cele patru mesaje
este cel corect, dacă nu dispune de informaţii suplimentare.
Să vedem cum se realizează decriptarea. Bob primeşte mesajul criptat y şi
ı̂ncearcă să să determine x astfel ca x2 + Bx ≡ y (mod n).
Aceasta este o ecuaţie de gradul doi ı̂n x. Termenul de gradul 1 se poate elimina
folosind substituţia x1 = x + B/2 (sau – echivalent – x = x1 − B/2).
Se ajunge la ecuaţia
B2
x21 ≡ + y (mod n).
4
Notând membrul drept cu C, se ajunge la ecuaţia x21 ≡ C (mod n). Deci de-
criptarea se reduce la extragerea rădăcinilor pătrate modulo n. Aceasta echivalează
cu rezolvarea sistemului
x21 ≡ C (mod p) x21 ≡ C (mod q)
care, prin combinarea soluţiilor fiecărei ecuaţii va da patru rădăcini pătrate mo-
dulo n.
Într-o criptare corectă, C este totdeauna un rest pătratic modulo p şi q. Dacă
p ≡ 3 (mod 4), există o formulă simplă pentru extragerea rădăcinilor pătrate dintr-
un rest pătratic C modulo p. Avem (calculele se fac modulo p):
³ ´2
±C (p+1)/4 ≡ C (p+1)/2 ≡ C (p−1)/2 C ≡ C
(s-a folosit Teorema 6.1). Avem deci cele patru rădăcini pătratice
±C (p+1)/4 (mod p), ±C (q+1)/4 (mod q)
care - prin combinare pe baza teoremei chineze a resturilor - dau patru rădăcini
pătrate ale lui C.
Observaţie: De remarcat că nu se cunoaşte un algoritm polinomial determinist
pentru extragerea rădăcinilor pătratice modulo p pentru p ≡ 1 (mod 4); ı̂n această
situaţie există doar algoritmi Las Vegas.
După determinarea acestor rădăcini x1 , se află x = x1 −B/2. Aceasta dă formula
de decriptare din enunţul metodei Rabin.

Exemplul 6.12 Fie n = 77 = 7 · 11 şi B = 9. Funcţia de criptare este


eK (x) = x2 + 9x (mod 77)
iar cea de decriptare q
dK (y) = 1 + y − 43 (mod 77).
Să presupunem că Bob vrea să decripteze textul y = 22. El va trebui să determine
rădăcinile pătrate ale lui 23 modulo 7 şi 11. Cum aceste două module sunt congruente
cu 3 modulo 4, se poate aplica formula arătată anterior:
23(7+1)/4 ≡ 22 ≡ 4 (mod 7) 23(11+1)/4 ≡ 13 ≡ 1 (mod 11).
Utilizând teorema chineză a resturilor, se obţin rădăcinile pătrate ale lui 23
modulo 77 : ±10, ±32. Cele patru texte clare posibile (calculate modulo 77) sunt:
6.7. ANEXĂ 15

10 − 43 = 44, 67 − 43 = 24, 32 − 43 = 66, 45 − 43 = 2.


Se verifică imediat că toate aceste patru texte clare se criptează ı̂n 22.

Să studiem acum securitatea sistemului de criptare Rabin. Să presupunem că există
un algoritm de decriptare A; acesta poate fi atunci utilizat ı̂ntr-un algoritm Las
Vegas care descompune modulul n cu probabilitate 1/2; algoritmul este următorul:

1. Se alege aleator r (1 ≤ r ≤ n − 1);


2. y ← r2 − B 2 /4 mod n;
3. x ← A(y);
4. x1 ← x + B/2;
5. if x1 ≡ ±r (mod n) then Stop (eşec)
else (x1 + r, n) = p sau q, Stop
µ ¶
B
Să observăm ı̂ntâi că y = eK r − , deci la pasul 3 se decriptează x sub forma
2
r − B/2. Cum la pasul 5. avem x1 ≡ r2 (mod n), rezultă x1 ≡ ±r (mod n) sau
2

x1 ≡ ±αr (mod n), unde α este o rădăcină netrivială modulo n a unităţii. În al
doilea caz, n|(x1 −r)(x1 +r) şi n nu divide nici unul din cei doi factori. Deci, calculul
lui (x1 + r, n) sau (x1 − r, n) va da p sau q, adică o descompunere a lui n.
Să calculăm probabilitatea de succes a algoritmului ([10]), din n − 1 extrageri
posibile ale lui r. Pentru două resturi nenule r1 , r2 , se defineşte

r1 ∼ r2 ⇐⇒ r12 ≡ r22 (mod n)

Aceasta este evident o relaţie de echivalenţă. Toate clasele de echivalenţă din Zn∗ sunt
de cardinal patru, fiecare fiind de forma [r] = {±r, ±αr}. În algoritmul anterior,
două valori dintr-o clasă de echivalenţă conduc la acelaşi y. Să considerăm un x1
calculat plecând de la valoarea x returnată de oracolul A pentru un y dat. x1 este
un element din [r]. Dacă x1 = ±r, algoritmul eşuează; dacă x1 = ±αr, el reuşeşte
să descompună n. Cum r este aleator, cele patru posibilităţi sunt echi-probabile,
deci algoritmul dă reuşită ı̂n 50% din cazuri.

6.7 Anexă
6.7.1 Algoritmul lui Euclid extins
După cum se ştie, algoritmul lui Euclid constituie o modalitate eficace de deter-
minare a celui mai mare divizor comun a două numere ı̂ntregi pozitive. El poate fi
extins pentru a determina şi inversele elementelor dintr-un corp finit Zn .
Să reamintim ı̂ntâi algoritmul lui Euclid (forma clasică):
Fie r0 , r1 ∈ N ∗ . Se efectuează secvenţa de ı̂mpărţiri succesive:
r0 = q1 r1 + r2 0 < r2 < r1
r1 = q2 r2 + r3 0 < r3 < r2
..
. (1)
rm−2 = qm−1 rm−1 + rm 0 < rm < rm−1
16 CAPITOLUL 6. SISTEMUL DE CRIPTARE RSA

rm−1 = qm rm .
Deoarece (r0 , r1 ) = (r1 , r2 ) = . . . = (rm−1 , rm ) = rm , rezultă că cel mai mare
divizor comun dintre r0 şi r1 este rm .
Să definim acum şirul t0 , t1 , . . . , tm astfel:
t0 = 0, t1 = 1
tj = tj−2 − qj−1 tj−1 (mod r0 ), j ≥ 2 (2)

Teorema 6.4 Pentru 0 ≤ j ≤ m avem rj ≡ tj r1 (mod r0 ) unde rj şi tj sunt definite


de (1) respectiv (2).

Demonstraţie: Se foloseşte o inducţie după j. Pentru j = 0 şi j = 1 afirmaţia este


banală. O presupunem adevărată pentru j = i − 1 şi j = i − 2 (i ≥ 2) si să o arătăm
pentru j = i. Toate calculele se fac modulo r0 .
Conform ipotezei de inducţie, ri−2 = ti−2 r1 , ri−1 = ti−1 t1 . Acum:
ri = ri−2 − qi−1 ri−1 = ti−2 r1 − qi−1 ti−1 r1 = (ti−2 − qi−1 ri−1 )r1 = ti r1 . 2

Corolarul 6.1 Dacă (r0 , r1 ) = 1 atunci tm = r1−1 mod r0 .

Se poate da acum algoritmul extins al lui Euclid care pentru n > 1 şi b ∈ Zn \ {0}
va determina b−1 mod n (dacă există).

1. n0 ←· n, ¸b0 ← b, t0 ← 0, t ← 1
n0
2. q ← , r ← n0 − q · b0
b0
3. while r > 0 do
3.1. temp ← t0 − q · t
3.2. if temp ≥ 0 then temp ← temp mod n
else temp ← n − ((−temp) mod n)
3.3. n ← ·b0 , ¸b0 ← r, t0 ← t, t ← temp
n0
3.4. q ← , r ← n0 − q · b0
b0
4. if b0 6= 1 then b nu are inversă mod n
else b−1 (mod n) = t.

Exemplul 6.13 Să calculăm 28−1 mod 75, folosind algoritmului lui Euclid extins.
Vom avea pe rând:

n0 b0 q r t0 t temp
75 28 2 19 0 1 73
28 19 1 9 1 73 3
19 9 2 1 73 3 67
9 1 9 0 3 67

Deci 28−1 mod 75 = 67.


6.7. ANEXĂ 17

6.7.2 Teorema chineză a resturilor


Teorema 6.5 Se dau numerele p1 , p2 , . . . , pr prime ı̂ntre ele şi fie n = p1 p2 . . . pr .
Atunci sistemul de ecuaţii

x ≡ ai mod pi , 1≤i≤r

are soluţie comună ı̂n intervalul [0, n − 1].

Demonstraţie: Pentru fiecare i, (pi , n/pi ) = 1; deci există numerele yi astfel ı̂ncât
n
yi ≡ 1 (mod pi ).
pi
n
De asemenea, pentru j 6= i, deoarece pj |(n/pi ), avem yi ≡ 0 (mod pj ).
pi
Xr
n
Alegem x = yi ai (mod n).
i=1 pi
Pentru orice i, x este o soluţie a ecuaţiei x ≡ ai (mod pi ) deoarece ı̂n Zpi avem
n
x = yi ai = ai . 2
pi
Exemplul 6.14 Fie r = 3, p1 = 7, p2 = 11, p3 = 13, deci n = 1001. Notând
n
mi = , avem m1 = 143, m2 = 91 şi m3 = 77. Folosind algoritmul lui Euclid, se
pi
obţine y1 = 5, y2 = 4, y3 = 12. Soluţia generală este atunci
x = 715a1 + 364a2 + 924a3 (mod 1001).
De exemplu, pentru sistemul
x ≡ 5 (mod 7), x ≡ 3 (mod 11), x ≡ 10 (mod 13)
formula de sus dă
x = 715 · 5 + 364 · 3 + 924 · 10 (mod 1001) = 13907 (mod 1001) = 894.
Verificarea se realizează reducând x modulo 7, 11 13.
18 CAPITOLUL 6. SISTEMUL DE CRIPTARE RSA
Bibliografie

[1] D. Bayer, S.Haber, W.Stornetta; Improving the efficiency and reliability of


digital time-stamping. Sequences II, Methods in Communication, Security and
Computer Science, Springer Verlag (1993), 329-334.

[2] D. Chaum, E. van Heijst, B. Pfitzmann; Cryptographically strong undeniable


signatures, unconditionally secure for the signer. Lecture Notes in Computer
Science, 576 (1992), 470-484.

[3] I.B. Damgard; A design principle for hash functions. Lecture Notes in Computer
Science, 435 (1990), 516-427.

[4] J. Gibson; Discrete logarithm hash function that is collision free and one way.
IEEE Proceedings-E, 138 (1991), 407-410.

[5] S. Haber, W. Stornetta; How to timestamp a digital document. Journal of


Cryptology, 3(1991), 99-111.

[6] R.C. Merkle; A fast software one-way functions and DES. Lecture Notes in
Computer Science, 435 (1990), 428-446

[7] Secure hash Standard. National Bureau of Standards, FIPS Publications 180,
1993

[8] B. Preneel, R. Govaerts, J. Vandewalle; Hash functions based on block ciphers:


a syntetic approach. Lecture Notes in Computer Science, 773 (1994), 368-378

[9] R.L. Rivest; The MD4 message digest algorithm. Lecture Notes in Computer
Science, 537, (1991), 303-311

[10] D. Stinton; Cryptographie, theorie et pratique, International Thompson Pub-


lishing France, 1995

[11] A. Salomaa; Criptografie cu chei publice, Ed. Militară, 1994

19
Capitolul 7

Alte sisteme de criptare cu chei


publice

7.1 Criptarea El Gamal şi logaritmul discret


Sistemul de criptare El Gamal, prezentat ı̂n 1985 (vezi [4]), se bazează pe problema
logaritmilor discreţi, care este următoarea:

Fie p număr prim şi α, β ∈ Zp , β 6= 0.


Să se determine a (0 ≤ a ≤ p − 2) astfel ca
αa ≡ β (mod p).
Acest ı̂ntreg a este unic şi se notează logα β.

La o alegere convenabilă a lui p, problema este N P - completă. Pentru siguranţă,


p se alege de minim 150 cifre iar p − 1 să aibă cel puţin un divizor prim ”mare”.
Utilitatea acestei probleme rezidă ı̂n faptul că deşi este foarte dificil de calculat un
logaritm discret, operaţia inversă - de exponenţiere - este foarte simplă (după cum
s-a văzut anterior).
Sistemul de criptare El Gamal este următorul:

Fie p număr prim pentru care problema logaritmului discret ı̂n Zp este
dificilă, şi α ∈ Zp∗ primitiv.
Fie P= Zp∗ , C= Zp∗ × Zp∗ şi
K= {(p, α, a, β)| β ≡ αa (mod p)}.
Valorile p, α, β sunt publice, a este secret.
Pentru K = (p, α, a, β) şi k ∈ Zp−1 aleator (secret) se defineşte
eK (x, k) = (y1 , y2 )
unde y1 = αk (mod p), y2 = xβ k (mod p).
Pentru y1 , y2 ∈ Zp∗ se defineşte
dK (y1 , y2 ) = y2 (y1a )−1 (mod p)

Sistemul este evident nedeterminist: criptarea depinde de x şi de o valoare aleatoare


aleasă de Alice. Există deci mai multe texte criptate corespunzătoare unui anumit
text clar.

1
2 CAPITOLUL 7. ALTE SISTEME DE CRIPTARE CU CHEI PUBLICE

Exemplul 7.1 Să alegem p = 2579, α = 2, a = 765. Prin calcul se obţine


β = 2765 mod 2579 = 949.
Să presupunem că Alice vrea să trimită mesajul x = 1299. Ea alege aleator k
(să spunem k = 853) şi calculează y1 = 2853 = 435, apoi y2 = 1299 · 949853 = 2396
(toate calculele se fac modulo 2579).
Când Bob primeşte mesajul criptat y = (435, 2396), el va determina
x = 2396 · (435765 )−1 = 1299 (mod 2579).

7.1.1 Calculul logaritmului discret


În cele de mai jos presupunem că p este număr prim, iar α este o rădăcină primi-
tivă de ordinul p. Aceste două valori fiind fixate, problema logaritmului se poate
reformula astfel:
Fiind dat un β ∈ Zp∗ , să se determine exponentul a (0 ≤ a ≤ p − 2) astfel ca
αa ≡ β (mod p).
Evident această problemă se poate rezolva printr-o căutare directă ı̂n timp O(p)
şi folosind O(1) memorie. Pe de-altă parte, dacă se calculează anterior ı̂ntr-o tabelă
toate valorile (a, αa mod p), aflarea valorii căutate se poate face ı̂n O(1), dar cu un
spaţiu O(p).
Toţi algoritmii construiţi pentru calculul logaritmilor discreţi stabilesc un com-
promis spaţiu - timp.
Algoritmul Shanks
»q ¼
Fie m = p − 1 . Se construieşte algoritmul:

1. Se construieşte lista L1 = {(j, αmj mod p)| 0 ≤ j ≤ m − 1};


2. Se construieşte lista L2 = {(i, βα−i mod p)| 0 ≤ i ≤ m − 1};
3. Se determină perechile (j, y) ∈ L1 , (i, y) ∈ L2 (identice pe a doua poziţie);
4. Se defineşte logα β = mj + i (mod p − 1)

De remarcat că prin alegerea perechilor (j, y) ∈ L1 , (i, y) ∈ L2 vom avea


αmj = y = βα−i , deci αmj+i = β.
Invers, pentru orice β putem scrie logα β = mj + i cu 0 ≤ i, j ≤ m − 1,
deci căutarea de la pasul 3 se termină totdeauna cu succes.
Implementarea acestui algoritm se poate face cu timp O(m) şi spaţiu O(m).

Exemplul 7.2 Fie p =√809 şi să determinăm log3 525. Avem deci
α = 3, β = 525, m = d 808e = 29, iar α29 mod 809 = 99.
Lista L1 a perechilor (j, 99j mod 809) 0 ≤ j ≤ 28 este:

(0, 1) (1, 99) (2, 93) (3, 308) (4, 559)


(5, 329) (6, 211) (7, 664) (8, 207) (9, 268)
(10, 644) (11, 654) (12, 26) (13, 147) (14, 800)
(15, 727) (16, 781) (17, 464) (18, 632) (19, 275)
(20, 528) (21, 496) (22, 564) (23, 15) (24, 676)
(25, 586) (26, 575) (27, 295) (28, 81)
7.1. CRIPTAREA EL GAMAL ŞI LOGARITMUL DISCRET 3

Lista L2 a cuplurilor (i, 525 · (3i )−1 mod 809), 0 ≤ i ≤ 28 este:

(0, 525) (1, 175) (2, 328) (3, 379) (4, 396)
(5, 132) (6, 44) (7, 554) (8, 724) (9, 511)
(10, 440) (11, 686) (12, 768) (13, 256) (14, 355)
(15, 388) (16, 399) (17, 133) (18, 314) (19, 644)
(20, 754) (21, 521) (22, 713) (23, 777) (24, 259)
(25, 356) (26, 658) (27, 489) (28, 163)

Parcurgând (eventual simultan) cele două liste se găseşte


(10, 644) ∈ L1 , (19, 644) ∈ L2 . Se poate scrie deci
log3 525 = 29 · 10 + 19 = 309.
Se verifică imediat că 3309 ≡ 525 mod 809.

Algoritmul Pohlig - Hellman


Să considerăm descompunerea ı̂n factori primi
k
Y ci
p−1= pi .
i=1

Dacă se pot calcula a mod pci i pentru toţi i = 1, . . . , k, atunci - folosind Teorema
chineză a resturilor - se poate determina a mod (p − 1).
Să presupunem deci că q este un număr prim astfel ca p − 1 ≡ 0 (mod q c ) şi
p − 1 6≡ 0 (mod q c+1 ). Să arătăm cum se poate calcula atunci x = a (mod q c ) pentru
orice x, (0 ≤ x ≤ q c − 1).
Să descompunem ı̂ntâi x ı̂n baza q folosind egalitatea
c−1
X
x= ai q i 0 ≤ ai ≤ q − 1, 0 ≤ i ≤ c − 1.
i=0
Atunci, se poate scrie a = x + q c s pentru un anumit număr ı̂ntreg s.
La primul pas trebuie calculat a0 . Se porneşte de la observaţia că

β (p−1)/q ≡ α(p−1)a0 /q (mod p).


c
Pentru a arăta aceasta, deoarece β (p−1)/q ≡ α(p−1)(x+q s)/q (mod p), este suficient
c
să se verifice că α(p−1)(x+q s)/q ≡ α(p−1)a0 /q (mod p).
Aceasta este adevărată dacă şi numai dacă
(p − 1)(x + q c s) (p − 1)a0
≡ (mod p − 1),
q q
relaţie verificată prin calcul: Ã !
(p − 1)(x + q c s) (p − 1)a0 p−1 c p − 1 c−1
X
i c
− = (x + q s − a0 ) = ai q + q s − a0
q q q q i=0
à ! Ãc−1 !
p − 1 c−1 X
i c
X
i−1 c−1
= ai q + q s = (p − 1) ai q + q s ≡ 0 (mod p − 1).
q i=1 i=1

Putem acum să ı̂ncepem calculul lui β (p−1)/q (mod p). Dacă β (p−1)/q ≡ 1 (mod p),
atunci a0 = 0. Altfel se calculează ı̂n Zp γ = α(p−1)/q , γ 2 , . . . până se obţine un
număr ı̂ntreg i pentru care γ i ≡ β (p−1)/q . Atunci a0 = i.
4 CAPITOLUL 7. ALTE SISTEME DE CRIPTARE CU CHEI PUBLICE

Dacă c = 1, algoritmul se termină; altfel, (c > 1), se caută valoarea lui a1 .


Pentru aceasta se defineşte
β1 = βα−a0
şi se notează x1 = logα β1 (mod q c ).
c−1
X (p−1)/q 2
Deoarece (evident) x1 = ai q i , se va obţine β1 ≡ α(p−1)a1 /q (mod p).
i=1
(p−1)/q 2
Se calculează atunci β1 (mod p)
i (p−1)/q 2
şi se caută i astfel caγ ≡ β1 (mod p).
Se ia a1 = i.
Dacă c = 2, s-a terminat; ı̂n caz contrar, se continuă c − 2 paşi pentru deter-
minarea coeficienţilor a2 , . . . , ac−1 .
Formal, algoritmul Pohlig - Hellman este următorul:

1. Se calculează γ i = α(p−1)i/q mod p, 0 ≤ i ≤ q − 1;


2. β0 ← β;
3. for j = 0 to c − 1 do
(p−1)/q j+1
4. δ ← βj mod p;
5. Se caută i astfel ca δ = γ i ;
6. aj ← i;
j
7. βj+1 ← βj α−aj q mod p.

Aici, α este o rădăcină primitivă modulo p, iar q este număr prim,


p − 1 ≡ 0 (mod q c ), p − 1 6≡ 0 (mod q c+1 ).
c−1
X
Algoritmul calculează a0 , a1 , . . . , ac−1 unde logα β (mod q c ) = ai q i .
i=0

Exemplul 7.3 Fie p = 29. Avem n = p − 1 = 28 = 22 71 .


Să alegem α = 2, β = 18 şi ne punem problema determinării lui a = log2 18.
Pentru aceasta se va calcula a mod 4 şi a mod 7.
Să ı̂ncepem cu q = 2, c = 2. Avem (toate calculele se efectuează modulo 29):
γ 0 = 1, γ 1 = α28/2 = 214 = 28, deci δ = β 28/2 = 1814 = 28, de unde rezultă
a0 = 1.
28/4
β1 = β0 α−1 = 9, β1 = 97 = 28. Cum γ1 = 28, rezultă a1 = 1. Avem deci
a ≡ 3 (mod 4).
Să considerăm acum q = 7, c = 1. Vom avea (modulo 29):
β 28/7 = 184 = 25, γ 1 = α28/7 = 24 = 16, apoi γ 2 = 24, γ 3 7, γ 4 = 25, deci
a0 = 4 şi a ≡ 4 (mod 7).
Se obţine sistemul a ≡ 3 (mod 4), a ≡ 4 (mod 7), de unde – folosind teorema
chineză a resturilor – a ≡ 11 (mod 28). Deci, log2 18 = 11 ı̂n Z29 .

Metoda de calcul a indicelui


Această metodă seamănă cu unul din cei mai buni algoritmi de descompunere ı̂n
factori. Vom da doar o descriere informală a acestui algoritm.
Se foloseşte o bază de divizori B compusă din B numere prime ”mici”. Prima
etapă constă ı̂n aflarea logaritmilor elementelor din baza B. În a doua etapă, folosind
aceşti logaritmi, se va determina logaritmul discret al lui β.
7.1. CRIPTAREA EL GAMAL ŞI LOGARITMUL DISCRET 5

I: Se construiesc C = B + 10 congruenţe modulo p de forma


a a a
αxj ≡ p1ij p22j . . . pBBj (mod p) 1 ≤ j ≤ C
Cu aceste C ecuaţii de necunoscute logα pi (1 ≤ i ≤ B) se ı̂ncearcă aflarea unei
soluţii unice modulo (p − 1). În caz de reuşită, primul pas este ı̂ncheiat.
Problema ar fi cum să se găsească aceste C congruenţe. O metodă elementară
constă din trei paşi: alegerea aleatoare a unui x, calculul lui αx mod p şi verificarea
dacă acest număr are toţi divizorii ı̂n B.
II: Acum se poate determina logα β cu un algoritm Las Vegas. Se alege aleator
un s (1 ≤ s ≤ p − 2) şi se determină γ = βαs (mod p).
Se ı̂ncearcă apoi descompunerea lui γ ı̂n baza B. Dacă acest lucru este posibil,
se obţine o relaţie de forma βαs ≡ pc11 pc22 . . . pcBB (mod p), care poate fi transformată
ı̂n
logα β + s ≡ c1 logα p1 + . . . + cB logα pB (mod p − 1).
De aici - prin calcularea membrului drept, se poate determina logα β.
Exemplul 7.4 Fie p = 100007 şi α = 5 (element primitiv). Să considerăm
B= {2, 3, 5, 7} ca bază de divizori. Cum - evident - log5 5 = 1, trebuiesc determinaţi
doar trei logaritmi de bază.
Trei numere aleatoare ”norocoase” pot fi 4063, 5136, 9865.
Pentru x = 4063 calculăm 54063 mod 10007 = 42 = 2 · 3 · 7, care conduce la
congruenţa
log5 2 + log5 3 + log5 7 ≡ 4063 (mod 10006).
În mod similar se obţin 55136 mod 10007 = 54 = 2 · 33 , 59865 mod 10007 =
189 = 33 · 7.
Ele dau relaţiile
log5 2 + 3log5 3 ≡ 5136 (mod 10006,
3log5 3 + log5 7 ≡ 9865 (mod 10006).
Rezolvarea acestui sistem de trei ecuaţii ı̂n Z10006 conduce la soluţia unică
log5 2 = 6578, log5 3 = 6190, log5 7 = 1301.
Să presupunem acum că se caută log5 9451. Dacă se obţine aleator numărul
s = 7736, avem 9451 · 57736 mod 10007 = 8400 = 24 31 52 71 .
Cum acesta se poate factoriza ı̂n B, avem
log5 9451 = 4log5 2 + log5 3 + 2log5 5 + log5 7 − s = 4 · 6578 + 6190 + 2 · 1 + 1301 − 7736 =
6057, calculele fiind realizate modulo 10006.
Se verifică uşor că 56057 ≡ 9451 (mod 10007).

7.1.2 Generalizarea sistemului de criptare El Gamal


Sistemul de criptare El Gamal se poate construi pe orice grup (ı̂n loc de Zn∗ ) ı̂n care
problema logaritmului (definită corespunzător) este dificilă.
Fie (G, ◦) un grup finit. Problema logaritmului discret se defineşte ı̂n G astfel:
Fie α ∈ G şi H = {αi |i ≥ 0} subgrupul generat de α. Dacă
β ∈ H, să se determine un a (unic) 0 ≤ a ≤ |H|−1 cu αa = β,
unde αa = α | ◦ α ◦{z. . . ◦ α}
a ori
6 CAPITOLUL 7. ALTE SISTEME DE CRIPTARE CU CHEI PUBLICE

Definirea sistemului de criptare El Gamal ı̂n subgrupul H ı̂n loc de Zn∗ este uşor de
realizat; anume:

Fie (G, ◦) un grup şi α ∈ G pentru care problema logaritmului ı̂n


H = {αi |i ≥ 0} este dificilă.
Fie P= G, C= G × G şi K= {(G, α, a, β)|β = αa }.
Valorile α, β sunt publice iar a este secret.
Pentru K = (G, α, a, β) şi un k ∈ Z|H| aleator (secret), se defineşte
eK (x, k) = (y1 , y2 ) unde y1 = αk , y2 = x ◦ β k .
Pentru y = (y1 , y2 ), decriptarea este dK (y) = y2 ◦ (y1a )−1 .

De remarcat că pentru criptare/decriptare nu este necesară cunoaşterea ordinului


|H| de mărime al subgrupului; Alice poate alege aleator un k, (0 ≤ k ≤ |G| − 1) cu
care cele două procese funcţionează fără probleme.
Se poate observa de asemenea că G nu este neapărat abelian (H ı̂n schimb este,
fiind ciclic).
Să studiem acum problema logaritmului discret ”generalizat”. Deoarece H este
subgrup ciclic, orice versiune a problemei este echivalentă cu problema logaritmului
discret ı̂ntr-un grup ciclic. În schimb, se pare că dificultatea problemei depinde mult
de reprezentarea grupului utilizat.
Astfel ı̂n grupul aditiv Zn , problema este simplă; aici exponenţierea αa este de
fapt ı̂nmulţirea cu a modulo n. Deci, problema logaritmului discret se constă ı̂n
aflarea unui număr ı̂ntreg a astfel ca
aα ≡ β (mod n).
Dacă se alege α astfel ca (α, n) = 1 (α este generator al grupului), α are un invers
multiplicativ modulo n, care se determină uşor cu algoritmul lui Euclid. Atunci,
a = logα β = βα−1 (mod n).
Să vedem cum se reprezintă problema logaritmului discret ı̂n grupul multiplicativ
Zp∗ cu p prim. Acest grup este ciclic de ordin p − 1, deci izomorf cu grupul aditiv
Zp−1 . Deoarece problema logaritmului discret ı̂n grupul aditiv se poate rezolva uşor,
apare ı̂ntrebarea dacă se poate rezolva această problemă ı̂n Zp∗ reducând-o la Zp−1 .
Ştim că există un izomorfism φ : Zp∗ → Zp−1 , deci pentru care
φ(xy mod p) = (φ(x) + φ(y)) (mod p − 1)
a
În particular, φ(α mod p) = aφ(α) (mod p − 1), adică
β ≡ αa (mod p) ⇐⇒ aφ(a) ≡ φ(β) (mod p − 1).
Acum, căutarea lui a se realizează cu logα β = φ(β)(φ(α))−1 (mod p − 1).
Deci, dacă se găseşte o metodă eficace pentru calculul izomorfismului φ, se obţine
un algoritm eficace pentru calculul logaritmului discret ı̂n Zp∗ . Problema este că nu
se cunoaşte nici o metodă generală de construcţie a lui φ pentru un număr prim p
oarecare. Deşi se ştie că cele două grupuri sunt izomorfe, nu există ı̂ncă un algoritm
eficace pentru construcţia explicită a unui izomorfism.
Această metodă se poate aplica problemei logaritmului discret ı̂ntr-un grup finit
arbitrar.
7.2. CRIPTAREA FOLOSIND CURBE ELIPTICE 7

7.2 Criptarea folosind curbe eliptice


Pentru ı̂nceput, să definim noţiunea de curbă eliptică.
Definiţia 7.1 Fie p (p > 3) un număr prim. Curba eliptică y 2 = x3 + ax + b peste
Zp este mulţimea soluţiilor (x, y) ∈ Zp × Zp ale ecuaţiei
y 2 ≡ x3 + ax + b (mod p) (1)
3 2
unde a, b ∈ Zp sunt constante astfel ca 4a + 27b 6≡ 0 (mod p)
şi dintr-un punct O numit ”punct la infinit”.
O curbă eliptică E se poate structura ca un grup abelian finit. Legea de compoziţie
(notată aditiv) este definită astfel:
Fie P, Q ∈ E, P = (x1 , y1 ), Q = (x2 , y2 ).
Dacă x2 = x1 , y2 = −y1 , atunci P + Q = O; altfel, P + Q = (x3 , y3 ) unde
x3 = λ2 − x 1 − x2 , y3 = λ(x1 − x3 ) − y1 , iar
 y2 −y1 dacă P 6= Q
λ =  x3x2 −x 1
2 +a
1
2y1
dacă P = Q
Se mai defineşte P + O= O+P = P, ∀P ∈ E.
Verificarea proprietăţilor de grup este banală. Elementul neutru este O.
De remarcat că inversa lui (x, y) (notată −(x, y)) este (x, −y).
Exemplul 7.5 Fie E curba eliptică y 2 = x3 +x+6 peste Z11 . Să calculăm la ı̂nceput
punctele lui E. Aceasta se face astfel: ∀x ∈ Z11 se calculează z = x3 +x+6 (mod 11);
apoi se testează dacă z este rest pătratic.
În caz afirmativ, deoarece 11 ≡ 3 (mod 4), există o formulă (Capitolul 6) pe care
o vom aplica direct, obţinând rădăcinile pătrate ale lui z :
± z (11+1)/4 mod 11 = ±z 3 mod 11.
Rezultatele sunt strânse ı̂n tabelul următor.
x x3 + x + 6 y x x3 + x + 6 y
0 6 − 6 8 −
1 8 − 7 4 2, 9
2 5 4, 7 8 9 3, 8
3 3 5, 6 9 7 −
4 8 − 10 4 2, 9
5 4 2, 9
E admite deci 13 puncte; cum ordinul grupului este număr prim, grupul este ciclic,
deci izomorf cu Z13 ; orice element diferit de O este generator al grupului. Să luăm
ca generator pe α = (2, 7). Calculăm ”puterile” lui α (de fapt multiplii, grupul fiind
aditiv). Pentru 2α se calculează ı̂ntâi (modulo 11):
λ = (3 · 22 + 1)(2 · 7)−1 = 2 · 3−1 = 2 · 4 = 8.
Acum se pot determina x3 = 82 − 2 − 2 = 5, y3 = 8 · (2 − 5) − 7 = 2,
deci 2α = (5, 2).
Multiplul următor este 3α = 2α + α = (5, 2) + (2, 7). Avem:
λ = (7 − 2) · (2 − 5)−1 = 5 · 8−1 = 5 · 7 = 2, deci
x3 = 22 − 5 − 2 = 8, y3 = 2 · (5 − 8) − 2 = 3, de unde rezultă 3α = (8, 3).
În mod similar se obţin toate elementele lui E:
8 CAPITOLUL 7. ALTE SISTEME DE CRIPTARE CU CHEI PUBLICE
α = (2, 7) 2α = (5, 2) 3α = (8, 3)
4α = (10, 2) 5α = (3, 6) 6α = (7, 9)
7α = (7, 2) 8α = (3, 5) 9α = (10, 9)
10α = (8, 8) 11α = (5, 9) 12α = (2, 4)

O curbă eliptică definită pe Zp (p > 3 prim) are aproximativ p puncte. O teoremă


a lui Hasse stabileşte un interval pentru acest număr:
√ √
p + 1 − 2 p ≤ |E| ≤ p + 1 + 2 p.
Calculul efectiv al lui |E| este destul de dificil şi vom trece peste el; se pare că
există un algoritm al lui Schoof, de complexitate O((log p)8 ) care lucrează pe biţi şi
este construit pentru numere prime p cu sute de cifre.
A doua problemă constă ı̂n aflarea unui subgrup ciclic al lui E ı̂n care problema
logaritmului discret este dificilă. O informaţie utilă este dată de teorema următoare
(prezentată de asemenea fără demonstraţie):

Teorema 7.1 Fie E o curbă eliptică peste Zp cu p > 3 număr prim. Atunci există
două numere ı̂ntregi n1 , n2 astfel ca E să fie izomorfă cu Zn1 × Zn2 , iar
n2 |n1 , n2 |(p − 1).

Pe spaţiul curbelor eliptice se pot realiza diverse tehnici de criptare cu cheie


publică; unele din ele sunt chiar adaptări ale sistemelor deja prezentate.

Exemplul 7.6 Să vedem cum se realizează o criptare El Gamal pentru curba elip-
tică definită ı̂n Exemplul 7.5.
Fie α = (2, 7) şi să presupunem că exponentul secret este a = 7. Atunci
β = 7α = (7, 2), iar operaţia de criptare este:
eK (x, k) = (k · (2, 7), x + k · (7, 2)), unde x ∈ E, 0 ≤ k ≤ 12.
Pentru decriptare se foloseşte operaţia
dK (y1 , y2 ) = y2 − 7y1 .
Să presupunem că Alice vrea să cripteze mesajul x = (10, 9) (care este un punct
din E); dacă ea alege aleator valoarea k = 3, va calcula
y1 = 3 · (2, 7) = (8, 3), şi
y1 = (10, 9) + 3 · (7, 2) = (10, 9) + (3, 5) = 9α + 3 · 7α = 9α + 8α = 4α = (10, 2)
(coeficienţii se calculează modulo 13).
Deci y = ((8, 3), (10, 2)). După recepţie, Bob decriptează mesajul astfel:
x = (10, 2) − 7 · (8, 3) = (10, 2) − (3, 5) = (10, 2) + (3, 6) = (10, 9).

7.2.1 Criptarea Menezes - Vanstone


În acest sistem de criptare - de fapt o variantă a lui El Gamal - curba eliptică este
utilizată pentru ”mascare”, textele clare şi cele criptate putând fi formate din orice
elemente nenule (nu neapărat puncte din E). Prezentarea algoritmului este:
7.3. SISTEMUL DE CRIPTARE WILLIAMS 9

Fie E o curbă eliptică peste Zp (p > 3 prim) care conţine un subgrup ciclic H
ı̂n care problema logaritmului discret este dificilă.
Alegem P= Zp∗ × Zp∗ , C= E × Zp∗ × Zp∗ şi
K= {(E, α, a, β)|α ∈ E, β = aα}.
Valorile α, β sunt publice, iar a este secret.
Pentru K = (E, α, a, β), k ∈ Z|H| ales aleator (secret) şi x = (x1 , x2 ) ∈ P,
definim
eK (x, k) = (y0 , y1 , y2 ), unde
y0 = kα, (c1 , c2 ) = kβ, yi = ci xi (mod p), i = 1, 2.
Pentru un text criptat y = (y0 , y1 , y2 ) se defineşte
dK (y) = (y1 c−1 −1
1 mod p, y2 c2 mod p), unde ay0 = (c1 , c2 ).

Exemplul 7.7 Revenind la curba y 2 = x3 + x + 6 peste Z11 definită ı̂n Exemplul


7.5, criptarea Menezes - Vanstone autorizează 10 × 10 = 100 texte clare, faţă de 13
ı̂n sistemul original.
Să luăm din nou α = (2, 7) şi exponentul a = 7. Atunci β = 7α = (7, 2).
Dacă Alice doreşte să transmită textul clar x = (x1 , x2 ) = (9, 1) (de remarcat
că acesta nu este un punct din E) şi alege k = 6, ea va ı̂ncepe prin a calcula
y0 = kα = 6(2, 7) = (7, 9) şi kβ = 6(7, 2) = (8, 3), deci c1 = 8, c2 = 3.
Apoi se calculează (modulo 11):
y1 = c1 x1 = 8 · 9 = 6 şi y2 = c2 x2 = 3 · 1 = 3.
Ea trimite deci lui Bob mesajul criptat y = (y0 , y1 , y2 ) = ((7, 9), 6, 3).
După recepţie, Bob calculează (c1 , c2 ) = ay0 = 7 · (7, 9) = (8, 3), apoi
x = (y1 c−1 −1 −1 −1
1 , y2 c2 ) = (6 · 8 , 3 · 3 ) = (6 · 7, 3 · 4) = (9, 1).

7.3 Sistemul de criptare Williams


Acest sistem de criptare este bazat pe exponenţieri ı̂n corpuri pătratice, având multe
asemănări cu sistemele RSA şi El Gamal. Se pare că el are toate avantajele sistemului
RSA; oricum, se poate demonstra că orice ı̂ncercare de spargere a sistemului prin
prelucrarea mesajelor criptate conduce la o operaţie de factorizare a modulului.
Modul de criptare şi decriptare sunt la fel de rapide ca la RSA.
Să prezentăm ı̂ntâi baza matematică a sistemului de criptare Williams.
Fie c ∈ Z un număr ı̂ntreg fixat, ne-pătrat perfect. Considerăm mulţimea

{x = a + b c|a, b ∈ Z, a2 − cb2 = 1}.
Numerele x pot fi privite şi ca perechi (a, b), pe baza cărora mulţimea de sus se
poate structura algebric folosind operaţiile
(a1 , b1 ) + (a2 , b2 ) = (a1 + a2 , b1 + b2 )
(a1 , b1 )(a2 , b2 ) = (a1 a2 + cb1 b2 , a1 b2 + a2 b1 ).

Notăm x = a − b c conjugatul lui x.
Pentru i = 0, 1, 2, . . . se definesc funcţiile Xi (x), Yi (x) astfel:
xi + xi
Xi (x) = Xi ((a, b)) =
2
xi − xi x i − xi
Yi (x) = Yi ((a, b)) = b = √
x−x 2 c
10 CAPITOLUL 7. ALTE SISTEME DE CRIPTARE CU CHEI PUBLICE

De aici se pot scoate relaţiile


√ √
xi = Xi (x) + Yi (x) c, xi = Xi (x) − Yi (x) c.

Evident, Xi (x) şi Yi (x) sunt numere ı̂ntregi; ı̂n continuare vom scrie aceste numere
fără mai preciza şi argumentul x, decât dacă este necesar.
Din condiţia a2 − cb2 = 1 rezultă xx = 1, Xi2 − cYi2 = 1.

Lema 7.1 Au loc relaţiile:


Xi+j = Xi Xj + cYi Yj , Yi+j = Yi Xj + Xi Yj , ∀i, j ∈ N
Xi+j = 2Xi Xj − Xj−i , Yi+j = 2Xi Yj − Yj−i , ∀i, j, i ≤ j.

Demonstraţie: Este lăsată ca exerciţiu.


Din relaţiile de mai sus se deduc formulele recursive de calcul
X2i = Xi2 + cYi2 = 2Xi2 − 1, Y2i = 2Xi Yi ,
X2i+1 = 2Xi Xi+1 − X1 , Y2i+1 = 2Xi Yi+1 − Y1 .
Acestea conduc la o evaluare rapidă pentru Xi şi Yi .
Deoarece X0 = 1, X1 = a, rezultă că Xi nu depinde de b.
Relaţiile astfel definite se pot extinde ı̂n mod natural la congruenţe modulo un
număr natural nenul n:
√ √
a1 + b1 c ≡ a2 + b2 c ⇐⇒ a1 ≡ a2 (mod n) şi b1 ≡ b2 (mod n).
Folosind şi a2 − cb2 ≡ 1 (mod n) ı̂n loc de a2 − cb2 = 1, relaţiile de sus rămân
adevărate.

Lema 7.2 Se dau numerele:


n = pq cu p, q numere prime mari;
2 2
a, b, c care verifică congruenţa
³ ´a − cb ≡³ 1´(mod n) (2)
c c
Simbolurile Legendre ²p = p , ²q = q care verifică relaţiile
²i ≡ −i (mod 4) pentru i = p, q. ³ ´
Presupunem verificate condiţiile (bc, n) = 1 şi simbolul Jacobi 2(a+1)
n
= 1.
(p − ²p )(q − ²q )
Notăm m = .
4
m+1
Fie d, e două numere astfel ı̂ncât de ≡ (mod m).
2 √
În toate aceste ipoteze, x2de ≡ ±x (mod n) unde x = a + b c.

Demonstraţie: Se realizează prin calcul direct.


Pe baza acestei leme se pot stabili procedee de criptare şi decriptare similare cu
cele din RSA.
Să construim acum ı̂n detaliu sistemul de criptare Williams. Prezentarea va
consta din patru părţi: descrierea sistemului, criptarea, decriptarea şi criptanaliza.
A (Prezentarea): În prima fază se aleg două numere prime mari p, q şi se cal-
culează n = pq.
Se alege apoi un număr c astfel ca simbolurile Legendre ²p şi ²q să verifice
condiţiile din Lema 7.2 (c se poate obţine foarte rapid deoarece cam un număr
din patru satisface congruenţele cerute).
7.3. SISTEMUL DE CRIPTARE WILLIAMS 11

Se determină apoi
à un !
număr s astfel ı̂ncât simbolul Jacobi să verifice
s2 − c
= −1 şi (s, n) = 1.
n
m este dat ca ı̂n Lema 7.2; se aleg apoi d cu (d, m) = 1 şi e care să satisfacă
congruenţele cerute.
Numerele n, c, e, s sunt publice iar p, q, m, d sunt secrete.
Exemplul
µ ¶ 7.8 Să alegem
µ ¶ p = 11, q = 13, deci n = 143. Pentru că
5 5
= 1 ≡ −11 şi = −1 ≡ −13 (ambele modulo 4), putem alege c = 5.
11 13 à ! µ ¶µ ¶
s2 − c −1 −1
De asemenea se poate lua s = 2 pentru că = = −1 · 1 = −1.
n 11 13
Se obţine m = 10 · 14/4 = 35. Pentru că 23 · 16 ≡ 18 (mod 35), se pot folosi
drept exponenţi de criptare/decriptare e = 23 respectiv d = 16.
B (Criptarea): Textele clare sunt numere w (0 < w < n). În prima etapă w este
codificat ca un număr x (metoda este prezentată mai jos); criptarea va fi xe (mod n).
Codificarea: Notăm √
b1 = 0, γ = w + √c sau

b1 = 1,Ã γ = (w ! + c)(s + c)
2
w −c
după cum simbolul Jacobi are valoarea +1 sau respectiv −1. Cazul
n
când el este 0 trebuie evitat. µ ¶
γγ
Ambele variante conduc la = 1; relaţia este evidentă ı̂n primul caz, rezultă
n
prin calcul din alegerea lui s ı̂n cazul al doilea.
γ
În final, se notează x = .
γ √
Scrierea lui x sub forma a + b c este posibilă ı̂n ambele cazuri; astfel (toate
calculele se fac modulo n): √
γ w+ c w2 + c 2w √
pentru b1 = 0 : x = = √ = 2 + 2 c (mod n)
γ w − √c w √ −c w −c
γ (w + c)(s + c)
pentru b1 = 1 : x = = √ √ =
γ (w − c)(s − c)
(w2 + c)(s2 + c) + 4scw 2s(w2 + c) + 2w(s2 + c) √
= + c (mod n).
(w2 − c)(s2 − c) (w2 − c)(s2 − c)
Definiţia lui x asigură ı̂n ambele situaţii relaţia xx = a2 − cb2 ≡ 1 (mod n).
µ ¶
x+x γ γ (γ + γ)2
Mai avem 2(a + 1) = 2 +1 = + +2= (mod n),
2 Ã γ !γ γγ
2(a + 1)
ceea ce duce la simbolul Jacobi = 1, cum se cere ı̂n Lema 7.2.
n

După codificarea textului clar w ca x = a + b c, textul criptat este xe (mod n),
număr care poate fi exprimat ı̂n funcţie de Xe şi Ye , calculate recursiv pe baza
relaţiilor din Lema 7.1. Notăm
E = Xe Ye−1 (mod n).
Textul criptat este tripletul (E, b1 , b2 ), unde b1 s-a definit anterior, iar b2 este dat de
relaţia b2 ≡ a (mod 2).
12 CAPITOLUL 7. ALTE SISTEME DE CRIPTARE CU CHEI PUBLICE

Deoarece fiecărui text criptat ı̂i corespund patru texte clare distincte, biţii b1 şi
b2 asigură unicitatea decriptării.

Exemplul
à 7.9
! Revenind la Exemplul 7.8, să considerăm textul clar w = 21. Deoa-
µ ¶µ ¶ √
212 − 5 7 7
rece = = (−1)(−1) = 1, avem b1 = 0, deci γ = 21 + 5 şi
143
√ 11 √13 √
21 + 5 446 + 42 5 17 + 42 5 √ √
x= √ = = = 41(17+42 5) = 125+6 5 (mod 143).
21 − 5 436 7
Deci a = 125, b = 6. Deoarece a este impar, rezultă b2 = 1.
Vom calcula recursiv pe X23 şi Y23 :

X1 = 125 Y1 = 6 X2 = 75 Y2 = 70 X3 = 35 Y3 = 48
X5 = 120 Y5 = 44 X6 = 18 Y6 = 71 X11 = 48 Y11 = 17
X12 = 75 Y12 = 125 X23 = 68 Y23 = 125

Obţinem acum E = 68 · 125−1 = 68 · 135 = 28 (mod 143).


Deci textul criptat este tripletul (28, 0, 1).

C Decriptarea: Folosind prima componentă E a textului criptat, destinatarul poate


determina numărul x2e : √ √
2e x2e xe Xe + Ye c E+ c E2 + c 2E √
x = = = √ = √ = + c (mod n).
(xx)e xe X e − Ye c E− c E2 − c E2 − c
De remarcat că acest calcul poate fi făcut şi de un criptanalist, ı̂n eventualitatea
interceptării textului criptat.
Totuşi, informaţia secretă este necesară pentru calculul ulterior:
√ √
x2ed = X2ed (x) + Y2ed (x) c = Xd (x2e ) + Yd (x2e ) c,
unde valorile lui Xd şi Yd se pot calcula recursiv pe baza lui x2e , determinat
anterior.
Cum toate ipotezele Lemei 7.2 sunt satisfăcute, vom avea x2ed = ±x (mod n).
Ultima componentă b2 a textului criptat dă semnul corect al lui x.
Deci x se poate determina, iar textul clar w se obţine din x şi b1 (a doua com-
ponentă a textului criptat) ı̂n felul următor:
(
0
x √ dacă b1 = 0
Fie x = s−√c
x s+ c dacă b1 = 1

0 w+ c x0 + 1 √
Atunci x = √ (mod n), ceea ce duce la w = 0 c (mod n).
w− c x −1

Exemplul 7.10 În condiţiile din Exemplul 7.8, să decriptăm mesajul (28, 0, 1).
Folosim E pentru a calcula ı̂n prima√fază √
2 +5
x2e = 28
282 −5
+ 282·28
2 −5 5 = 95 + 12 5 (mod 143).
Reamintim, d = 16; deci vom calcula (modulo 143)

X1 (x2e ) = 95 Y1 (x2e ) = 126 X2 (x2e ) = 31 Y2 (x2e ) = 59


X4 (x2e ) = 62 Y4 (x2e ) = 83 X8 (x2e ) = 108 Y8 (x2e ) = 139
X16 (x2e ) = 18 Y16 (x2e ) = 137
7.4. EXERCIŢII 13


S-a obţinut 18 + 137√ 5 = ±x (mod√143). Pentru că b2 = 1, a trebuie să fie impar,
deci x = −(18 + 137 5) = 125 + 6 5 (mod 143).
Cum b1 = 0,√avem x0 = x şi deci√ √
126 + 6 5 √ (126 + 6 5)(124 − 6 5) √
w= √ 5= 2 2
5 = 83 · 38−1 = 21 (mod 143).
124 + 6 5 124 − 5 · 6
Deci textul clar original a fost w = 21.

Lucrând detaliat, se pare că sistemul de criptare Williams este mai dificil decât RSA.
Totuşi ordinul de complexitate al criptării şi decriptării sunt egale.
D Criptanaliza: Dacă s-au aflat p şi q, m şi d se pot calcula imediat. Invers, să
presupunem că criptanalistul a găsit ı̂ntr-un mod oarecare un algoritm de decriptare.
Atunci el poate folosi acest algoritm la descompunerea lui n astfel. Ã !
x2 − c
În prima fază se alege prin ı̂ncercări un număr x care verifică = −1.
√ n
Apoi x este criptat alegând b1 = 0 şi γ = x + c. Deci, ca primă ipoteză,
pentru simbolul Jacobi este folosită valoarea (falsă) +1. Fie (E, 0, b2 ) textul criptat
rezultat. Acestuia, criptanalistul ı̂i aplică algoritmul pentru a stabili textul clar w
corespunzător; acest w nu este identic cu x deoarece procesul de criptare a plecat de
la o ipoteză falsă. Prin simplu calcul se arată că (x − w, n) este p sau q (vezi [13])
Aceasta ı̂nseamnă că şi criptanalistul este ı̂n măsură să descompună pe n.
Exemplul 7.11 Reluăm cadrul descris ı̂n Exemplul 7.8. Alegem x = 138, care
satisface condiţia de
√ plecare pentru criptanaliză. Se
√ iau ca valori iniţiale false
b1 = 0, γ = 138 + 5. Atunci α = γ/γ = 73 + 71 5.
Deoarece 73 este impar, se obţine b2 = 1. Pentru criptare se calculează iterativ
(modulo 143):
X1 (α) = 73 Y1 (α) = 71 X2 (α) = 75 Y2 (α) = 70
X3 (α) = 9 Y3 (α) = 139 X5 (α) = 133 Y5 (α) = 44
X6 (α) = 18 Y6 (α) = 71 X11 (α) = 139 Y11 (α) = 82
X12 (α) = 75 Y12 (α) = 125 X23 (α) = 42 Y23 (α) = 73
Deducem că E = 42 · 73−1 = 28 (mod 143), deci textul criptat este (28, 0, 1).
Acesta a fost ı̂nsă criptat anterior ı̂n w = 21. Se obţine imediat factorizarea lui
n deoarece (x − w, n) = (117, 143) = 13.
Deci, dacă la criptanaliză se poate dispune de un eşantion de criptotext ales, atunci
sistemul poate fi spart fără dificultate.

7.4 Exerciţii
7.1 Implementaţi algoritmul lui Shanks pentru calculul logaritmului discret ı̂n Zp
unde p este număr prim, iar α este o rădăcină primitivă. Utilizaţi programul pentru
a calcula log106 12375 ı̂n Z24691 şi log6 248388 ı̂n Z458009 .

7.2 Implementaţi algoritmul Pohlig - Hellman pentru calculul logaritmului discret


ı̂n Zp cu p număr prim, iar α este o rădăcină primitivă. Utilizaţi programul pentru
a calcula log5 8563 ı̂n Z28703 şi log10 12611 ı̂n Z31153 .
14 CAPITOLUL 7. ALTE SISTEME DE CRIPTARE CU CHEI PUBLICE

7.3 Dăm un exemplu de implementare a sistemului de criptare El Gamal ı̂n extensia


Galois GF (33 ). Polinomul X 3 + 2X 2 + 1 este ireductibil ı̂n Z3 [X], deci el poate fi
utilizat ca generator al corpului GF (33 ). Se asociază cele 26 litere ale alfabetului
elementelor nenule din acest corp, deci o codificare normală. Se utilizează ordonarea
lexicografică a polinoamelor nenule, obţinându-se:
A − 1 B − 2 C − X
D − X +1 E − X +2 F − 2X
G − 2X + 1 H − 2X + 2 I − X2
J − X2 + 1 K − X2 + 2 L − X2 + X
M − X2 + X1 N − X2 + X2 O − X 2 + 2X
P − X 2 + 2X + 1 Q − X 2 + 2X + 2 R − 2X 2
S − 2X 2 + 1 T − 2X 2 + 2 U − 2X 2 + X
V − 2X 2 + X + 1 W − 2X 2 + X + 2 X − 2X 2 + 2X
Y − 2X 2 + 2X Z − 2X 2 + 2X + 2

Să presupunem că Alice utilizează α = X şi k = 11 ı̂n sistemul de criptare El Gamal;
se obţine β = X + 2. Ce va obţine Bob după decriptarea mesajului:
(K, H)(P, X)(N, K)(H, R)(T, F )(V, Y )(E, H)(F, A)(T, W )(J, D)(U, J)

7.4 Fie E curba eliptică y 2 = x3 + x + 28 peste Z71 .

1. Determinaţi numărul de puncte din E;

2. Arătaţi că E nu este ciclic;

3. Care este ordinul maxim al unui element din E ? Găsiţi un astfel de element.

7.5 Fie E curba eliptică y 2 = x3 +x+13 definită pe Z31 . Se poate arăta că |E| = 34
şi că (9, 10) este de ordinul 34 ı̂n E. Sistemul de criptare Mezenes - Vanstome definit
∗ ∗
pe E admite ca spaţiu al textelor clare Z34 × Z34 . Fie a = 25 exponentul secret al
lui Bob.

1. Calculaţi β = aα;

2. Decriptaţi textul următor:


((4, 9), 28, 7)((19, 28), 9, 13)((5, 22), 20, 17)((25, 16), 12, 27).

3. Dacă presupunem că fiecare text clar reprezintă două caractere alfabetice, con-
vertiţi acest text clar ı̂n engleză (s-a folosit corespondenţa A − 1, . . . , Z − 26).

7.6 Demonstraţi Lemele 7.1 şi 7.2.


Bibliografie

[1] D. Bayer, S.Haber, W.Stornetta; Improving the efficiency and reliability of


digital time-stamping. Sequences II, Methods in Communication, Security and
Computer Science, Springer Verlag (1993), 329-334.

[2] D. Chaum, E. van Heijst, B. Pfitzmann; Cryptographically strong undeniable


signatures, unconditionally secure for the signer. Lecture Notes in Computer
Science, 576 (1992), 470-484.

[3] I.B. Damgard; A design principle for hash functions. Lecture Notes in Computer
Science, 435 (1990), 516-427.

[4] T. ElGamal; A public key cryptosystem and a signature scheme based on dis-
crete algorithms, IEEE Transactions on Information Theory, 31 (1985), 469-472

[5] J. Gibson; Discrete logarithm hash function that is collision free and one way.
IEEE Proceedings-E, 138 (1991), 407-410.

[6] S. Haber, W. Stornetta; How to timestamp a digital document. Journal of


Cryptology, 3(1991), 99-111.

[7] R.C. Merkle; A fast software one-way functions and DES. Lecture Notes in
Computer Science, 435 (1990), 428-446

[8] Secure hash Standard. National Bureau of Standards, FIPS Publications 180,
1993

[9] B. Preneel, R. Govaerts, J. Vandewalle; Hash functions based on block ciphers:


a syntetic approach. Lecture Notes in Computer Science, 773 (1994), 368-378

[10] R.L. Rivest; The MD4 message digest algorithm. Lecture Notes in Computer
Science, 537, (1991), 303-311

[11] D. Stinton; Cryptographie, theorie et pratique, International Thompson Pub-


lishing France, 1995

[12] A. Salomaa - Criptografie cu chei publice, ed. Militara, 1994

[13] H.C.Williams, Some public-key criptofunctions as intractable as factorisation,


Cryptologia, 9 (1985), 224-237.

15
Capitolul 8

Protocoale de semnătură

8.1 Consideraţii generale


Vom lua ı̂n discuţie ı̂n această secţiune noţiunea de semnătură electronică (ı̂ntr-un
mediu de calcul) precum şi diverse modalităţi de utilizare ale ei.
Orice semnătură pe un document autentifică acest document dar şi angajează ı̂n
mod normal responsabilitatea semnatarului. Probleme practice legate de rapiditatea
transmiterii unor documente care să fie certificate ca autentice prin semnătură au
condus la necesitatea creerii de semnături electronice.
De exemplu, se ştie că majoritatea operaţiunilor şi tranzacţiilor bancare devin le-
gal valide numai după ce ambele părţi au semnat formularele respective. Totuşi, dacă
părţile sunt legate ı̂ntr-o reţea de calculatoare, ele vor adesea să faciliteze această
operaţie care provoacă un mare consum de timp; solicită de aceea posibilitatea de a
semna documentele folosind terminalele şi reţeaua aflată la dispoziţie.
Deci, apare următoarea problemă:

Cum se poate crea o semnătură ı̂ntr-un mediu de calcul ?

Deoarece calculatoarele acceptă informaţia numai ı̂n formă digitală, orice semnătură
pusă ı̂n discuţie trebuie să aibă această formă. O semnătură (electronică sau olo-
grafă) trebuie să satisfacă următoarele condiţii:

• Unică: o anumită semnătură trebuie să poată fi generată numai de o singură


persoană;

• Neimitabilă: nici o altă persoană nu va putea genera semnătura utilizatoru-


lui indicat; altfel spus, utilizatorii ilegali trebuie să rezolve probleme N P −
complete dacă vor să folosească o semnătură care nu le aparţine;

• Uşor de autentificat: orice destinatar legal şi orice arbitru (ı̂n cazul unor
eventuale dispute) să poată stabili autenticitatea semnăturii (indiferent după
ce interval de timp);

• Imposibil de negat: nici un utilizator legal să nu-şi poată nega propria
semnătură, sub afirmaţia că nu este autentică;

1
2 CAPITOLUL 8. PROTOCOALE DE SEMNĂTURĂ

• Uşor de generat.
Trebuie făcută totuşi distincţie ı̂ntre semnătura olografă şi cea digitală.
Iată câteva diferenţe notabile ı̂ntre cele două tipuri de semnături:
• O semnătură scrisă de mână este o confirmare fizică a unui document, cu
ajutorul unei foi de hârtie care conţine două elemente: un mesaj (textul docu-
mentului) şi o semnătură. O astfel de legătură ı̂ntre mesaje şi semnături nu
este posibilă ı̂ntr-un mediu de calcul;
• O semnătură olografă este aceeaşi indiferent de document. Pentru semnăturile
digitale ı̂nsă, este esenţial ca ele să depindă atât de semnatar cât şi de conţinu-
tul documentului;
• Orice copie a unui document electronic (inclusiv semnătura) este identică cu
originalul. În schimb copia unui document pe hârtie este diferită ca valoare de
original. Aceasta conduce la ideea că un document electronic nu este reutili-
zabil. De exemplu, dacă Bob trimite lui Alice un cec ı̂n valoare de 10 milioane
lei, banca nu va accepta onorarea sa decât o singură dată.

8.2 Protocoale de semnătură


Orice protocol de semnătură este format dintr-un algoritm de semnătură şi un al-
goritm de verificare. Bob semnează un mesaj x bazat pe un algoritm (secret) de
semnătură sig. Rezultatul sig(x) este apoi verificat de un algoritm public de veri-
ficare ver. Pentru orice pereche (x, y), algoritmul de verificare oferă un răspuns
dicotomic (adevărat sau fals), după cum y este o semnătură autentică a lui x sau
nu. Formal ([8]):
Definiţia 8.1 Un protocol de semnătură este un cvintuplu (P, A, K, S, V) unde:
1. P, A, K sunt mulţimi finite, nevide, ale căror elemente se numesc mesaje,
semnături şi respectiv chei;
2. Există o aplicaţie biunivocă ı̂ntre Kşi S × V; anume, pentru fiecare K ∈ K
există o pereche unică (sigK , verK ) unde sigK : P → A, verK : P × A →
{T, F } au proprietatea:
∀x ∈ P, ∀y ∈ A, verK (x, y) = T ⇐⇒ y = sigK (x)
Pentru fiecare K ∈ K, funcţiile sigK şi verK trebuie să fie calculabile ı̂n timp
polinomial; verK este publică iar sigK este secretă. Pentru Oscar, imitarea unei
semnături a lui Bob pentru un mesaj x trebuie să fie imposibilă (din punct de
vedere al complexităţii calculului). Altfel spus, pentru un x dat, numai Bob este
capabil să calculeze o semnătură y astfel ca ver(x, y) = T .
Bineı̂nţeles, nici un protocol de semnătură nu este absolut sigur, deoarece Oscar
poate ı̂ncerca - folosind funcţia publică de verificare ver - toate semnăturile y posibile
ale unui mesaj x, până va găsi semnătura corectă.
Deci, dacă ar dispune de suficient timp, Oscar poate totdeauna să contrafacă
semnătura lui Bob.
8.3. SEMNĂTURA EL GAMAL 3

Exemplul 8.1 Un prim exemplu de semnătură este folosirea ı̂n acest scop a sis-
temului de criptare RSA. Se definesc
P = A = Zn , K = {(n, p, q, a, b) | n = pq, p, q prime, ab ≡ 1 (mod φ(n))}.
n şi b sunt publice, p, q, a sunt secrete.
Pentru K = (n, p, q, a, b) se definesc:

sigK (x) = xa (mod n)

verK (x, y) = T ⇐⇒ x ≡ y b (mod n)

Aici Bob semnează un mesaj folosind cheia sa de decriptare din sistemul de criptare
RSA; el este singurul capabil să genereze o semnătură corectă deoarece dK = sigK
este secretă. Funcţia de verificare utilizează funcţia de criptare eK care este publică,
deci oricine o poate verifica.

De remarcat că oricine poate genera o semnătură a lui Bob pentru un mesaj
aleator x; Oscar poate alege un y şi calculează x = ek (y); atunci y = sigK (x).
Acest lucru poate fi prevenit folosind mesaje x cu suficient de multă redondanţă
(cu anumită semnificaţie). O altă modalitate de a evita acest atac este folosirea unor
funcţii de ı̂mprăştiere (hash); vom studia această manieră ı̂n prelegerea următoare.
Să vedem cum pot fi combinate procedeele de semnătură şi criptare. Presupunem
că Alice doreşte să trimită lui Bob un mesaj criptat şi semnat. Pentru un text clar
x dat, Alice determină semnătura y = sigAlice (x), după care cifrează x şi y folosind
cheia publică a lui Bob : z = eBob ((x, y)).
Textul criptat z este transmis lui Bob. Acesta foloseşte cheia sa secretă dBob şi
obţine (x, y). După aceasta, verifică semnătura lui Alice cu ajutorul cheii publice
verAlice (x, y).
Ce se ı̂ntâmplă dacă Alice criptează ı̂nainte de a semna ? Ea va calcula
z = eBob (x), y = sigAlice (eBob (x)) şi va trimite lui Bob mesajul (z, y). Acesta
decriptează z, obţine x şi verifică y ca semnătură a lui z.
Pericolul constă ı̂n faptul că Oscar poate intercepta (z, y), ı̂nlocui y cu propria
sa semnătură y 0 şi transmite lui Bob mesajul (z, y 0 ).
Din acest motiv se recomandă folosirea semnăturii ı̂nainte de criptare.

8.3 Semnătura El Gamal


Protocolul de semnătură El Gamal a fost descris ı̂n 1985 ([4]). O variantă a sa o cons-
tituie standardul de semnătură electronică N IST (National Institute of Standards
and Technology). Ca o particularitate, el nu este determinist: pentru un mesaj
dat pot exista mai multe semnături valide. Funcţia de verificare va trebui deci să
accepte ca autentice toate aceste semnături.
Să descriem acest protocol de semnătură:
4 CAPITOLUL 8. PROTOCOALE DE SEMNĂTURĂ

Fie p un număr prim (pentru care problema logaritmilor discreţi ı̂n Zp este
dificilă) şi α ∈ Zp∗ = Zp \ {0} un element primitiv. Se ia:
P = Zp∗ , A = Zp∗ × Zp−1 , K = {(p, α, a, β) | β = αa (mod p)}.
Valorile p, α, β sunt publice iar a este secret.
Pentru K = (p, α, a, β), k ∈ Zp−1 (secret) se defineşte:

sigK (x, k) = (γ, δ) unde

γ = αk (mod p), δ = (x − aγ)k −1 (mod p − 1).


Pentru x, γ ∈ Zp∗ , δ ∈ Zp−1 se defineşte

verK (x, γ, δ) = T ⇐⇒ β γ γ δ ≡ αx (mod p)

Dacă semnătura este corectă, verificarea autentifică semnătura, deoarece:

β γ γ δ ≡ αaγ αkδ (mod p) ≡ αx (mod p)

(s-a folosit egalitatea aγ + kδ ≡ x (mod p − 1)).


Bob calculează semnătura folosind cheia sa secretă a şi o valoare aleatoare se-
cretă k (generată numai pentru semnarea mesajului x). Verificarea se realizează cu
ajutorul cheii publice.

Exemplul 8.2 : Să luăm p = 467, α = 2, a = 127. Avem


β = αa (mod p) = 2127 (mod 467) = 132.
Dacă Bob doreşte să semneze mesajul x = 100 alegând valoarea k = 213 (de
remarcat că (213, 466) = 1 şi 213−1 (mod 466) = 431), va obţine
γ = 2213 (mod 467) = 29 şi δ = (100 − 127 ∗ 29) ∗ 431 (mod 466) = 51.
Pentru a verifica semnătura, calculăm
13229 ∗ 2951 ≡ 189 (mod 467) şi 2100 ≡ 189 (mod 467).
Semnătura este deci validă.

Să studiem securitatea protocolului de semnătură El Gamal.


Vom presupune că Oscar doreşte să falsifice semnătura pe mesajul x fără să ştie a.

• Dacă Oscar alege valoarea γ şi ı̂ncearcă să găsească δ corespunzător, el va


trebui să calculeze logaritmul discret logγ αx β −γ . Dacă strategia sa este inversă:
să aleagă ı̂ntâi δ şi să caute apoi γ, el va trebui să rezolve ecuaţia
β γ γ δ ≡ αx (mod p) de necunoscută γ.
Nu se cunoaşte ı̂ncă o metodă pentru rezolvarea unei astfel de probleme.

• Dacă Oscar alege aleator şi pe δ şi caută să obţină x, el va ajunge din nou la
problema logaritmului discret, adică la calculul logα β γ γ δ .

Oscar poate totuşi să semneze un mesaj aleator x ı̂n felul următor:
Fie numerele ı̂ntregi i, j (0 ≤ i ≤ p − 2, 0 ≤ j ≤ p − 2, (j, p − 1) = 1).
Se efectuează calculele:
γ = αi β j (mod p); δ = −γj −1 (mod p − 1); x = −γij −1 (mod p − 1)
8.3. SEMNĂTURA EL GAMAL 5

(deoarece calculele sunt făcute modulo p − 1, există j −1 ).


(γ, δ) este o semnătură validă pentru x. Într-adevăr, se verifică
i j i j −1 i j −1 i j i j −1 i j −1
β γ γ δ ≡ β α β (αi β j )−α β j ≡ β α β α−ij α β β −α β ≡ α−ij α β ≡ α−γij ≡ αx
(toate calculele sunt făcute modulo p).
Să exemplificăm acest atac:
Exemplul 8.3 Fie din nou p = 467, α = 2, β = 132. Să presupunem că Oscar
alege i = 99, j = 179 ( deci j −1 = 151 (mod p − 1)); Oscar calculează:
γ = 299 132179 = 117 (mod 467)
δ = −117 × 151 = 41 (mod 466)
x = 99 × 41 = 331 (mod 466)
Deci (117, 41) este o semnătură a mesajului 331, ceea ce se poate verifica imediat,
calculând
132117 11741 ≡ 303 (mod 467) şi 2331 ≡ 303 (mod 467).
Semnătura este deci validă.
Să mai arătăm o modalitate prin care Oscar poate utiliza un mesaj semnat
anterior de Bob. Să presupunem că (γ, δ) este o semnătură valida a lui x. Oscar
poate semna atunci alte tipuri de mesaje:
Fie h, i, j numere ı̂ntregi din intervalul [0, p − 2] cu (hγ − jδ, p − 1) = 1.
Calculăm:
l = γ h αi β j (mod p), y = δl(hγ − jδ)−1 (mod p − 1),
x0 = l(hx + iδ)(hγ − jδ)−1 (mod p − 1)
unde (hγ − jδ)−1 este calculat modulo p − 1. Se poate atunci verifica direct
0
β l ly ≡ αx (mod p). Deci (l, y) este o semnătură validă a lui x0 .
Aceste două strategii construiesc semnături valide, dar se pare că nu este posibil
ca cineva să contrafacă semnătura unui mesaj ales de el, fără să rezolve o problemă de
logaritmi discreţi. Din acest motiv se consideră că nu există slăbiciuni ı̂n protocolul
de semnătură El Gamal.
Să arătăm ı̂n final două maniere de a sparge acest protocol de semnătură, atunci
când este aplicat neglijent.
• Dacă ı̂ntregul aleator k este cunoscut, se determină imediat
a = (x − kδ)γ −1 mod (p − 1)
Din acest moment, Oscar, ştiind a, poate calcula semnăturile la fel ca Bob.
• Dacă se utilizează acelaşi k pentru mai multe mesaje. Aceasta ı̂i permite de
asemenea lui Oscar să determine a. El va proceda astfel:
Fie (γ, δi ) semnăturile mesajelor xi , i = 1, 2. Avem:
β γ γ δi ≡ αxi (mod p), i = 1, 2, deci αx2 −x1 ≡ γ δ2 −δ1 (mod p).
Înlocuind γ = αk se obţine ecuaţia de necunoscută k:
αx2 −x1 ≡ αk(δ2 −δ1 ) (mod p),
care este echivalentă cu x2 − x1 ≡ k(δ2 − δ1 ) (mod p − 1).
Dacă se ia d = (δ2 −δ1 , p−1), din d | (p−1) şi d | (δ2 −δ1 ) rezultă d | (x2 −x1 ).
Dacă notăm:
6 CAPITOLUL 8. PROTOCOALE DE SEMNĂTURĂ
x2 − x1 δ2 − δ1 p−1
x0 = δ0 = p0 =
d d d

ecuaţia devine x0 ≡ kδ 0 (mod p). Deoarece (δ 0 , p0 ) = 1, se poate determina


² = (δ 0 )−1 (mod p0 ).
Valoarea lui k verifică deci relaţia k ≡ x0 ² (mod p), ceea ce conduce la deter-
minarea a d candidaţi la valoarea lui k, daţi de relaţia k = x0 ² + ip0 (mod p),
i = 0, . . . , d − 1. Din aceste d valori posibile, soluţia se determină testând
relaţia γ ≡ αk (mod p)

8.4 Standard de semnătură electronică


Standardul de semnătură electronică (DSS - de la Digital Signature Standard) este
o variantă a protocolului de semnătură El Gamal. El a fost publicat ı̂n Federal
Register la 19 mai 1994 şi adoptat drept standard la 1 decembrie 1994 (deşi a fost
propus prima dată ı̂n august 1991). Modificările au fost aduse din următorul motiv:
În general, un mesaj este criptat şi decriptat o singură dată, fiind necesară doar
securitatea sistemului de criptare. În schimb, un document semnat - cum ar fi un
contract - are o valoare juridică, şi este posibil ca autenticitatea sa să fie verificată
chiar şi după mai mulţi ani. Este deci important să existe criterii de securitate mai
severe pentru semnătura electronică decât pentru criptare. Cum siguranţa proto-
colului de semnătură El Gamal este echivalentă cu complexitatea problemei loga-
ritmilor discreţi, este necesar să se folosească un modul p cât mai mare. Lungimea
lui p trebuie deci să depăşească 512 biţi (se consideră că ı̂n acest moment 1024 biţi
sunt suficienţi pentru a avea o securitate durabilă).
Descrierea algoritmului DSS:
Fie p un număr prim de 512 biţi, q un factor de 160 biţi ai lui p − 1 şi α ∈ Zp∗
o rădăcină primitivă de ordin q a unităţii.
Fie P = Zp∗ , A = Zq × Zq şi K = {(p, q, α, a, β) | β ≡ αa (mod p)}.
Valorile p, q, α, β sunt publice, iar a este secretă.
Pentru K = (p, q, α, a, β) şi pentru un număr (secret) k (1 ≤ k ≤ q − 1) se
definesc:

• sigK (x, k) = (γ, δ) unde


γ = (αk mod p) mod q δ = (x + aγ)k −1 mod q

• Pentru x ∈ Zp∗ , γ, δ ∈ Zq funcţia de verificare este definită

verK (x, γ, δ) = T ⇐⇒ (αe1 β e2 mod p) mod q = γ

unde e1 = xδ −1 (mod q) e2 = γδ −1 (mod q)

Diferenţe ı̂ntre protocoalele de semnătură El Gamal şi DSS:

a. DSS se distinge ı̂n primul rând de El Gamal prin faptul că asigură o semnătură
de 320 biţi pe un mesaj de 160 biţi, lucrând ı̂n Zp cu p de 512 biţi. Aceasta
8.4. STANDARD DE SEMNĂTURĂ ELECTRONICĂ 7

permite lucrul ı̂ntr-un corp cu circa 2160 elemente. Ipoteza este aceea că ı̂n
această bază, calculul logaritmilor discreţi este foarte dificil.

b. În definirea lui δ semnul − s-a schimbat ı̂n +. Aceasta schimbă ecuaţia de
verificare ı̂n: αx β γ ≡ γ δ mod p.
Dacă (x + αγ, p − 1) = 1, atunci există δ −1 mod (p − 1) şi această ecuaţie se
−1 −1
poate scrie αxδ β γδ ≡ γ (mod p).

c. (idee a lui Schnorr). Să presupunem că q este un număr de 160 biţi astfel
ı̂ncât q | (p − 1) şi α este o rădăcină primitivă de ordinul q a unităţii modulo
p (pentru a găsi un astfel de număr, se ia o rădăcină primitivă α0 ∈ Zp şi
(p−1)/q
se construieşte α = α0 (mod p)). În acest fel, β şi γ sunt de asemenea
rădăcini de ordinul q ale unităţii. Deci exponenţii lui α, β, γ se pot reduce
modulo q, fără a modifica ecuaţia de verificare de mai sus.

Exemplul 8.4 Fie q = 101, p = 78q + 1 = 7879. 3 este rădăcină primitivă ı̂n
Z7879 , deci se poate lua α = 378 mod 7879 = 170.
Dacă alegem de exemplu a = 75, obţinem β = αa mod 7879 = 4567.
Să presupunem că Bob doreşte să semneze mesajul x = 1234 şi ia k = 50 (deci
k −1 mod 101 = 99); el va avea:
γ = (17050 mod 7879) mod 101 = 2518 mod 101 = 94
δ = (1234 + 75 × 94) × 99 mod 101 = 97
Semnătura (94, 97) a mesajului 1234 se verifică prin calcul:
δ = 97−1 mod 101 = 25, e1 = 1234×25 mod 101 = 45, e2 = 94×25 mod 101 = 27
−1

(17045 × 456727 mod 7879) mod 101 = 2518 mod 101 = 94


Semnătura este deci validă.

Când DSS a fost propus ı̂n 1991, a avut mai multe critici. Astfel:

• Mulţi s-au arătat nemulţumiţi de impunerea mărimii de 512 biţi pentru modul;
o mărime variabilă care să fie aleasă de beneficiari ı̂n funcţie de necesităţi ar fi
fost mai convenabilă. Ca răspuns, N IST a schimbat descrierea standardului
pentru a permite alegerea ca modul a oricărui număr divizibil cu 64 având
ı̂ntre 512 şi 1024 biţi.

• Semnăturile pot fi mult mai uşor generate decât verificate. Pentru comparaţie,
ı̂n sistemul RSA un exponent mic de decriptare poate conduce la un proto-
col de verificare mult mai rapid decât semnătura. Obiecţia este ridicată din
considerente practice, anume:

– Un mesaj este semnat o singură dată, dar poate fi verificat de foarte multe
ori de-a lungul timpului.
– Pe ce tipuri de calculatoare sunt efectuate aceste protocoale de semnătură
şi/sau verificare ? Cea mai mare parte a aplicaţiilor folosesc calculatoare
de birou, cu resurse limitate, care comunică cu sisteme puternice de calcul.
Trebuie dezvoltat deci un protocol care să oblige calculatorul de birou la
cât mai puţine calcule.
8 CAPITOLUL 8. PROTOCOALE DE SEMNĂTURĂ

Răspunsul dat de N IST la această obiecţie a fost că este foarte puţin impor-
tant ce calcul este mai simplu, având ı̂n vedere sistemele actuale de calcul, tot
mai performante.

8.5 Semnătura ”One-time”


Ideea acestui protocol este aceea că funcţia care asigură semnătura este folosită
pentru a semna un singur document, după care ea este abandonată (cu toate că
poate fi verificată de un număr arbitrar de ori).
Un astfel de procedeu, foarte cunoscut, este semnătura lui Lamport. Iată ı̂n
ce constă acest protocol:
Fie k > 0 un număr ı̂ntreg şi P = {0, 1}k . Dacă f : Y → Z este o funcţie
neinversabilă, se alege A = Y k . Se selectează aleator yi,j ∈ Y, 1 ≤ i ≤ k,
j = 0, 1 şi fie zi,j = f (yi,j ).
Cheia K este lista celor 2k valori y (secrete) şi a celor 2k valori z (publice).
Pentru K = {(yi,j , zi,j ) | 1 ≤ i ≤ k, j = 0, 1} se defineşte:
sigK (x1 , . . . , xk ) = (y1,x1 , . . . , yk,xk )
şi
verK (x1 , . . . , xk , a1 , . . . , ak ) = T ⇐⇒ f (ai ) = zi,xi , 1 ≤ i ≤ k.
Conform acestui protocol, mesajul care trebuie semnat este un şir binar de
lungime k. Fiecare bit, de valoare j (j = 0, 1) este semnat prin zi,j , unde fiecare zi,j
este imaginea printr-o funcţie neinversabilă a unui yi,j .
Verificarea constă ı̂n aplicarea lui f şi compararea rezultatului cu cheia publică.

Exemplul 8.5 Fie 7879 un număr prim, iar 3 ∈ Z7879 un element primitiv. Se
defineşte
f (x) = 3x mod 7879.
Dacă Bob doreşte să semneze un mesaj de trei biţi, el alege (secret) şase numere
aleatoare
y1,0 = 5831 y2,0 = 803 y3,0 = 4285
y1,1 = 735 y2,1 = 2467 y3,1 = 6449
Calculează apoi imaginea lor prin funcţia f :
z1,0 = 2009 z2,0 = 4672 z3,0 = 268
z1,1 = 3810 z2,1 = 4721 z3,1 = 5731
Aceste numere z sunt publice.
Să presupunem că Bob vrea să semneze mesajul x = (1, 1, 0). Semnătura lui este
(y1,1 , y2,1 , y3,0 ) = (735, 2467, 4285)
Pentru a verifica semnătura, este suficient să se constate că:
3735 = 3810; 32467 = 4721; 34285 = 268,
toate calculele fiind realizate modulo 7879.

Oscar nu poate imita semnătura, deoarece f nu are inversă.


În plus, protocolul de semnătură nu poate fi utilizat decât pentru un singur
mesaj: dacă dispune de două mesaje cu aceeaşi semnătură, Oscar poate imita
semnătura unui nou mesaj (diferit de cele două).
8.5. SEMNĂTURA ”ONE-TIME” 9

De exemplu, dacă mesajele (0, 1, 1) şi (1, 0, 1) sunt semnate prin procedeul de
sus cu (y1,0 , y2,1 , y3,1 ) respectiv (y1,1 , y2,0 , y3,1 ), se pot imediat semna mesaje cum ar
fi (1, 1, 1) sau (0, 0, 1).
Deşi foarte simplu şi elegant, acest protocol nu este practic din cauza dimensiunii
mari a semnăturii. Reluând exemplul de mai sus, o implementare sigură necesită un
modul p de 512 biţi. Aceasta ı̂nseamnă că fiecare bit al mesajului are o semnătură
de 512 biţi; avem deci o semnătură de 512 ori mai lungă decât mesajul !
De aceea a apărut o simplificare, care reduce lungimea semnăturii fără a diminua
securitatea ei. Numit Bos-Chaum, acest protocol este definit astfel:
Fie k > 0 un număr ı̂ntreg şi P = {0, 1}∗ . Dacă n este un număr ı̂ntreg cu
proprietatea 2k ≤ C2n
n
, fie B mulţimea numerelor ı̂ntregi din intervalul [1, 2n]
şi
φ:P→B
o funcţie injectivă ı̂n mulţimea B a părţilor lui B de n elemente.
Dacă f : Y → Z este o funcţie neinversabilă, fie A = Y n .
Se aleg aleator valorile yi ∈ Y, 1 ≤ i ≤ 2n şi fie zi = f (yi ).
Cheia K este lista celor 2n valori y (secrete) şi a celor 2n valori z (publice).
Pentru K = {(yi , zi ) | 1 ≤ i ≤ 2n}, se definesc
sigK (x1 , . . . , xk ) = {yj | j ∈ φ(x1 , . . . xk )}
şi
verK (x1 , . . . , xk , a1 , . . . , ak ) = T ⇐⇒ {f (ai ) | 1 ≤ i ≤ n} = {zj | j ∈ φ(x1 , . . .
. . . , xk )}
Avantajul protocolului Bos-Chaum este acela că scurtează semnătura. De ex-
emplu, să presupunem că vrem să semnăm un mesaj de şase biţi (k = 6); cum
26 = 64 şi C84 = 70, putem lua n = 4. Aceasta permite semnarea mesajului cu
numai patru valori y (ı̂n loc de şase la Lamport). De asemenea, şi cheia este mai
scurtă, cu numai opt valori z faţă de 12 la semnătura Lamport.
Protocolul de semnătură Bos-Chaum necesită o funcţie injectivă φ care asociază
fiecărei secvenţe de k biţi x = (x1 , . . . , xk ) o submulţime de n elemente. Un exemplu
de algoritm simplu care să realizeze o astfel de asociere este:
k
X
x← xi 2i−1
i=1
φ(x) ← ∅
t ← 2n
e←n
while t > 0 do
t←t−1
if x > Cte then
x ← x − Cte
e←e−1
φ(x) ← φ(x) ∪ {t + 1}.
enddo
Dacă vrem să dăm o estimare generală a valorii lui n din protocolul Bos-Chaum,
10 CAPITOLUL 8. PROTOCOALE DE SEMNĂTURĂ

n (2n)!
plecăm de la inegalitatea 2k ≤ C2nn
ı̂n care se evaluează C2n = cu formula lui
√ (n!)2
Stirling, obţinându-se 22n / πn. După simplificări şi logaritmare ı̂n baza 2 se ajunge
la relaţia:
log2 nπ
k ≤ 2n −
2
Asimptotic, n este de ordinul lui k/2, deci protocolul de semnătură Bos-Chaum
reduce mărimea semnăturii lui Lamport cu aproximativ 50%.

8.6 Semnături incontestabile


Semnăturile incontestabile au fost introduse de Chaum şi van Antwerpen ı̂n 1989.
Ele prezintă câteva caracteristici. Astfel:

• Semnătura nu poate fi validată fără aportul semnatarului Bob. Aceasta ı̂l


protejează pe Bob de difuzarea fără consimţământ a unui document pe care se
pretinde că l-ar fi semnat. Validarea se face urmând un protocol de ı̂ntrebări
şi răspunsuri.

• Pentru a evita ca Bob să-şi nege propria semnătură, există un protocol de


dezminţire pe care Bob trebuie să-l urmeze pentru a arăta că o semnătură este
falsă.
Refuzul de a folosi acest protocol este o confirmare a autenticităţii semnăturii.

Deci, un protocol de semnătură incontestabilă este format dintr-o funcţie de semnă-


tură, un protocol de verificare şi o procedură de dezminţire.
Algoritmul Chaum-van Antwerpen este:
Fie p = 2q + 1 un număr prim cu proprietatea că q este prim şi α ∈ Zp∗ un
element de ordin q. Pentru 1 ≤ a ≤ q − 1, se defineşte β ≡ αa mod p.
Fie G subgrupul de ordin q al lui Zp .
Se definesc P = A = G, K = {(p, α, a, β) | β ≡ αa (mod p)}.
Valorile p, α, β sunt publice iar a este secretă.
Pentru K = (p, α, a, β), x ∈ G se defineşte y = sigK (x) = xa mod p.
Pentru x, y ∈ G, protocolul de verificare se efectuează astfel:

1. Alice alege aleator numerele e1 , e2 ∈ Zq∗ ;

2. Alice calculează c = y e1 β e2 mod p şi-l trimite lui Bob;


−1
3. Bob calculează d = ca mod q
mod p şi-l trimite lui Alice;

4. Alice admite autenticitatea lui y dacă şi numai dacă d ≡ xe1 αe2 mod p.

A. Să explicăm ı̂ntâi rolul lui p şi q ı̂n acest protocol. Calculele sunt efectuate
ı̂n Zp . Este necesar totuşi ca anumite calcule să fie făcute ı̂ntr-un subgrup al său
de ordin prim (notat cu G). În particular este nevoie să calculăm inverse modulo q
(ceea ce justifică de ce q = card(G) trebuie să fie prim). Alegând p = 2q + 1 cu q
8.6. SEMNĂTURI INCONTESTABILE 11

prim, se asigură acest deziderat şi - ı̂n plus - dimensiunea lui G este maximă, lucru
de dorit deoarece mesajele de semnat sunt elemente din G.
Să arătăm ı̂ntâi cum admite Alice autenticitatea semnăturilor valide. În calculul
de mai jos, exponenţii sunt reduşi modulo q.
−1 −1 −1
d ≡ ca (mod p) ≡ y e1 a β e2 a (mod p).
−1
Cum β ≡ αa (mod p), avem β a ≡ α (mod p).
−1
De asemenea, din y = xa (mod p) rezultă y a ≡ x (mod p).
Se ajunge deci la d ≡ xe1 αe2 (mod p).

Exemplul 8.6 Fie p = 467. 2 este o rădăcină primitivă, deci 22 = 4 este un


generator al lui G, grupul reziduurilor patratice modulo 467. Vom lua deci α = 4.
Să presupunem a = 101; avem β = αa mod 467 = 449.
Bob semnează deci mesajul x = 119 cu y = 119101 mod 467 = 129.
Să presupunem că Alice vrea să autentifice semnătura y şi că alege pentru asta
e1 = 38, e2 = 397. Ea calculează c = 13, la care Bob răspunde cu d = 9. Alice
verifică atunci relaţia 11938 4397 ≡ 9 (mod 467).
Semnătura este acceptată ca autentică.

B. Să arătăm acum că Alice nu poate accepta o semnătură falsă drept autentică
decât cu o probabilitate neglijabilă.

Teorema 8.1 Dacă y 6≡ xa (mod p) atunci Alice admite pe y ca semnătură auten-


tică a lui x cu probabilitate 1/q.

Demonstraţie: Se observă că orice ı̂ntrebare c corespunde la exact q perechi (e1 , e2 )


posibile (deoarece y şi β sunt elemente ale grupului G de ordin q prim şi ı̂n definiţia
lui c, fiecare e1 determină un e2 unic). Când Bob primeşte c, el nu ştie ce pereche
(e1 , e2 ) a fost folosită pentru a-l construi. Vom arăta că dacă y 6≡ xa (mod p), orice
răspuns d nu poate fi consistent decât cu o singură pereche (e1 , e2 ).
Deoarece α generează G, orice element din G se scrie ca o putere (unică modulo
q) a lui α. Deci c = αi , d = αj , x = αk , y = αm cu i, j, k, m ∈ Zq şi operaţiile
aritmetice efectuate modulo p. Să considerăm sistemul:

c ≡ y e1 β e2 (mod p) d ≡ xe1 αe2 (mod p).

El este echivalent cu

i ≡ me1 + ae2 (mod q) j ≡ ke1 + e2 (mod q).

Cum prin ipoteză y 6≡ xa (mod p), rezultă m 6≡ ak (mod q).


Astfel, matricea sistemului modulo q admite un determinant nenul, deci sistemul
are soluţie unică. Altfel spus, pentru orice d ∈ G, nu există răspuns corect la
ı̂ntrebarea c decât pentru un singur cuplu (e1 , e2 ). Deci probabilitatea ca Bob să
răspundă corect lui Alice ı̂n condiţiile teoremei este 1/q. 2
C. Să construim acum procedura de dezminţire. Ea foloseşte de două ori proto-
colul de verificare. Algoritmul este:
12 CAPITOLUL 8. PROTOCOALE DE SEMNĂTURĂ

1. Alice alege aleator e1 , e2 ∈ Zq∗ ;

2. Alice calculează c = y e1 β e2 (mod p) şi-l trimite lui Bob;


−1
3. Bob calculează d = ca mod q
(mod p) şi-l trimite lui Alice;

4. Alice verifică d 6≡ xe1 αe2 (mod p);

5. Alice alege aleator f1 , f2 ∈ Zq∗ ;

6. Alice calculează C = y f1 β f2 (mod p) şi-l trimite lui Bob;


−1
7. Bob calculează D = C a mod q
(mod p) şi-l trimite lui Alice;

8. Alice verifică D 6≡ xf1 αf2 (mod p);

9. Alice admite că y este fals dacă şi numai dacă


(dα−e2 )f1 ≡ (Dα−f2 )e1 (mod p)

Paşii 1 − 4 şi 5 − 8 corespund protocolului de verificare. Pasul 9 este validarea


consistenţei răspunsului, care permite lui Alice să determine dacă Bob a calculat
bine răspunsurile sale conform protocolului.

Exemplul 8.7 Să luăm parametrii din exemplul anterior: p = 467, α = 4,


a = 101, β = 449. Fie mesajul x = 286 cu semnătura (greşită) y = 83.
Bob doreşte să dezmintă această semnătură.
Fie e1 = 45, e2 = 237 primele valori alese de Alice. Ea calculează c = 305 şi
Bob răspunde cu d = 109. Alice calculează atunci
28645 4237 (mod 467) = 149.
Deoarece 149 6= 109, Alice trece la pasul 5 al protocolului. Să presupunem că
ea alege acum f1 = 125, f2 = 9 şi calculează C = 270 la care Bob răspunde cu
D = 68. Alice calculează acum
286125 49 (mod 467) = 25.
Cum 25 6= 68, Alice trece la pasul 9 şi efectuează testul de consistenţă:
(109 × 4−237 )125 ≡ 188 (mod 467) (68 × 4−9 )45 ≡ 188 (mod 467)
Acum Alice este convinsă că semnătura nu este valabilă.

Pentru final, mai trebuiesc arătate două elemente:

• Bob poate să o convingă pe Alice să invalideze o semnătură incorectă.

• Bob nu poate să o convingă pe Alice să invalideze o semnătură corectă decât
cu probabilitate neglijabilă.

Teorema 8.2 Dacă y 6≡ xa (mod p) şi dacă Alice şi Bob urmează corect protocolul
de dezminţire, atunci
(dα−e2 )f1 ≡ (Dα−f2 )e1 (mod p).
8.7. SEMNĂTURĂ FĂRĂ EŞEC 13

−1
Demonstraţie: Utilizând faptul că d ≡ ca (mod p) şi c ≡ y e1 β e2 (mod p), avem:
−1 −1
(dα−e2 )f1 ≡ ((y e1 β e2 )a α−e2 )f1 (mod p) ≡ y e1 f1 β e2 a f1 α−e2 f1 (mod p)
≡ y e1 f1 αe2 f1 α−e2 f1 (mod p) ≡ y e1 f1 (mod p).
−1
Un calcul similar folosind D ≡ C a (mod p), C ≡ y f1 β f2 (mod p) şi
β ≡ αa (mod p) arată că

(Dα−f2 )e1 ≡ y e1 f1 (mod p)

deci testul de consistenţă de la pasul 9 reuşeşte. 2


Să studiem acum cazul când Bob ı̂ncearcă să dezmintă o semnătură validă. În
acest caz Bob nu va urma protocolul, şi va construi d şi D fără să respecte procedura.

Teorema 8.3 Să presupunem că y ≡ xa (mod p) şi Alice urmează procedura de
dezminţire. Dacă d 6≡ xe1 αe2 (mod p) şi D 6≡ xf1 αf2 (mod p) atunci probabilitatea
1
ca (dα−e2 )f1 6≡ (Dα−f2 )e1 (mod p) este 1 − .
q
Demonstraţie: Să presupunem că avem (conform ipotezei):
y ≡ xa d 6≡ xe1 αe2 D 6≡ xf1 αe2 (dα−e2 )f1 ≡ (Dα−f2 )e1
toate calculele fiind făcute modulo p. Vom arăta că se ajunge la o contradicţie.
Testul de consistenţă (pasul 9) se rescrie D ≡ df01 αf2 (mod p) unde
d0 = d1/e1 α−e2 /e1 (mod p) nu depinde decât de paşii 1 − 4 ai protocolului. Aplicând
1
Teorema 8.1 se obţine că y este o semnătură validă a lui d0 cu probabilitate 1 − .
q
Dar, prin ipoteză, y este o semnătură validă a lui x. Deci, cu mare probabilitate
vom avea xa ≡ da0 (mod p) adică x = d0 .
Pe de-altă parte, din d 6≡ xe1 αe2 (mod p) rezultă x 6≡ d1/e1 α−e2 /e1 (mod p), adică
tocmai x 6= d0 , contradicţie. 2

8.7 Semnătură fără eşec


O semnătură fără eşec oferă protecţie contra unui adversar atât de puternic ı̂ncât
poate contraface semnături. Protocolul de semnătură prezentat aici este construit
de Heyst şi Pedersen ı̂n 1992. Este un tip de semnătură one - time, compus dintr-
o funcţie de semnătură, o funcţie de verificare şi un protocol pentru proba de
autentificare. Prezentarea sa ı̂n detaliu este:
Fie p = 2q + 1 un număr prim cu q prim, şi α ∈ Zp∗ un element de ordin q.
Pentru 1 ≤ a0 ≤ q − 1 se defineşte β = αa0 (mod p).
Valorile p, q, α, β sunt publice şi considerate fixe.
Valoarea a0 este secretă pentru toată lumea (inclusiv Bob).
Fie P = Zq , A = Zq × Zq . O cheie este de forma K = (γ1 , γ2 , a1 , a2 , b1 , b2 )
unde a1 , a2 , b1 , b2 ∈ Zq , γ1 = αa1 β a2 (mod p) γ2 = αb1 β b2 (mod p).
Dacă x ∈ Zq , se defineşte
sigK (x) = (y1 , y2 ) unde y1 = a1 + xb1 (mod q) y2 = a2 + xb2 (mod q).
Pentru y = (y1 , y2 ) ∈ Zq × Zq , avem
verK (x, y) = T ⇐⇒ γ1 γ2x ≡ αy1 β y2 (mod p)
14 CAPITOLUL 8. PROTOCOALE DE SEMNĂTURĂ

Se poate vedea direct că o semnătură corect construită este validată de funcţia
de verificare. Rămâne de studiat problema de securitate şi de ce procedeul este fără
eşec. Să stabilim ı̂ntâi câteva proprietăţi importante ale cheilor.
Două chei (γ1 , γ2 , a1 , a2 , b1 , b2 ) şi (γ10 , γ20 , a01 , a02 , b01 , b02 ) sunt echivalente dacă
γ1 = γ10 , γ2 = γ20 .
În fiecare clasă de echivalenţa sunt exact q 2 chei.

Lema 8.1 Dacă K, K 0 sunt chei echivalente, atunci

verK = T ⇐⇒ verK 0 = T.

Demonstraţie: Fie K = (γ1 , γ2 , a1 , a2 , b1 , b2 ) şi K 0 = (γ1 , γ2 , a01 , a02 , b01 , b02 ) cu


0 0 0 0
γ1 ≡ αa1 β a2 (mod p) ≡ αa1 β a2 (mod p) şi γ2 ≡ αb1 β b2 (mod p) ≡ αb1 β b2 (mod p).
Să presupunem că mesajul x este semnat cu y = (y1 , y2 ) folosind cheia K, unde
y1 ≡ a1 + xb1 (mod q) y2 ≡ a2 + xb2 (mod q)
Să presupunem că verificarea lui y se face cu cheia K 0 :
0 0 0 0 0 0 0 0
αy1 β y2 ≡ αa1 +xb1 β a2 +xb2 (mod p) ≡ αa1 β a2 (αb1 β b2 )x (mod p) ≡ γ1 γ2x (mod p).
Deci y se verifică şi cu cheia K 0 . 2

Lema 8.2 Fie o cheie K şi y = sigK (x). Există exact q chei K 0 echivalente cu K
astfel ı̂ncât y = sigK 0 (x).

Demonstraţie: Fie γ1 , γ2 componentele publice ale lui K. Trebuie determinat numă-


rul de quadrupluri (a1 , a2 , b1 , b2 ) astfel ı̂ncât
γ1 ≡ αa1 β a2 (mod p) γ2 ≡ αb1 β b2 (mod p)
y1 ≡ a1 + xb1 (mod q) y2 = a2 + xb2 (mod q).
Cum α generează Zq∗ , există exponenţii unici c1 , c2 , a0 ∈ Zq astfel ı̂ncât
γ1 ≡ αc1 (mod p), γ2 ≡ αc2 (mod p), β ≡ αa0 (mod p).
În acest fel, este necesar şi suficient să avem:
c1 ≡ a1 + a0 a2 (mod q) c2 ≡ b1 + a0 b2 (mod q)
y1 ≡ a1 + xb1 (mod q) y2 ≡ a2 + xb2 (mod q).
Matricea acestui¯ sistem de ecuaţii ¯
cu necunoscutele a1 , a2 , b1 , b2 are rangul 3
¯ 1 a0 0 0 ¯
¯ ¯
¯ 0 0 1 a ¯
¯ 0 ¯
(determinantul este ¯¯ ¯), deci sistemul are cel puţin o soluţie netrivială
¯ 1 0 x 0 ¯
¯
¯ 0 1 0 x ¯
obţinută cu ajutorul cheii K şi – ı̂n plus – dimensiunea spaţiului soluţiilor este
4 − 3 = 1, deci există exact q soluţii. 2

Lema 8.3 Fie o cheie K, y = sigK (x) şi verK (x0 , y 0 ) = T pentru x0 6= x. Există
atunci cel puţin o cheie K 0 echivalentă cu K astfel ca
y = sigK 0 (x), y 0 = sigK 0 (x0 )

Demonstraţie: Se face printr-un raţionament analog cu cel din lema precedentă. 2


Din ultimele două leme putem trage următoarea concluzie: fiind dată o semnă-
tură validă y a unui mesaj x, există exact q chei posibile care pot semna x. Pentru
orice alt mesaj x0 6= x, aceste q chei produc semnături diferite ale lui x0 . Se obţine
astfel teorema următoare:
8.7. SEMNĂTURĂ FĂRĂ EŞEC 15

Teorema 8.4 Fiind date sigK (x) = y şi x0 6= x, Oscar nu poate calcula sigK (x0 )
1
decât cu probabilitate .
q
De remarcat că rezultatul acestei teoreme nu depinde de puterea de calcul a lui
Oscar; securitatea provine din faptul că el nu poate distinge care din cele q chei
posibile a fost utilizată.
Se poate explica acum noţiunea de semnătură fără eşec. S-a arătat că fiind dat un
mesaj x semnat cu y, Oscar nu poate calcula semnătura y 0 a lui Bob pe un alt mesaj
x0 . Ar mai fi posibilitatea ca Oscar să poată calcula o semnătură y 00 6= sigK (x0 ) care
să fie validă. Dar, dacă ea ajunge ı̂napoi la Bob, acesta poate furniza cu probabilitate
1
1 − o probă de autentificare; aceasta este valoarea a0 = logα β, cunoscută numai
q
de autor.
Să presupunem că Bob are o pereche (x0 , y 00 ) astfel ı̂ncăt
verK (x0 , y 00 ) = T şi y 00 6= sigK (x0 ).
0 00 00
Avem γ1 γ2x ≡ αy1 β y2 (mod p) unde y 00 = (y100 , y200 ).
Bob poate calcula propria sa semnătură pentru x0 , pe care o notează y 0 = (y10 , y20 )
0 0 0
şi are γ1 γ2x ≡ αy1 β y2 (mod p).
00 00 0 0
Deci αy1 β y2 ≡ αy1 β y2 (mod p). Scriind β = αa0 (mod p) se obţine:
00 00 0 0
αy1 +a0 y2 ≡ αy1 +a0 y2 (mod p) de unde y100 + a0 y200 ≡ y10 + a0 y20 (mod q)

sau y100 − y10 ≡ a0 (y20 − y200 ) (mod q). Evident y20 6≡ y200 deoarece y 00 este un fals.
Deci (y20 − y200 )−1 (mod q) există şi avem:
a0 = logα β = (y100 − y10 )(y20 − y200 )−1 (mod q).
Bineı̂nţeles, ı̂n verificarea probei de autentificare s-a presupus că nici Bob nu
poate calcula logaritmul discret logα β.
Ca o remarcă finală, acest procedeu este cu utilizare unică, deoarece cheia K a
lui Bob poate fi uşor determinată după două folosiri.

Exemplul 8.8 Să presupunem p = 3467 = 2×1733+1. Numărul α = 4 are ordinul



1733 ı̂n Z3467 . Dacă se ia a0 = 1567 vom avea β = 41567 (mod 3467) = 514.
Reamintim că Bob cunoaşte α şi β dar nu a0 .
Să presupunem că Bob construieşte cheia sa cu a1 = 888, a2 = 1024,
b1 = 786, b2 = 999 deci
γ1 = 4888 5141024 (mod 3467) = 3405 γ2 = 4786 514999 (mod 3467) = 2281.
În acest moment Bob este pus ı̂n prezenţa semnăturii false (822, 55) a mesajului
3383. Această semnătură este validă, deoarece condiţia de verificare este satisfăcută:
3405 × 22813383 ≡ 2282 (mod 3467) 4822 51456 ≡ 2282 (mod 3467).
Dar Bob ştie că aceasta nu este semnătura sa şi trebuie să dovedească acest
lucru. El calculează propria sa semnătură:
(888 + 3383 × 786 (mod 1733), 1024 + 3383 × 999 (mod 1733)) = (1504, 1291)
după care evaluează logaritmul discret
a0 = (822 − 1504)(1291 − 55)−1 (mod 1733) = 1567
care constituie probă de autentificare, şi arată că semnătura nu ı̂i aparţine.
16 CAPITOLUL 8. PROTOCOALE DE SEMNĂTURĂ

8.8 Exerciţii
8.1 Să presupunem că Bob utilizează semnătura El Gamal şi semnează mesajele
x1 , x2 obţinând (γ, δ1 ) respectiv (γ, δ2 ) (cu aceeaşi valoare a lui γ ı̂n ambele sem-
nături). Se consideră ı̂n plus că (δ1 − δ2 , p − 1) = 1.
• Arătaţi că aceste informaţii sunt suficiente pentru determinarea lui k;

• Arătaţi cum se poate sparge protocolul de semnătură;

• Presupunând p = 3187, α = 5, β = 25703, efectuaţi calculul lui k şi a plecând


de la semnăturile (23972, 31396) pentru x = 8990 şi (23972, 20481) pentru x =
31415.

8.2 Protocolul de semnătură El Gamal este implementat folosind p = 31847,


α = 5, β = 26379. Să se scrie un program care:
• Verifică semnătura (20679, 11082) a mesajului x = 20543.

• Calculează exponentul secret a prin compromisul spaţiu - timp al lui Shanks.


Apoi determină valoarea aleatoare k utilizată ı̂n semnătura lui x.

8.3 Bob utilizează procedeul de semnătură El Gamal ca ı̂n Exemplul 8.1: p =


467, α = 2, β = 132. Să presupunem căel semnează mesajul x = 100 cu (29, 51).
Calculaţi semnătura falsă pe care o poate obţine Oscar cu h = 102, i = 45, j = 293.
Autentificaţi semnătura rezultată cu funcţia de verificare.

8.4 Arătaţi că a doua metodă de atac din semnătura El Gamal furnizează o semnă-
tură corectă care satisface funcţia de verificare.

8.5 Modificăm puţin protocolul de semnătură El Gamal. Cheia este construită


astfel: Bob alege o rădăcină primtivă α ∈ Zp∗ , un exponent secret a (0 ≤ a ≤
p−2), (a, p −1) = 1 şi β = αa . Cheia este K = (α, a, β) unde α, β sunt publice, iar
a este secretă. Fie x ∈ Zp un mesaj care trebuie semnat. Bob calculează semnătura
sigK (x) = (γ, δ) prin:

γ = αk (mod p) δ = (x − kγ)a−1 (mod p − 1).

Singura diferenţă faţă de semnătura El Gamal este calculul lui δ.


• Descrieţi cum se poate verifica cu cheia publică a lui Bob o semnătură (γ, δ)
pe un mesaj x;

• Descrieţi avantajul noului procedeu (faţă de cel vechi) din punct de vedere al
calculelor;

• Comparaţi pe scurt securitatea celor două protocoale.

8.6 Bob utilizează procedeul DSS cu q = 101, p = 7879, α = 170, a = 75, β =


4567. Determinaţi semnătura lui Bob pe mesajul x = 5001 utilizând valoarea
aleatoare k = 49, şi arătaţi cum poate fi verificată semnătura rezultată.
8.8. EXERCIŢII 17

8.7 În protocolul de semnătură Lamport, Bob semnează două mesaje x, x0 , ambele
de câte k biţi. Fie s = d(x, x0 ) numărul de coordonate ı̂n care diferă cele două
mesaje. Arătaţi că Oscar poate semna 2s − 2 mesaje noi.

8.8 În protocolul de semnătură Bos-Chaum cu k = 6, n = 4 sunt semnate mesajele


x = (0, 1, 0, 0, 1, 1), x0 = (1, 1, 0, 1, 1, 1). Determinaţi noile mesaje pe care le poate
semna Oscar, plecând de la semnăturile lui x şi x0 .

8.9 În protocolul de semnătură Bos-Chaum, Bob semnează două mesaje x, x0 . Fie
s = card(φ(x) ∪ φ(x0 )). Arătaţi că Oscar poate semna acum Csn − 2 mesaje noi.

8.10 Bob utilizează protocolul de semnătură incontestabilă Chaum-van Antwerpen


ca ı̂n Exemplul 8.5; deci p = 467, α = 4, a = 101, β = 449. Să presupunem că Bob
este confruntat cu semnătura y = 25 a mesajului x = 157 şi doreşte să arate că ea
este falsă. Presupunând că Alice alege valorile aleatoare e1 = 46, e2 = 123, f1 =
198, f2 = 11 ı̂n protocolul de dezminţire, calculaţi ı̂ntrebările c, d ale lui Alice şi
răspunsurile C, D ale lui Bob; verificaţi că Alice admite dezminţirea.

8.11 Arătaţi că clasele de echivalenţă de chei ı̂n protocolul de semnătură fără eşec
Pedersen - van Heyst conţine q 2 chei.

8.12 Bob utilizează protocolul de semnătură fără eşec Pedersen - van Heyst cu
p = 3467, α = 4, a0 = 1567, β = 514 (valoarea lui a0 nu este cunsocută de Bob).

• Folosind faptul că a0 = 1567, determinaţi toate cheile posibile


K = (γ1 , γ2 , a1 , a2 , b1 , b2 ) astfel ca sigK (42) = (1118, 1449).

• Presupunem sigK (42) = (1118, 1449) şi sigK (969) = (899, 471). Fără a utiliza
valoarea lui a0 , determinaţi valoarea lui K (cea utilizată ı̂n protocolul cu cheie
one - time).

8.13 Bob foloseşte protocolul de semnătură fără eşec Pedersen - van Heyst cu p =
5087, α = 25, β = 1866. Cheia este K = (5065, 5076, 144, 874, 1873, 2345). Se
presupune că Bob este confruntat cu semnătura (2219, 458) contrafăcută pe mesajul
4785.

• Arătaţi că ea satisface condiţia de verificare, deci este validă.

• Arătaţi cum poate Bob să calculeze proba de autenticitate plecând de la această
semnătură.
18 CAPITOLUL 8. PROTOCOALE DE SEMNĂTURĂ
Bibliografie

[1] J. N. Bos, D. Chaum - Provably unforgable signatures; Lecture Notes in Com-


puter Science, 740(1993), 1 − 14

[2] D. Chaum, H. van Antwerpen - Undeniable signatures; Lecture Notes in Com-


puter Science, 435(1990), 212 − 216

[3] W. Diffie, M.E. Hellman - Multiuser cryptographic techniques; AFIPS Confer-


ence Proceedings, 45(1976), 109 − 112

[4] T. El Gamal - A public key cryptosystem and a signature scheme based on


discrete algorithms; IEEE Trans on Inf. Theory, 31(1985), 469 − 472

[5] E. van Heyst, T.P.Petersen - How to make efficient fail-stop signatures; Lecture
Notes in Computer Science, 658(1993), 366 − 377

[6] C. J. Mitchell, F. Piper, P. Wild - Digital signatures; Contemporary Cryptology,


The Science of Information Integrity, IEEE Press, (1992), 325 − 378

[7] M. E. Smid, D. K. Branstad - Response to comments on the N IST proposed


digital signature standard; Lecture Notes in Computer Science, 740(1993), 76−88

[8] D. Stinton - Cryptographie, Theorie and Practique, Int. Thompson Publishing


(1995)

[9] Digital signature standard; national Bureau of Standards, FIPS Publications


186, 1994

19

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