Documente Academic
Documente Profesional
Documente Cultură
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:
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
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
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
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
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
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 .
α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
α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.
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ţă
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 )
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:
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:
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
Î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
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 ∗ .
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:
(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.
1. L0i = Ri−1
0
pentru 1 ≤ i ≤ n;
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ă):
Î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:
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.
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.
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
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.
1
2 PRELEGEREA 5. SISTEMUL DE CRIPTARE AES
Î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).
Nr Nb = 4 Nb = 6 Nb = 8
Nk = 4 10 12 14
Nk = 6 12 12 14
Nk = 8 14 14 14
• ByteSub(Stare);
• ShiftRow(Stare);
• MixColumn(Stare);
• AddRoundKey(Stare, Cheie).
Nb C1 C2 C3
4 1 2 3
6 1 2 3
8 1 3 4
2. Nr − 1 runde;
3. O rundă finală.
• Numărul total al biţilor din toate cheile de rundă este Nb (Nr + 1).
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 ).
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.
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.
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:
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Ă
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.
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
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 .
ş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
[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.
[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.
[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
[11] R.L. Rivest; The MD4 message digest algorithm. Lecture Notes in Computer Sci-
ence, 537, (1991), 303-311
9
10 BIBLIOGRAFIE
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
Tabelul 6.1:
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
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 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)
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:
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:
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].
3. b ← am (mod n)
5. for i := 0 to k − 1 do
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.
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.
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
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ă.
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.
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
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]
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
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”
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.
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).
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.
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:
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
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)
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
x ≡ ai mod pi , 1≤i≤r
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
[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.
[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
[9] R.L. Rivest; The MD4 message digest algorithm. Lecture Notes in Computer
Science, 537, (1991), 303-311
19
Capitolul 7
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)
1
2 CAPITOLUL 7. ALTE SISTEME DE CRIPTARE CU CHEI PUBLICE
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, 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)
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ă
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
Definirea sistemului de criptare El Gamal ı̂n subgrupul H ı̂n loc de Zn∗ este uşor de
realizat; anume:
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).
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).
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 ).
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.
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
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)
√
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 .
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)
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α;
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).
[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.
[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
[10] R.L. Rivest; The MD4 message digest algorithm. Lecture Notes in Computer
Science, 537, (1991), 303-311
15
Capitolul 8
Protocoale de semnătură
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:
• 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ă.
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:
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.
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:
• 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
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
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.
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.
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%.
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).
B. Să arătăm acum că Alice nu poate accepta o semnătură falsă drept autentică
decât cu o probabilitate neglijabilă.
El este echivalent cu
• 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ă
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
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.
verK = T ⇐⇒ verK 0 = T.
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).
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 )
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.
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;
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.
• Descrieţi avantajul noului procedeu (faţă de cel vechi) din punct de vedere al
calculelor;
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.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.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).
• 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 cum poate Bob să calculeze proba de autenticitate plecând de la această
semnătură.
18 CAPITOLUL 8. PROTOCOALE DE SEMNĂTURĂ
Bibliografie
[5] E. van Heyst, T.P.Petersen - How to make efficient fail-stop signatures; Lecture
Notes in Computer Science, 658(1993), 366 − 377
19