Documente Academic
Documente Profesional
Documente Cultură
Funcţii de Dispersie
Funcţii de Dispersie
Functii de dispersie.............................................................................................................................3
Transformarea Merkle-Damgard.......................................................................................................5
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 }
= 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
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
h( z i1 , xi ) = Enc xi ( z i1 ) z i1
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.
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 :
{
( 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
{
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
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
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