Sunteți pe pagina 1din 10

Funcii de dispersie(hash)

CUPRINS

Functii de dispersie.............................................................................................................................3

Atacul zilelor de nastere.....................................................................................................................4

Transformarea Merkle-Damgard.......................................................................................................5

Secure Hash Algorithm 1(SHA1)......................................................................................................6

1 Preprocesare.........................................................................................................................................7

2 Pseudocod.............................................................................................................................................8

Bibliografie.............................................................................................................................................9

2
Functii de dispersie

O functie de dispersie este in esenta o functie de compresie al carei principal scop este
asocierea unor date de dimensiuni arbitrare valori de dimensiune fixa. Cu ajutorul ei se
construieste o amprenta, care poate fi considerata o reprezentare unica a mesajului.
Pentru o functie de dispersie h : X Y, din punct de vedere al securitatii
criptografice este important ca unica metoda de a obtine o pereche valida (x, y) X Y
ese de a alexe un x si apoi de a calcula y = h(x). Acest lucru este implicat de conditia ca
urmatoarele 3 probleme sa fie dificile:
Non-inversabila: fiind dat un y Y ese dificil de aflat x X inca y = f(x)

Coliziuni slabe: Fiind data o pereche valida (x, y) este dificil de aflat x1 x cu h(
x 1 = h(x)

Coliziuni: Este greu de aflat doua valori distincte x 1 , x X astfel incat h(x) = h(
x1

Prin dificil se intelege ca pentru rezolvarea problemei respective nu se cunosc decat algoritmi de
complexitate mare , eventual problema este NP - completa
Aplicatii ale functiilor de dispersie:
1. Verificarea integritatii fisierelor sau a mesajelor
O aplicatie importanta a functiilor sigure de hashing este verificarea integritatii unui mesaj.
Se poate determina daca au fost facute schimbari pe un fisier, de exemplu, prin compararea
unui message digest anterior, si dupa, in urma intamplarii un eveniment.
2. Verificarea parolelor
Stocarea parolelor ca text simplu poate rezulta in o bresa de securitate grava daca fisierul
continand parolele e compromis. O modalitate de a reduce acest risc este de a retine
hash-ul fiecarei parole. Pentru a autentifica un user, functia de hash este aplicata valorii
introduse de acesta si comparata cu valoarea stocata. Deseori parola este concatenata cu o
valoare generata aleator(salt) inainte ca functia de hash sa fie aplicata. Valoarea generata
aleatoreste stocata impreuna cu hashul parolei. Aceasta procedura vine ca o solutie de a
evita un atac folosind o tabela de valori precalculate
3. Proof of work
Un protocol proof of work e o masura de a preveni atacuri(DOS) si alte abuzuri precum
spamurile prin a-i cere solicitantului sa execute un job care necesita timp de procesare.
Expeditorului i se cere sa gaseasca un mesaj a carui valoare incepe cu un numar de zero.
Efortul din partea expiditorului este exponential in functie de numarul de biti in vreme ce
destinatarul poate verifica validitatea mesajului prin aplicare unei functii de hash.

3
Atacul zilelor de nastere

De cati oameni este nevoie sa se afla in o camera incat sa existe o sansa de 50% ca doi dintre ei
sa fie nascuti in aceeasi zi a anului?

Analiza
Indexam oamenii din camera cu intregii 1,2, k, unde k este numarul total. Vom
considera ca numarul de zile dintr-un an n=365 si ca zilele de nastere sunt uniform distribuite
astfel incat Pr { bi = r} = 1/n pentru i = 1,2, k si r = 1,2, n.
Putem sa analizam probabilitatea ca cel putin 2 oameni sa aiba aceeasi zi de nastere
folosindu-ne de evenimentul complementar. Probabilitatea ca cel putin doua zile de nastere sa se
potriveasca este 1 minus probabilitatea ca toate zilele de nastere sa fie diferite.
Evenimentul ca un numar de k oameni sa aiba zile diferite de nastere este:
B k = i=1 k A i , unde A i este evenimentul in care ziua persoanei i este diferita de cea
a persoanei j pentru j i. Cum B k = A k B k1 obtinem recurenta Pr { B k } =
Pr {Bk 1 }Pr{ A k | B k1 }

In alte cuvine, probabilitatea ca b1 , b2 , ,b k sa fie distincte este probbailitatea ca


b1 , b2 , ,b k1 sa fie distincte imultit cu probbailitatea ca bk bi , i = 1,2, , k-1,
dat fiind ca b1 , b2 , ,b k1 sunt distincte. Daca b1 , b2 , ,b k sunt distincte probabilitatea

conditionata ca bk b j pentru j = 1, 2, 3, ..., k-1 este Pr { A k | B k1 } = ( nkn +1 )


Aplicand iterativ recurenta obtinem:
Pr { B k } = Pr {B k1 }Pr{ A k | B k1 }

= Pr { B k2 } Pr {A k1 | B k2 } Pr { A k | B k1 }

= Pr { B 1 } Pr {A 2 }Pr { A2 | B 1 } Pr { A 3 | B 2 } Pr { A k | B k1 }
k1
n1 n2 nk +1
=1 ( )( )
n n ( n ) = (1 ni )
i=1

Pentru x suficient de mic folosind seriile Taylor obtinem 1-x ex , astfel


k1 k1 1 k {k 1
(e )
i
( 1
n ) = n
= e

i=1 i=1 2n

4
k {k 1
Probabilitatea sa existe cel putin o coliziune este atunci 1 - e

2n
k {k 1
Notand aceasta probabilitate cu , se ajunge la e care conduce la
1
2n

k 2k 2n ln
ajunge la k 1.17 n
1
1
, de aici se obtine k
2n ln
1
1
, luand = 0.5 se

Folosind cu n = 365 obtinem cu aproximare k 22.5, deci atunci cand avem 23 de persoane in
camera, probabilitatea ca doua sa aiba aceeasi zi de nastere este 1- 1/2
Atacul nasterilor este un atac prin forta bruta care urmareste aflarea unor coliziuni. In general,
pentru o functie de hashing h:X Y , Oscar genereaza aleator mesajele x 1 , x 2 ,
X . Pentru fiecare mesaj x i el calculeaza si stocheaza ampreta y i = h( x i )
comparand-o cu valorile stocate anterior. Daca h( x i ) coincide cu o valoare h( x j ) deja
stocata, Oscar a gasit o coliziune ( x i , x j ). Conform paradoxului nasterilor, aceasta se va
intampla dupa aproximativ 2n /2 mesaje.
Acest tip de atac impune ca masura de securitate o margine inferioara asupra lungimii
amprentelor. O amprenta de 40 de biti este vulnerabila la un atac al nasterilor folosind numai
20
2 , aproxmativ un milion, de mesaje aleatoare. De aceea se sugereaza folosirea de amprenta
de ce putin 256 de biti, unde atacul nasterilor va cere 2128 calcule.

Transformarea Merkle-Damgard

Scopul este sa construim o functie hash cu intrarea de lungime variabila pornind de la o functie
de compresie de lungime fixa.

5
h = o functie de compresie de dimensiune fixa
x= x 1 || x 1 || || x t1 x t -valoarea de intrare
IV = vector de intializare
Padding = 10000|| lungimea mesajului
Teorema
Daca h prezinta rezistenta la coliziuni atunci si H prezinta rezistenta la coliziuni.
Ramane sa gasim o constructie pentru functia de decompresie h.

Constructia Davies-Meyer

Enc este un sistem bloc care cripteaza z i1 cu cheia xi :

h( z i1 , xi ) = Enc xi ( z i1 ) z i1

Secure Hash Algorithm 1(SHA1)

SHA-1 este cea mai folosita functie din familia MD4. Desi noi atacuri au fost propuse
impotriva algoritmului, acesta ramane important fiindca prezinta aceeasi structura interna
precum algoritmii din familia SHA-2.
SHA-1 produce un output pe 160 de biti si primeste ca input mesaje de o lungima maxima de
64
2 de biti. Acesta este bazat pe constructia Merkle-Damgard dupa cum poate fi observat in
figura de mai jos:

6
Pe parcursul calculului propriu zis functia de compresie proceseaza mesajul in blocuri de 512
biti.

1 Preprocesare
Inainte de calcularea functiei de hash, mesajul primit ca input trebuie sa fie completat
pentru a avea o lungime divizila cu 512. Pentru a realiza aceasta constructie adaugam bitul 1
urmat de k biti de 0. Prin urmare numarul k este data de expresia:
k (512 64 -1 l) mod 512
k (447 l) mod 512

Exemplu: Fie mesajul abc care contine trei caractere ASCII a cate 8-biti fiecare cu o lungime toatala de l
= 24-biti.

Adaugam un bit de 1 urmat de k = 423 de biti de 0, unde k e determinat de:

k (447 l) = 447 24 = 423 mod 512


Apoi adaugam valoarea de 64-biti care contine reprezentarea binara a lungimii mesajuli

l = 24 = 110002 . Astfel obtinem mesajul in forma finala:

7
Inainte de a aplica functia de compresie, trebuie sa impartim mesajul in blocuri de 512-biti.
Fiecare bloc poate fi impartit in 16 cuvine a cate 32 de biti. De exemplu blocul i al mesajului este
impartit in :

x i=( x (0i ) x (1) )


(15)
i xi

Se definesc functiile f t (B, C, D) astfel :

{
( B C ) (( B) D) 0 t 19
f t (B, C, D) = B C D20 t 39
( B C ) ( B D ) ( C D ) 40 t 59
B C D60 t 79

Se definesc constantele K 0 , K 1 , K 79 , in hexazecimal, astfel:

{
0 x 5 ab 27999 0 t 19
0 x 6 ed 9 eba 120 t 39
Kt =
0 x 8 f 1 bbcdc 40 t 59
0 x ca 62 c 1 d 6 60 t 79

Functia de compresie este calculata in 4 etape, in fiecare etapa folosindu-se functii interne ,
f t si constantele K t ,diferite pentru fiecare etapa , unde 1 t 4.
Fiecare etapa e compusa din 20 de runde, unde parti din blocul de mesaj
sunt procesa de functia , f t si constanta K t . Dupa 80 de runde
rezultatul este adaugat la registrii H i

2 Pseudocod
//Initializare
d = (447 - x) (mod 512)
s = reprezentarea binara a lui |x| (mod 264 ), |s| = 64
M = x||1|| 0d ||s
H 0 = 0x67452301
H 1 = 0xEFCDAB89
H 2 = 0x98BADCFE
H 3 = 0x10325476
H 4 = 0xC3D2E1F0
for i= 1 to n do
32
M i = W 0 || W 1 || W 15 , W i Z2
for t= 16 to 79 do
W t = ( W t 3 W t 8 W t 14 W t 16 1)
A = H0

8
B = H1
C = H2
D = H3
E = H4
for t= 0 to 79 do
temp = (A 5) + f t (B, C, D) + E + Wt + Kt
E=D
D=C
C = (B 30),
B=A
A = temp
H0 = H0 + A
H1 = H1 + B
H2 = H2 + C
H3 = H3 + D
H4 = H4 + E
Output: y = H 0 || H 1 H 2 H 3 H 4

Amprente obtinute cu ajutorul functiei SHA1:


Secventa ASCII Amprenta (scrisa in hexazecimal)
da39a3ee5e6b4b0d3255bfef9560189

0afd80809
86f7e437faa5a7f
a
ce15d1ddcb9eaeaea377667b8
a9993e364706816aba3e25717850c2
abc
6c9cd0d89d
abcdefghijklmnopqrstuvwx 32d10c7b8cf96570ca04ce37f2a19d84
yz 240d3a89

Bibliografie
1. Securitatea Informatiei vol 2 (Protocoale de securitate), Adrian
Atanasiu

9
2. Understanding Cryptography: A Textbook for Students and
Practitioners, Christof Paar, Jan Pelzl, Bart Preneel

3. Introduction to Algorithms, 3rd Edition (MIT Press), Thomas H.


http://ruxandraolimid.weebly.com/uploads/2/0/1/0/20109229/cry
pto_c_14.pdf, Charles E. Leiserson, Ronald L. Rivest, Clifford Stein

4. http://ruxandraolimid.weebly.com/uploads/2/0/1/0/20109229/cry
pto_c_14.pdf

5. https://en.wikipedia.org/wiki/Cryptographic_hash_function

10

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