Sunteți pe pagina 1din 15

Prelegerea 2

Funcţii de dispersie

2.1 Semnături şi funcţii de dispersie


Ca o trăsătură generală a protocoalelor de semnătură definite ı̂n prelegerea anterioară, mesajele
care puteau fi semnate erau toate de lungime mică. De exemplu, cu protocolul DSA se sem-
nează un mesaj de 160 biţi şi se obţine o semnătură de 320 biţi. În practică ı̂nsă, documentele
care trebuiesc semnate sunt mult mai lungi, putând ajunge la dimensiuni de mega-octeţi. Ideea
de spargere a mesajului ı̂n blocuri şi de semnare separat a fiecărui bloc are numeroase inconve-
niente, legate atât de spaţiu cât şi de timpul foarte lung luat de autentificarea semnăturii.
Soluţia la această problemă este funcţia de ı̂mprăştiere (dispersie) criptografică. Această
funcţie care trebuie calculată rapid, transformă un mesaj de lungime arbitrară ı̂ntr-o amprentă
numerică de dimensiune fixată (160 biţi ı̂n cazul DSA), care ulterior este semnată.
Dacă Bob doreşte să semneze un mesaj x, el calculează ı̂ntâi amprenta numerică z = h(x),
o semnează cu y = sigK (z) şi transmite perechea (x, y) prin canalul de comunicaţie. Oricine
poate efectua verificarea calculând amprenta z = h(x) şi apoi – utilizând protocolul de verificare
a semnăturii – verK (z, y).

2.2 Funcţii de dispersie cu coliziuni tari


Deoarece semnătura foloseşte doar amprenta numerică, trebuie ca funcţia h să satisfacă câteva
condiţii pentru a evita falsificarea.
• Pentru Oscar, atacul cel mai simplu al unui mesaj (x, y) semnat de Bob
(y = sigK (h(x))) constă ı̂n calcularea z = h(x) şi căutarea unui x0 6= x cu h(x0 ) = h(x).
Dacă Oscar reuşeşte, (x0 , y) este un mesaj valid.
Pentru a ı̂mpiedica acest lucru, se pune condiţia ca h să fie cu coliziuni slabe.
Definiţia 2.1 O funcţie de dispersie h este cu coliziuni slabe dacă, fiind dat un mesaj x, este
calculabil dificil să se obţină un mesaj x0 6= x astfel ca h(x0 ) = h(x).
• Un alt atac posibil: Oscar caută două mesaje distincte x, x0 cu h(x) = h(x0 ). Îl convinge
apoi pe Bob să semneze mesajul x cu amprenta sa numerică h(x) şi obţine y. Atunci
perechea (x0 , y) este o semnătură autentică.
Acest procedeu face necesară introducerea unei alte definiţii a coliziunii.

19
20 PRELEGEREA 2. FUNCŢII DE DISPERSIE

Definiţia 2.2 O funcţie de dispersie h este cu coliziuni tari dacă este calculabil dificil să se
obţină două mesaje distincte x0 , x cu h(x0 ) = h(x).

Evident, o funcţie cu coliziuni tari este şi cu coliziuni slabe.

• Un al treilea tip de atac care poate fi iniţiat de Oscar se bazează pe observaţia că este
adesea posibil să se obţină aleator falsificări ale amprentelor numerice. Dacă Oscar obţine
astfel o semnătură validă a amprentei z, el poate căuta un mesaj x astfel ca z = h(x).
Pentru evitarea acestui atac este de dorit ca funcţia h să fie neinversabilă (ı̂n sensul folosit
la sistemele de criptare cu cheie publică).

Definiţia 2.3 O funcţie de dispersie h este neinversabilă dacă, fiind dată o amprentă numerică
z, este calculabil dificil să se găsească un mesaj x astfel ca h(x) = z.

Teorema 2.1 Fie X, Z mulţimi finite |X| ≥ 2 · |Z| (s-a notat |A| cardinalul mulţimii A) şi
h : X −→ Z o funcţie de dispersie. Se presupune că A este un algoritm de inversare a
lui h. Există atunci un algoritm probabilist Las V egas care găseşte o coliziune pentru h cu
probabilitate cel puţin 12 .

Demonstraţie: Fie A algoritmul de inversiune pentru h, de forma unui oracol A care admite la
intrare o amprentă z ∈ Z şi ı̂ntoarce un element A(z) ∈ X astfel ca h(A(z)) = z.
Să considerăm algoritmul următor (notat cu B):

1. Fie x ∈ X ales aleator;

2. z → h(x);

3. x1 → A(z)

4. if x1 6= x then x1 şi x formează o coliziune pentru h (succes)


else sfârşit (eşec)

B este un algoritm probabilist de tip Las V egas, deoarece ı̂ntoarce o coliziune sau nici un
răspuns. Deci, este suficient să calculăm probabilitatea de succes.
Pentru orice x, x1 ∈ X se defineşte x ∼ x1 dacă h(x) = h(x1 ).
Este uşor de demonstrat că ∼ este relaţie de echivalenţă. Definim
[x] = {x1 |x1 ∈ X, x ∼ x1 }
Fiecare clasă de echivalenţă [x] este formată din mesaje care produc aceeaşi amprentă ca şi
x. Numărul de clase de echivalenţă este deci cel mult |Z|. Fie C = X/ ∼ mulţimea claselor de
echivalenţă.
Presupunem că x este ales din X la pasul 1. Pentru acest mesaj pot apare la pasul 3 |[x]|
valori x1 posibile.|[x]| − 1 din ele sunt diferite de x şi duc la reuşita algoritmului ı̂n pasul 4.
|[x]| − 1
Pentru o alegere particulară a lui x, probabilitatea de succes este deci .
|[x]|
2.3. ATACUL NAŞTERILOR 21

Probabilitatea de succes a algoritmului este calculată ca medie peste toate alegerile posibile
ale lui x:

1 X |[x]| − 1 1 X X |c| − 1 1 X
P rsucces = = = (|c| − 1)
|X| x∈X |[x]| |X| c∈C x∈c |c| |X| c∈C
1 X X |X| − |Z| |X| − |X|/2 1
= ( |c| − 1) ≥ ≥ =
|X| c∈C c∈C |X| |X| 2
.
Probabilitatea de succes este deci cel puţin 12 . 2
Din această teoremă se deduce următorul rezultat:
Lema 2.1 Dacă o funcţie de dispersie este cu coliziuni tari, atunci ea este neinversabilă.

Rezultă că este suficient ca o funcţie de dispersie să fie cu coliziuni tari, aceasta implicând
celelalte două proprietăţi de securitate. De aceea, ı̂n continuare ne vom mărgini la studiul
coliziunilor tari.

2.3 Atacul naşterilor


Vom pune aici ı̂n evidenţă o condiţie de securitate, necesară relativ la lungimea amprentelor
(sau, echivalent, la mărimea lui Z). Ea rezultă dintr-o metodă simplă de obţinere a coliziunilor,
numită atacul naşterilor; numele provine de la paradoxul naşterilor care - reamintim - spune că
probabilitatea ca dintr-o mulţime aleatoare de 23 persoane să fie două cu aceeaşi zi de naştere,
este cel puţin 1/2.
Fie X, Z două mulţimi finite, |X| ≥ 2|Z| şi fie h : X −→ Z o funcţie de dispersie. Notăm
m = |X|, n = |Z|. Este uşor de arătat că există cel puţin n coliziuni, dar problema este de a le
pune ı̂n evidentă. O metodă simplă constă ı̂n a extrage aleator k mesaje distincte x1 , . . . , xk ,
de a calcula zi = h(xi ), 1 ≤ i ≤ k şi de a căuta dacă există o coliziune printre ele (ordonând zi
de exemplu).
Cum xi sunt extrase aleator, se poate considera că şi zi sunt elemente aleatoare (nu neapărat
distincte) din Z. Probabilitatea ca din k extrageri, toate elementele zi să fie distincte, se
determină astfel:
Numerele zi se ordonează; fie z1 , . . . , zk această ordine. Prima extragere z1 este total
aleatoare; probabilitatea ca z2 6= z1 este 1 − 1/n, probabilitatea ca z3 să fie distinctă de z1 şi z2
este 1 − 2/n, etc.
Probabilitatea ca să nu fie k coliziuni va fi deci:
µ ¶µ ¶ à !
1 2 k−1 Yµ
k−1
i

1− 1− ... 1 − = 1−
n n n i=1 n

Dacă x este un număr real suficient de mic, atunci se poate folosi aproximarea (rezultată din
dezvoltarea ı̂n serie M ac Laurin) 1 − x ≈ e−x . Vom obţine atunci:

k−1
i
¶ k−1
Y −i −k(k−1)
1− ≈ e n = e 2n .
i=1 n i=1
22 PRELEGEREA 2. FUNCŢII DE DISPERSIE

−k(k−1)
Probabilitatea ca să existe cel puţin o coliziune este atunci 1 − e 2n . Notând această pro-
−k(k−1)
1
babilitate cu ², se obţine ecuaţia ı̂n k : e 2n ≈ 1 − ², care conduce la k 2 − k ≈ 2n · ln 1−² .
q
1
Dacă se ignoră termenul −k, se obţine k ≈ 2n · ln 1−² .

Luând acum ² = 0.5, se ajunge la k ≈ 1.17 n.
De remarcat că alte valori pentru
√ ² conduc la valori diferite pentru k, dar multiplicate
totdeauna cu un factor constant n.

Exemplul 2.1 Dacă X este mulţimea fiinţelor umane, Z este mulţimea celor 365 zile dintr-un
an (nebisect) iar h(x) reprezintă data de naştere a persoanei x, se obţine paradoxul naşterilor.
În aproximarea de sus, cu n = 365, avem k ≈ 22.5. Deci, printre 23 persoane alese ı̂ntâmplător,
probabilitatea ca două să aibă aceeaşi zi de naştere este 1 − 1/2.

Acest tip de atac impune o margine inferioară asupra lungimii amprentelor. O amprentă
de 40 biţi este vulnerabilă la un atac al naşterilor folosind numai 220 (aproximativ un milion)
mesaje aleatoare. Se sugerează de aceea folosirea de amprente de 128 biţi (aici atacul naşterilor
va cere 264 calcule). Alegerea de 160 biţi ı̂n cazul DSS (DSA) este deci judicioasă.

2.4 Funcţii de dispersie şi logaritmi discreţi


Funcţia de dispersie prezentată ı̂n această secţiune a fost definită ı̂n [2]. Ea nu este suficient de
rapidă pentru aplicaţii practice dar constituie un exemplu foarte simplu de funcţie de dispersie
care admite o probă de securitate pe o ipoteză rezonabilă. Forma sa este:
Fie p un număr prim mare astfel ca q = (p − 1)/2 să fie de asemenea prim.
Fie α, β ∈ Zp două elemente primitive.
Valoarea logα β nu este publică şi se presupune că este dificil de obţinut.
Funcţia de dispersie Chaum-van Heijst-Pfitzmann h : Zq × Zq −→ Zp∗ este definită prin:
h(x1 , x2 ) = αx1 β x2 (mod p)

Teorema 2.2 Fiind dată o coliziune pentru funcţia de dispersie Chaum-van Heijst-Pfitzmann,
calculul lui logα β este uşor.

Demonstraţie: Să presupunem că a apărut o coliziune


h(x1 , x2 ) = h(x3 , x4 ) cu (x1 , x2 ) 6= (x3 , x4 ).
Avem deci α β ≡ αx3 β x4 (mod p), sau αx1 −x3 ≡ β x4 −x2 (mod p).
x1 x2

Vom nota d = (x4 −x2 , p−1). Cum p−1 = 2q cu q număr prim, vom avea d ∈ {1, 2, q, p−1}.
Să trecem ı̂n revistă fiecare din aceste patru posibilităţi.

• d = 1 Notând y = (x4 − x2 )−1 (mod p − 1), vom avea


β ≡ β (x4 −x2 )y (mod p) ≡ α(x1 −x3 )y (mod p)
şi se poate calcula logaritmul discret logα β = (x1 − x3 )(x4 − x2 )−1 (mod p − 1).

• d = 2 Deoarece p − 1 = 2q, q prim, vom avea (x4 − x2 , q) = 1. Notăm y = (x4 −


x2 )−1 (mod q), deci (x4 − x2 )y = kq + 1 pentru un număr ı̂ntreg k. Calculând, se obţine
2.5. EXTENSIA UNEI FUNCŢII DE DISPERSIE 23

β (x4 −x2 )y ≡ β kq+1 (mod p) ≡ (−1)k β (mod p) ≡ ±β (mod p)


deoarece β q ≡ −1 (mod p).
Deci, α(x1 −x3 )y ≡ β (x4 −x2 )y (mod p) ≡ ±β (mod p).
De aici se deduce logα β = (x1 − x3 )(x4 − x2 )−1 (mod p − 1), sau
logα β = (x1 − x3 )(x4 − x2 )−1 + q (mod p − 1).
Se poate verifica uşor care din aceste două rezultate este cel corect.

• d = q Din 0 ≤ x2 ≤ q − 1, 0 ≤ x4 ≤ q − 1 rezultă − (q − 1) ≤ x4 − x2 ≤ q − 1.
Este deci imposibil să avem (x4 − x2 , p − 1) = q.

• d = p − 1 Aceasta se poate numai dacă x4 = x2 . Avem atunci


αx1 β x2 ≡ αx3 β x2 (mod p), deci αx1 ≡ αx3 (mod p), de unde rezultă x1 = x3 .
S-a ajuns la (x1 , x2 ) = (x3 , x4 ), ceea ce contrazice ipoteza.

În concluzie, h este cu coliziuni tari, depinzând de calculul lui logα β ı̂n Zp . 2

Exemplul 2.2 Să luăm p = 12347, deci q = 6173, α = 2, β = 8461.


Presupunem că s-a găsit coliziunea α5692 β 144 ≡ α212 β 4214 (mod 12347).
Deci x1 = 5692, x2 = 144, x3 = 212, x4 = 4214. Avem (x4 − x2 , p − 1) = 2
şi se ı̂ncepe calculul:
y = (x4 − x2 )−1 (mod q) = (4214 − 144)−1 (mod 6173) = 4312.
Calculăm apoi y 0 = (x1 − x3 )y (mod p − 1) = (5692 − 212)4312 (mod 12346) = 11862.
Se obţine logα β ∈ {y 0 , y 0 + q (mod p − 1)}.
0
Într-adevăr, αy (mod p) = 211862 (mod 12346) = 9998, deci
logα β = y 0 + q (mod p − 1) = 11862 + 6173 (mod 12346) = 5689.
Se verifică imediat că 25689 ≡ 8461 (mod 12347).

2.5 Extensia unei funcţii de dispersie


Ideile acestui paragraf sunt bazate pe lucrarea [3]. În [7] se află construită o idee asemănătoare.
Să vedem cum poate fi extinsă o funcţie de dispersie pe un domeniu infinit, păstrând propri-
etatea de a fi cu coliziuni tari; avantajul unei asemenea situaţii este acela că se pot semna
mesaje de lungime arbitrară.
Fie h : Z2m −→ Z2t o funcţie de dispersie cu coliziuni tari, cu m ≥ t + 1. Scopul este de a

[
construi o funcţie h∗ : X −→ Z2t , unde X = Z2i .
i=m
Să considerăm la ı̂nceput cazul m ≥ t + 2.
Fiecare element al lui X este codificat printr-un şir de biţi; vom nota lungimea şirului x cu
|x|, iar concatenarea a două şiruri x, y ∈ X cu xky. Fie |x| = n ≥ m; atunci x se poate scrie
sub forma:
x = x1 kx2 k . . . kxk
unde |x1 | = |x2 | = . . . =»|xk−1 | = m¼− t − 1, |xk | = m − t − 1 − d, 0 ≤ d ≤ m − t − 2.
n
În acest fel se obţine k = . Definim funcţia h∗ (x) folosind algoritmul următor:
m−t−1
24 PRELEGEREA 2. FUNCŢII DE DISPERSIE

1. for i := 1 to k − 1 do yi ← xi

2. yk ← xk k0d

3. yk+1 ← [d]2 (reprezentarea binară a lui d pe m − t − 1 biţi).

4. g1 ← h(0t+1 ky1 )

5. for i = 1 to k do gi+1 ← h(gi k1kyi+1 )

6. h∗ (x) ← gk+1

Notăm y(x) = y1 ky2 k . . . kyk+1 . yk se obţine completând xk la dreapta cu d zerouri, astfel ca


toate blocurile yi (1 ≤ i ≤ k) să fie de lungime m − t − 1. De asemenea, la pasul 3, yk+1 este
completat la stânga cu zerouri pentru a obţine lungimea m − t − 1.
Pentru dispersia lui x se construieşte y(x) apoi se tratează iterativ blocurile y1 , y2 , . . . , yk+1 .
Din construcţia lui yk+1 se asigură injectivitatea aplicaţiei y.

Teorema 2.3 Fie h : Z2m −→ Z2t (m ≥ t + 2) o funcţie de dispersie cu coliziuni tari. Funcţia

[
h∗ : Z2i −→ Z2t definită prin algoritmul de mai sus, este de asemenea cu coliziuni tari.
i=m

Demonstraţie: Să presupunem prin absurd că există x 6= x0 astfel ca h∗ (x) = h∗ (x0 ). Vom arăta
cum, plecând de la această coliziune se poate construi ı̂n timp polinomial o coliziune pentru h,
lucru imposibil deoarece h este cu coliziuni tari.
Fie y(x) = y1 ky2 k . . . kyk+1 şi y(x0 ) = y 01 ky 02 k . . . ky 0s+1 , unde x şi x0 sunt completate la pasul
2 cu d respectiv d0 zerouri. S-a notat cu g1 , . . . , gk+1 respectiv g 01 , . . . , g 0s+1 valorile calculate de
paşii 4 şi 5. Apar două cazuri:
Cazul 1. |x| 6≡ |x0 | (mod m − t − 1).
Atunci d 6= d0 , yk+1 6= y 0s+1 . Avem:
h(gk k1kyk+1 ) = gk+1 = h∗ (x) = h∗ (x0 ) = g 0s+1 = h(g 0s k1ky 0s+1 ),
care este o coliziune pentru h deoarece yk+1 6= y 0s+1 .
Cazul 2. |x| ≡ |x0 | (mod m − t − 1)
Aici trebuiesc studiate două subcazuri:
Cazul 2a. |x| = |x0 |. Atunci k = s, yk+1 = y 0s+1 . Similar primului caz,
h(gk k1kyk+1 ) = gk+1 = h∗ (x) = h∗ (x0 ) = g 0k+1 = h(g 0k k1ky 0k+1 ).
Dacă gk 6= g 0k , s-a aflat o coliziune pentru h. Să presupunem deci că gk = g 0k . Vom avea:
h(gk−1 k1kyk ) = gk = g 0k = h(g 0k−1 k1ky 0k ).
Fie s-a găsit o coliziune pentru h, fie gk−1 = g 0k−1 , yk = y 0k . Dacă nu a fost coliziune, se
poate continua până la h(0t+1 ky1 ) = g1 = g 01 = h(0t+1 ky 01 ).
Cum y1 6= y 01 ı̂nseamnă coliziune pentru h, să presupunem y1 = y 01 . Vom avea yi = y 0i (1 ≤
i ≤ k + 1) deci y(x) = y(x0 ).
Cum aplicaţia y este injectivă, rezultă x = x0 , ceea ce contrazice ipoteza.
Cazul 2b. |x| 6= |x0 |.
2.5. EXTENSIA UNEI FUNCŢII DE DISPERSIE 25

Se poate presupune, fără a micşora generalitatea, că |x| < |x0 |, deci s > k. Vom proceda
similar cu subcazul 2a. Dacă nu s-au găsit coliziuni pentru h, se va obţine şirul de egalităţi
h(0t+1 ky1 ) = g1 = g 0s−k+1 = h(g 0s−k k1ky 0s−k+1 ).
Primii t+1 biţi din 0t+1 ky1 conţin numai zerouri ı̂n timp ce primii t+1 biţi din g 0s−k k1ky 0s−k+1
conţin un 1. Deci s-a găsit o coliziune pentru h.
Rezultă că pentru toate cazurile studiate, s-a ajuns la coliziuni. 2

Algoritmul pe care s-a construit toată demonstraţia de sus este adevărat numai dacă
m ≥ t + 2. Rămâne cazul m = t + 1; aici se va realiza o construcţie diferită pentru h∗ .
Ca anterior, fie |x| = n ≥ m.
Vom ı̂ncepe prin a codifica x folosind funcţia f definită f (0) = 0, f (1) = 01.
Construcţia lui h∗ se face pe baza următorului algoritm:

1. y ← y1 ky2 k . . . kyk = 11kf (x1 )kf (x2 )k . . . kf (xn ) (yi ∈ Z2 )


2. g1 ← h(0t ky1 )
3. for i = 1 to k − 1 do gi+1 ← h(gi kyi+1 )
4. h∗ (x) ← gk

Codificarea x 7→ y = y(x) din pasul 1 verifică câteva proprietăţi importante:


• y este injectivă

• y este liberă de prefix: nu există x, x0 , z astfel ca y(x) = zky(x0 )

Teorema 2.4 Fie h : Z2t+1 → Z2t o funcţie de dispersie cu coliziuni tari.



[
Funcţia h∗ : Z2i → Z2t este de asemenea cu coliziuni tari.
i=t+1

Demonstraţie: Să presupunem prin absurd că există x 6= x0 cu h∗ (x) = h∗ (x0 ). Vom avea
y(x) = y1 y2 . . . yk , y(x0 ) = y 01 y 02 . . . y 0s .
Apar două cazuri:
Cazul 1. k = s Similar cu demonstraţia teoremei anterioare, se găseşte fie o coliziune
pentru h, fie y(x) = y(x0 ), ceea ce duce la x = x0 , contradicţie.
Cazul 2. k 6= s Vom considera situaţia s > k. Modul de abordare a acestui caz este
similar cu cele de mai sus. Presupunând că nu s-au găsit coliziuni pentru h, se obţine şirul de
identităţi
yk = y 0s , yk−1 = y 0s−1 , . . . y1 = y 0s−k+1 ,
ceea ce contrazice faptul că codificarea este liberă de prefix.
Deci h este cu coliziuni tari. 2
Să rezumăm ı̂ntr-o singură teoremă rezultatele obţinute:
Teorema 2.5 Fie h : Z2m → Z2t , (m ≥ t + 1) o funcţie de dispersie cu coliziuni tari. Există

[
atunci o funcţie de dispersie cu coliziuni tari h∗ : Z2i → Z2t .
i=m

Numărul
» de calcule¼ al lui h pentru efectuarea unei aplicări a lui h este cel mult
n
1+ dacă m ≥ t + 2, 2n + 2 dacă m = t + 1,
m−t−1
unde |x| = n.
26 PRELEGEREA 2. FUNCŢII DE DISPERSIE

2.6 Funcţie de dispersie bazată pe criptare


Ideea acestui paragraf este luată din [9].
Până acum, metodele de construcţie ale funcţiilor de dispersie studiate sunt prea lente
pentru o utilizare practică. O altă idee constă ı̂n folosirea unui sistem de criptare pentru a
genera o funcţie de dispersie.
Să presupunem că (P, C, K, E, D) este un sistem de criptare. În acest paragraf vom lua
P = C = K =Z2n . Pentru evitarea atacului naşterilor se va lua n ≥ 128 (deci nu se poate folosi
DES).
Fie şirul de biţi x = x1 kx2 k . . . kxk , xi ∈ Z2n 1 ≤ i ≤ k. Dacă numărul de biţi nu este
multiplu de n, x se va completa ca ı̂n paragraful anterior; pentru simplificare, nu vom trata
aici această chestiune.
Ideea construcţiei constă ı̂n fixarea unei valori iniţiale g0 şi calcularea iterativ a lui g1 , g2 , . . . ,
gk astfel ca gi = f (xi , gi−1 ), unde f este o funcţie care utilizează regulile de criptare. Rezultatul
final al dispersiei este amprenta h(x) = gk .
Au fost propuse mai multe funcţii de dispersie, unele din ele fiind sparte (independent de
sistemul de criptare utilizat). În acest moment, se pare că următoarele patru cazuri asigură o
anumită siguranţă:
gi = egi−1 (xi ) ⊕ xi
gi = egi−1 (xi ) ⊕ xi ⊕ gi−1
gi = egi−1 (xi ⊕ gi−1 ) ⊕ xi
gi = egi−1 (xi ⊕ gi−1 ) ⊕ xi ⊕ gi−1

2.7 Funcţia de dispersie MD4


Această funcţie a fost introdusă de Rivest ı̂n 1990 ([10]), iar ı̂n 1991 a fost prezentată o ver-
siune mai sigură, MD5. Standardul de dispersie, SHS (Secure Hash Standard), bazat pe
aceleaşi idei a fost publicat ı̂n Federal Register din 31 ianuarie 1992 şi adoptat ca standard la
11 mai 1993 ([8]). La 11 iulie 1994 a fost făcută o mică modificare pentru a corija o slăbiciune
tehnică (menţinută secretă). Toate aceste funcţii de dispersie au avantajul de a fi foarte rapide,
deci practice ı̂n semnarea de mesaje lungi.
În acest paragraf vom descrie MD4, cu modificările aduse ı̂n MD5 şi SHS.
Fiind dat un şir de biţi x, se defineşte tabloul M = M0 M1 . . . MN −1 cu fiecare Mi (numit
cuvânt) de lungime 32 şi N ≡ 0 (mod 16).
M este construit folosind algoritmul următor:

1. d ←− (447 − |x|) (mod 512)

2. s ←− reprezentarea binară a lui |x| (mod 264 ), |s| = 64

3. M = xk1k0d ks

Să descriem acum calculul amprentei numerice, codificată pe 128 biţi. Algoritmul de gene-
rare este:
2.7. FUNCŢIA DE DISPERSIE MD4 27

1. A ←− 67452301 (hex) B ←− ef cdab89 (hex)


C ←− 98badcf e (hex) D ←− 10325476 (hex)
2. for i = 0 to N/16 − 1 do
3. for j = 0 to 15 do Xj ←− M16i+j
4. AA ←− A BB ←− B CC ←− C DD ←− D
5. Etapa 1
6. Etapa 2
7. Etapa 3
8. A ←− A + AA B ←− B + BB
C ←− C + CC D ←− D + DD
enddo
enddo
Amprenta numerică este ı̂n final concatenarea celor patru cuvinte A, B, C, D (numite re-
gistre). Algoritmul ı̂mparte tabelul M ı̂n şiruri de câte 16 cuvinte consecutive, cărora le aplică
trei etape de transformări (ca la DES). Adunările de la pasul 8 sunt efectuate modulo 232 .
Cele trei etape de transformări sunt distincte (spre deosebire de DES, unde cele 16 etape
erau identice).
Fie α, β două cuvinte de lungimi egale. Etapele de transformări vor folosi următoarele
operaţii:

• α∧β şi logic bit cu bit (AN D)

• α∨β sau logic bit cu bit (OR)

• α⊕β sau exclusiv bit cu bit (XOR)

• ¬α complementara bit cu bit (N OT )

• α+β suma modulo 232

• α¿s rotirea circulară cu s biţi spre stânga (1 ≤ s ≤ 31)

Aceste operaţii sunt extrem de rapide şi pot fi implementate direct ţinând cont de arhitectura
calculatorului. Să detaliem puţin acest lucru.
Fie a1 a2 a3 a4 un cuvânt de patru octeţi şi ai un număr ı̂ntreg din intervalul [0, 255].

• Într-o arhitectură big-endian (o staţie SP ARK de exemplu), un cuvânt reprezintă ı̂ntregul


a1 224 + a2 216 + a3 28 + a4

• Într-o arhitectură little-endian (cum este familia Intel 80xxx), un cuvânt reprezintă
ı̂ntregul a4 224 + a3 216 + a2 28 + a1

Construcţia standard a lui MD4 a folosit o arhitectură little-endian. Cum amprenta nu-
merică trebuie să fie independentă de arhitectura calculatorului folosit, la o implementare a lui
MD4 pe un calculator big-endian, adunările se vor defini astfel:

1. Se inter-schimbă x1 ↔ x4 , x2 ↔ x3 , y1 ↔ y4 , y2 ↔ y3

2. Se calculează Z = X + Y (mod 232 )


28 PRELEGEREA 2. FUNCŢII DE DISPERSIE

3. Se inter-schimbă z1 ↔ z4 , z2 ↔ z3

Cele trei etape de construcţie ale funcţiei de dispersie MD4 folosesc trei funcţii f, g şi respectiv
h, definite astfel:
f (X, Y, Z) = (X ∧ Y ) ∨ ((¬X) ∧ Z)
g(X, Y, Z) = (X ∧ Y ) ∨ (X ∧ Z) ∨ (Y ∧ Z)
h(X, Y, Z) = X ⊕ Y ⊕ Z
Descrierile celor trei etape sunt:
Etapa 1:
1. A ←− (A + f (B, C, D) + X[0]) ¿ 3 9. A ←− (A + f (B, C, D) + X[8]) ¿ 3
2. D ←− (D + f (A, B, C) + X[1]) ¿ 7 10. D ←− (D + f (A, B, C) + X[9]) ¿ 7
3. C ←− (C + f (D, A, B) + X[2]) ¿ 11 11. C ←− (C + f (D, A, B) + X[10]) ¿ 11
4. B ←− (B + f (C, D, A) + X[3]) ¿ 19 12. B ←− (B + f (C, D, A) + X[11]) ¿ 19
5. A ←− (A + f (B, C, D) + X[4]) ¿ 3 13. A ←− (A + f (B, C, D) + X[12]) ¿ 3
6. D ←− (D + f (A, B, C) + X[5]) ¿ 7 14. D ←− (D + f (A, B, C) + X[13]) ¿ 7
7. C ←− (C + f (D, A, B) + X[6]) ¿ 11 15. C ←− (C + f (D, A, B) + X[14]) ¿ 11
8. B ←− (B + f (C, D, A) + X[7]) ¿ 19 16. B ←− (B + f (C, D, A) + X[15]) ¿ 19
Etapa 2:
1. A ←− (A + g(B, C, D) + X[0] + P ) ¿ 3 9. A ←− (A + g(B, C, D) + X[2] + P ) ¿ 3
2. D ←− (D + g(A, B, C) + X[4] + P ) ¿ 5 10. D ←− (D + g(A, B, C) + X[6] + P ) ¿ 5
3. C ←− (C + g(D, A, B) + X[8] + P ) ¿ 9 11. C ←− (C + g(D, A, B) + X[10] + P ) ¿ 9
4. B ←− (B+g(C, D, A)+X[12]+P ) ¿ 13 12. B ←− (B+g(C, D, A)+X[14]+P ) ¿ 13
5. A ←− (A + g(B, C, D) + X[1] + P ) ¿ 3 13. A ←− (A + g(B, C, D) + X[3] + P ) ¿ 3
6. D ←− (D + g(A, B, C) + X[5] + P ) ¿ 5 14. D ←− (D + g(A, B, C) + X[7] + P ) ¿ 5
7. C ←− (C + g(D, A, B) + X[9] + P ) ¿ 9 15. C ←− (C + g(D, A, B) + X[11] + P ) ¿ 9
8. B ←− (B+g(C, D, A)+X[13]+P ) ¿ 13 16. B ←− (B+g(C, D, A)+X[15]+P ) ¿ 13
unde s-a notat P = 5A827999.
Etapa 3:
1. A ←− (A + h(B, C, D) + X[0] + P ) ¿ 3 9. A ←− (A + h(B, C, D) + X[1] + P ) ¿ 3
2. D ←− (D + h(A, B, C) + X[8] + P ) ¿ 9 10. D ←− (D + h(A, B, C) + X[9] + P ) ¿ 9
3. C ←− (C + h(D, A, B) + X[4] + P ) ¿ 11 11. C ←− (C + h(D, A, B) + X[5] + P ) ¿ 11
4. B ←− (B +h(C, D, A)+X[12]+P ) ¿ 15 12. B ←− (B +h(C, D, A)+X[13]+P ) ¿ 15
5. A ←− (A + h(B, C, D) + X[2] + P ) ¿ 3 13. A ←− (A + h(B, C, D) + X[3] + P ) ¿ 3
6. D ←− (D + h(A, B, C) + X[10] + P ) ¿ 9 14. D ←− (D + h(A, B, C) + X[11] + P ) ¿ 9
7. C ←− (C + h(D, A, B) + X[6] + P ) ¿ 11 15. C ←− (C + h(D, A, B) + X[7] + P ) ¿ 11
8. B ←− (B +h(C, D, A)+X[14]+P ) ¿ 15 16. B ←− (B +h(C, D, A)+X[15+P ]) ¿ 15
unde P = 6ED9EBA1.
La puţin timp după construcţia sa, s-a observat o slăbiciune atunci când se omitea prima
sau a treia etapă. De aceea, ı̂n 1991 se propune MD5 ca o versiune ı̂mbunătăţită. MD5
foloseşte patru etape ı̂n loc de trei, cu preţul unei viteze mai lente.
SHS este mai complex şi mai lent decât primele două. Nu s-a dat niciodată o descriere
completă a sa, dar s-au indicat câteva modificări aduse faţă de sistemul MD4:

• SHS este construit pentru o arhitectură big-endian;


2.8. FUNCŢIA DE DISPERSIE SHA1 29

• SHS utilizează cinci registre şi produce o amprentă de 160 biţi;


• SHS tratează iterativ 16 cuvinte (ca MD4), dar după ce le-a extins pe 80 cuvinte; ı̂n
acest fel, fiecare din cele 80 cuvinte este prelucrat o singură dată.
Se utilizează o funcţie de expansiune definită prin procedeul următor:
Fie X0 , X1 , . . . , X15 o secventă de 16 cuvinte. La ea se adaugă ı̂ncă 64 cuvinte, folosind relaţia
de recurenţă:
Xj = Xj−3 ⊕ Xj−8 ⊕ Xj−14 ⊕ Xj−16 16 ≤ j ≤ 79
Revizuirea lui SHS s-a referit la această funcţie de expansiune. Relaţia precedentă s-a
ı̂nlocuit cu:
Xj = (Xj−3 ⊕ Xj−8 ⊕ Xj−14 ⊕ Xj−16 ) ¿ 1 16 ≤ j ≤ 79

2.8 Funcţia de dispersie SHA1


Deoarece coliziunile din funcţiile de compresie MD4 şi MD5 au fost descoperite şi făcute
publice, a fost nevoie de algoritmi noi de dispersie.
SHA (Secure Hash Algoritm) este o variantă a lui MD4, propus ca standard de N IST ı̂n
1993 şi adoptat sub titulatura oficială F IP S 180. SHA1 este o variantă notată F IP S 180 − 1
care corectează o mică slăbiciune din SHA.
Fie x şirul care trebuie prelucrat. O condiţie preliminară este |x| ≤ 264 − 1. Prima parte a
algoritmului este identică cu cea de la MD4:

1. d ←− (447 − |x|) (mod 512)

2. s ←− reprezentarea binară a lui |x| (mod 264 ), |s| = 64

3. M = xk1k0d ks

Dacă |s| < 64, se adaugă zerouri la stânga până se ajunge la egalitate. Blocul final M (care
intră ı̂n algoritmul de dispersie) are o lungime divizibilă cu 512; ı̂l vom scrie ca o concatenare
de n blocuri, fiecare de 512 biţi.
y = M1 kM2 k . . . kMn
Definim funcţiile f0 , f1 , . . . , f79 astfel:


 (B ∧ C) ∨ ((¬B) ∧ D) 0 ≤ t ≤ 19

B⊕C ⊕D 20 ≤ t ≤ 39
ft (B, C, D) =


 (B ∧ C) ∨ (B ∧ D) ∨ (C ∧ D) 40 ≤ t ≤ 59

B⊕C ⊕D 60 ≤ t ≤ 79
Deci fiecare funcţie ft ia trei cuvinte la intrare şi scoate un cuvânt la ieşire.
Se mai definesc cuvintele constante K0 , K1 , . . . , K79 folosite ı̂n calculul lui SHA1(x) astfel:


 5A827999 0 ≤ t ≤ 19

 6ED9EBA1 20 ≤ t ≤ 39
Kt =
 8F 1BBCDC 40 ≤ t ≤ 59



CA62C1D6 60 ≤ t ≤ 79
30 PRELEGEREA 2. FUNCŢII DE DISPERSIE

Algoritmul de compresie SHA1(x) este:


1. H0 ←− 67452301, H1 ←− EF CDAB89, H2 ←− 98BADCF E,
H3 ←− 10325476, H4 ←− C3D2E1F 0.
2. for i ←− 1 to n do
2.1 Fie Mi = W0 kW1 k . . . kW15 , Wi cuvânt.
2.2 for t ←− 16 to 79 do
Wt ←− Wt−3 ⊕ Wt−8 ⊕ Wt−14 ⊕ Wt−16 ¿ 1
2.3 A ←− H0 , B ←− H1 , C ←− H2 , D ←− H3 , E ←− H4
2.4 for t ←− 0 to 79 do
2.4.1 temp ←− (A ¿ 5) + ft (B, C, D) + E + Wt + Kt
2.4.2 E ←− D, D ←− C, C ←− (B ¿ 30), B ←− A
2.4.3 A ←− temp
2.5 H0 ←− H0 +A, H1 ←− H1 +B, H2 ←− H2 +C, H3 ←− H3 +D, H4 ←− H4 +E
3. Ieşire: H0 kH1 kH2 kH3 kH4 .
Algoritmul de compresie SHA1 formează pentru fiecare bloc de 512 biţi un bloc de 160 biţi.
Algoritmul original SHA avea o slabiciune care permitea aflarea coliziunilor ı̂n aproximativ
61
2 paşi. Versiunea SHA1 este mai eficientă, atacul naşterilor conducând la aflarea coliziunilor
abia după 280 paşi, ceea ce ı̂n momentul actual este considerat suficient de sigur.
La 30 mai 2001 N IST propune o nouă versiune SHA2; aceasta include SHA1 precum
şi alte trei funcţii de dispersie SHA256 , SHA384 , SHA512 . La ultimele trei funcţii, indicele
256, 384, 512 se referă la mărimile mesajului comprimat.

2.9 Datare
Problema datării a fost introdusă şi studiată ı̂n [1] şi [6]. Ea se referă la faptul că, datorită
timpului lung cât poate fi utilizat un document, orice semnătură poate fi spartă. Odată ce Oscar
descoperă algoritmul de semnătură, este pusă ı̂n discuţie autenticitatea tuturor mesajelor.
Un alt scenariu nedorit este următorul: Bob semnează un mesaj, apoi publică secretul
semnăturii şi şi-o reneagă declarând că a fost construită de altcineva.
Toate aceste probleme pot fi rezolvate dacă se introduce şi un procedeu de datare a semnătu-
rii, care constituie o probă că un document a fost semnat la o anumită dată. În acest fel, dacă
secretul lui Bob a fost compromis, aceasta nu afectează semnăturile anterioare. Principiul
cărţilor de credit este similar: o carte de credit anunţată unei bănci ca pierdută, este anulată
fără ca aceasta să afecteze plăţile anterioare făcute pe baza ei.
Vom prezenta aici câteva procedee de datare. În primul rând, Bob poate construi el singur o
datare. Pentru aceasta, el poate ı̂ncepe prin a colecta un anumit număr de informaţii publicate
recent (care nu ar fi putut fi prezise). De exemplu, poate da rezultatele unei etape de fotbal,
cursul dolarului la o anumită bancă, etc. Vom nota această informaţie pub.
Să presupunem acum că Bob vrea să dateze semnătura unui mesaj x. Dacă h este o funcţie
de dispersie publică, Bob va urma algoritmul următor:
1. Bob calculează z = h(x);
2. Bob calculează z 0 = h(zkpub);
3. Bob calculează y = sigK (z 0 );
4. Bob publică ı̂ntr-un ziar din ziua următoare (z, pub, y).
2.10. EXERCIŢII 31

Prezenţa informaţiei pub arată că Bob nu a putut calcula y ı̂nainte de data ı̂n discuţie.
Faptul că y este publicat ı̂ntr-un cotidian de a doua zi asigură faptul că Bob nu a putut calcula
y după data apariţiei ziarului. Astfel, data semnăturii lui Bob este restrânsă la un interval de
o zi. De remarcat că Bob nu dezvăluie ı̂n acest fel mesajul x, deoarece a fost publicat numai z.

Dacă există un serviciu oficial de datare (un fel de notar public electronic), se poate construi
un alt procedeu. Bob calculează z = h(x) şi y = sigK (z), apoi supune (z, y) serviciului de
datare. Acesta adaugă o dată D şi semnează tripletul (z, y, D). În acest fel, Bob poate certifica
că a semnat ı̂nainte de o anumită dată. Pentru a arăta că a semnat după o anumită dată, el
poate adăuga ı̂n semnătură o anumită informaţie publică pub.
Este posibil ca Bob să nu aibă ı̂ncredere ı̂n serviciul public de datare. Atunci el poate creşte
securitatea legând secvenţial toate mesajele datate. Mai detaliat: Bob trimite serviciului de
datare un triplet (z, y, ID(BOB)), unde z este amprenta numerică a lui x, y este semnătura
sa, iar ID(BOB) este o informaţie care ı̂l identifică pe Bob. Serviciul va data secvenţa de astfel
de triplete. Dacă (zn , yn , IDn ) este al n-lea triplet, fie tn data atribuită lui. Serviciul va data
acest triplet după algoritmul:

1. Serviciul calculează Ln = (tn−1 , IDn−1 , zn−1 , yn−1 , h(Ln−1 ));

2. Serviciul calculează Cn = (n, tn , zn , yn , IDn , Ln );

3. Serviciul calculează sn = sigserviciu (h(Cn ));

4. Serviciul ı̂napoiază lui IDn (Cn , sn , IDn+1 );

Aici Ln reprezintă informaţia de legătură ı̂ntre tripletele n şi n − 1 (L0 este fixat arbitrar la
iniţializarea protocolului).

2.10 Exerciţii
2.1 Fie h : X → Y o funcţie de dispersie. Pentru orice y ∈ Y notăm h−1 (y) = {x|h(x) = y}
şi sy = |h−1 (y)|. Fie
N = |{{x1 , x2 }|x1 6= x2 , h(x1 = h(x2 )}|
N este numărul perechilor din X care formează o coliziune pentru h.
X
• Arătaţi relaţia sy = |X|.
y∈Y
|X|
Astfel, se poate defini media elementelor sy prin s = |Y |
.

X 1 X 2 |X|
• Arătaţi relaţia N = Cs2y = s − .
y∈Y 2 y∈Y y 2

X |X|2
• Arătaţi relaţia (sy − s)2 = 2N = |X| − .
y∈Y |Y |
32 PRELEGEREA 2. FUNCŢII DE DISPERSIE

à !
1 |X|2
• Deduceţi inegalitatea N ≤ − |X| .
2 |Y |
|X|
Arătaţi ca avem egalitate dacă şi numai dacă sy = pentru orice y ∈ Y .
|Y |

2.2 Fie p = 15083, α = 154, β = 2307 parametrii pentru funcţia de dispersie Chaum - van
Heijst - Pfitzmann. Fiind dată coliziunea α7431 β 5564 ≡ α1459 β 954 (mod p), calculaţi logα β.

2.3 ([5]) Fie n = pq unde p, q sunt numere prime distincte (secrete) astfel ı̂ncât p = 2p1 +
1, q = 2q1 + 1, p, q numere prime. Fie α ∈ Zn∗ un element de ordin 2p1 q1 (acesta este ordinul
maximal ı̂n Zn ). Se defineşte funcţia de dispersie h : {1, . . . , n2 } → Zn∗ prin
h(x) = αx (mod n).
Să presupunem n = 603241, α = 11 şi că s-a găsit tripla coliziune
h(1294755) = h(80115359) = h(52738737).
Utilizaţi această informaţie pentru a factoriza n.

2.4 Fie h1 : Z22m → Z2m o funcţie de dispersie cu coliziuni tari.

• Fie h2 : Z24m → Z2m definită prin regulile:

– scrie x ∈ Z24m sub forma x = x1 kx2 , x1 , x2 ∈ Z22m ;


– defineşte h2 (x) = h1 (h1 (x1 )kh1 (x2 )).

Arătaţi că h2 este cu coliziuni tari.


i
• Pentru orice număr ı̂ntreg i ≥ 2 se defineşte funcţia de dispersie hi : Z22 m → Z2m definită
recursiv prin regulile:
i i−1 m
– scrie x ∈ Z22 m sub forma x = x1 kx2 , x1 , x2 ∈ Z22 ;
– defineşte hi (x) = h1 (hi−1 (x1 )khi−1 (x2 )).

Arătaţi că hi este cu coliziuni tari.

2.5 Folosind funcţia de expansiune originală pentru SHS, exprimaţi valorile X16 , . . . , X79 ı̂n
funcţie de X0 , . . . , X15 .
Pentru orice pereche (Xi , Xj ), 1 ≤ i < j ≤ 15 scrieţi un program care să determine numărul
λi,j de valori Xk (16 ≤ k ≤ 79) cu proprietatea că Xi şi Xj apar ambele ı̂n scrierea lui Xk . Ce
valori poate lua λi,j ?
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 discrete algo-
rithms, 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 Publishing 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.

33

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