HAVAL

Versiunea actuală a paginii nu a fost încă examinată de colaboratori experimentați și poate diferi semnificativ de versiunea revizuită pe 11 mai 2018; verificările necesită 6 modificări .
HAVAL
Dezvoltatori Yuliang Zheng , Josef Pieprzyk , Jennifer Seberry
Creată 1992
publicat 1992
Dimensiunea hash 128, 160, 192, 224, 256 biți
Numărul de runde 96, 128, 160
Tip de funcția hash

HAVAL  este o funcție hash criptografică dezvoltată de Yuliang Zheng , Josef Pieprzyk și Jennifer Seberry în 1992 .

Având în vedere un mesaj de intrare arbitrar, funcția generează o valoare hash numită mesaj digest , care poate avea 128, 160, 192, 224 sau 256 de biți. Numărul de iterații este variabil, de la 3 la 5. Numărul de runde la fiecare iterație este de 32. Este o modificare a MD5 .

Algoritm

Să definim funcțiile booleene care sunt folosite pentru a efectua operații pe biți asupra cuvintelor.
Prima iterație A doua iterație A treia iterație A patra iterație A cincea iterație Algoritmul primește un flux de date de intrare, al cărui hash trebuie găsit. Acest flux este împărțit în blocuri, fiecare cu lungimea de 1024 de biți. Mai jos sunt cei 3 pași ai algoritmului.




Pasul 1. Extinderea mesajului

În primul rând, mesajul este extins astfel încât lungimea sa în biți să devină egală cu 944 modulo 1024. Pentru a face acest lucru, un bit este scris la sfârșitul mesajului și apoi numărul necesar de zero biți. Restul de 80 de biți sunt atașați cu o reprezentare pe 64 de biți a numărului de biți din mesaj înainte de aliniere (câmpul MSGLENG), o reprezentare pe 10 biți a lungimii rezumatului mesajului (câmpul DGSTLENG), o reprezentare pe 3 biți a numărului de iterații (câmpul PASS) și o reprezentare pe 3 biți a versiunii HAVAL (câmpul VERSION).

Pasul 2. Procesarea mesajului în blocuri de 1024 de biți

Să scriem un mesaj extins sub forma: , unde  este un bloc de 1024 de biți și n este numărul de blocuri dintr-un mesaj extins. Apoi, pentru i de la 0 la n-1, efectuăm următorul calcul: , unde H  este funcția de compresie descrisă mai jos și  este o constantă de 256 de biți.

Funcția de compresie H

H procesează blocul de mesaj în 3, 4 sau 5 iterații (în funcție de valoarea câmpului PASS). Să notăm funcțiile de compresie utilizate în iterații prin și . Fie  o constantă de 256 de biți și fie  ieșirea de 256 de biți a funcției H . Atunci H poate fi descris după cum urmează (vezi figura):








(Notă: o operație de tip este o operație de forma: , unde cuvinte de 32 de biți.

Să notăm numărul iterației cu j (j =1,…,5). Numărul de iterație j corespunde funcției de compresie . Intrarea fiecărei funcții este și , unde  este un bloc de mesaje de 1024 de biți format din 32 de cuvinte , a este format din 8 cuvinte . Apoi se poate scrie astfel:

1 . Lăsa 2 . Repetați următorii pași pentru i de la 0 la 31: , unde  sunt constante pe 32 de biți 3 . Să fie și o ieșire pe 256 de biți .

Notație:  - alcătuirea a două funcții (prima este executată ),

 - modul de adunare ,  sunt permutările descrise în tabelul 2.

Notă: nu sunt utilizate constante în prima iterație (adică ).

Spre deosebire de iterația 1, în a doua iterație și în cele ulterioare , este procesată nu în ordinea cuvintelor, ci în ordinea specificată în tabelul 1.

Tabelul 1. Ordinea procesării textului
( ) 0 unu 2 3 patru 5 6 7 opt 9 zece unsprezece 12 13 paisprezece cincisprezece 16 17 optsprezece 19 douăzeci 21 22 23 24 25 26 27 28 29 treizeci 31
( ) 5 paisprezece 26 optsprezece unsprezece 28 7 16 0 23 douăzeci 22 unu zece patru opt treizeci 3 21 9 17 24 29 6 19 12 cincisprezece 13 2 25 31 27
( ) 19 9 patru douăzeci 28 17 opt 22 29 paisprezece 25 12 24 treizeci 16 26 31 cincisprezece 7 3 unu 0 optsprezece 27 13 6 21 zece 23 unsprezece 5 2
( ) 24 patru 0 paisprezece 2 7 28 23 26 6 treizeci douăzeci optsprezece 25 19 3 22 unsprezece 31 21 opt 27 12 9 unu 29 5 cincisprezece 17 zece 16 13
( ) 27 3 21 26 17 unsprezece douăzeci 29 19 0 12 7 13 opt 31 zece 5 9 paisprezece treizeci optsprezece 6 28 24 2 23 16 22 patru unu 25 cincisprezece
Tabelul 2. Permutări

Pasul 3. Formarea rezumatului mesajului

Acest pas folosește lungimea de 256 de biți obținută în pasul 2. Dacă dimensiunea hash necesară este de 256 de biți, atunci există un rezumat al mesajului. Să luăm în considerare celelalte 4 cazuri.

1. Dimensiunea hash - 128 de biți

Să o punem în următoarea formă:

(superscriptul indică lungimea lui X în biți)

Apoi, rezumatul mesajului este pe 128 de biți , unde

2. Dimensiunea hash - 160 de biți

Să o punem în următoarea formă:

Apoi, rezumatul mesajului este pe 160 de biți , unde

3. Dimensiunea hash - 192 de biți

Să o punem în următoarea formă:

Lăsa

 - digest mesaj.

4. Dimensiunea hash - 224 de biți

Să o prezentăm în următoarea formă:

Apoi, rezumatul mesajului este pe 224 de biți , unde

Constante utilizate în algoritm

Acest algoritm folosește 136 de constante pe 32 de biți. Să le scriem în următoarea ordine:

unu. 2. 3. patru. 5.

243F6A88 85A308D3 13198A2E 03707344 A4093822 299F31D0 082EFA98 EC4E6C89

452821E6 38D01377 BE5466CF 34E90C6C C0AC29B7 C97C50DD 3F84D5B5 B5470917 9216D5D9 8979FB1B D1310BA6
98DFB5AC 2FFD72DB D01ADFB7 B8E1AFED 6A267E96 BA7C9045 F12C7F99 24A19947 B3916CF7 0801F2E2
858EFC16 636920D8 71574E69 A458FEA3 F4933D7E 0D95748F
728EB658 718BCD58 82154AEE 7B54A41D C25A59B5

9C30D539 2AF26013 C5D1B023 286085F0 CA417918 B8DB38EF 8E79DCB0 603A180E 6C9E0E8B B01E8A3E D71577C1
BD314B27 78AF2FDA 55605C60 E65525F3 AA55AB94 57489862 63E81440 55CA396A 2AAB10B6 B4CC5C34
1141E8CE A15486AF 7C72E993 B3EE1411 636FBC2A 2BA9C55D
741831F6 CE5C3E16 9B87931E AFD6BA33 6C24CF5C

7A325381 28958677 3B8F4898 6B4BB9AF C4BFE81B 66282193 61D809CC FB21A991 487CAC60 5DEC8032 EF845D5D
E98575B1 DC262302 EB651B88 23893E81 D396ACC5 0F6D6FF3 83F44239 2E0B4482 A4842004 69C8F04A
9E1F9B5E 21C66842 F6E96C9A 670C9C61 ABD388F0 6A51A0D2
D8542F68 960FA728 AB5133A3 6EEF0B6C 137A3BE4

BA3BF050 7EFB2A98 A1F1651D 39AF0176 66CA593E 82430E88 8CEE8619 456F9FB4 7D84A5C3 3B8B5EBE E06F75D8
85C12073 401A449F 56C16AA6 4ED3AA62 363F7706 1BFEDF72 429B023D 37D0D724 D00A1248 DB0FEAD3
49F1C09B 075372C9 80991B7B 25D479D8 F6E8DEF7 E3FE501A
B6794C3B 976CE0BD 04C006BA C1A94FB6 409F60C4

Primele 8 constante reprezintă primii 256 de biți ai părții fracționale a numărului . Constantele corespund următorilor 1024 de biți ai părții fracționale și așa mai departe.

Funcții , , și _

Funcțiile booleene , , , și , utilizate în algoritm, au o serie de proprietăți utile în cazul permutării preliminare a argumentelor lor:

1) Sunt echilibrate cu 0 și 1. Aceasta înseamnă că rezultatul funcției pentru un set arbitrar de date de intrare cu probabilitate egală (1/2) poate fi fie 0, fie 1. 2) Sunt foarte neliniare. [unu] 3) Ele satisfac criteriul strict de avalanșă , adică atunci când valoarea oricăreia dintre variabilele de intrare se modifică, valoarea funcției se modifică cu o probabilitate de 1/2. 4) Ele nu pot fi obținute unul de la celălalt prin aplicarea transformărilor liniare la variabilele de intrare. 5) Acest set de funcții este necorelat reciproc în ieșire, adică orice pereche de funcții este necorelată în ieșire (funcțiile și nu se corelează reciproc în ieșire dacă , și  sunt echilibrate de 0 și 1, neliniare functii)

HAVAL - hashes

Hash-urile HAVAL sunt de obicei reprezentate ca o secvență de 32, 40, 48, 56 sau 64 de numere hexazecimale.
Câteva exemple de hash (dimensiune - 256 de biți, număr de iterații - 5):

HAVAL (" Vulpea maro iute sare peste câinele leneș ") = b89c551cdfe2e06dbd4cea2be1bc7d557416c58ebb4d07cbc94e49f710c55be4

Chiar și o mică modificare a mesajului de intrare (în cazul nostru, cu un caracter: caracterul „d” este înlocuit cu caracterul „c”) duce la o schimbare completă a hash-ului.

HAVAL ("Vulpea maro iute sare peste roata lenesa") = 60983bb8c8f49ad3bea29899b78cd741f4c96e911bbc272e5550a4f195a4077e

Un exemplu de hash HAVAL pentru un șir „null”:

HAVAL("") = be417bb4dd5cfb76c7126f4f8eeb1553a449039307b1a3cd451dbfdc0fbbe330

Comparație între HAVAL și MD5

Spre deosebire de funcția hash MD5, care are o dimensiune fixă ​​a rezumatului și a numărului de iterații, HAVAL oferă 15 variante diferite de algoritm combinând lungimea rezumatului și numărul de iterații. Acest lucru oferă mai multă flexibilitate și, prin urmare, face ca funcția de hash să fie mai potrivită pentru aplicațiile care necesită lungimi de hash diferite ale mesajelor și niveluri diferite de securitate.
Experimentele au arătat că HAVAL este cu 60% mai rapid decât MD5 la 3 iterații, cu 15% mai rapid la 4 iterații și la fel de rapid la cinci iterații.

Criptanaliză

Coliziuni HAVAL

O coliziune hash  primește aceeași valoare a funcției pentru mesaje diferite.

În 2003, Bart Van Rompay, Alex Biryukov , Bart Prenel și Joos Vandewalle au descoperit o coliziune pentru HAVAL în trei iterații. [2] Găsirea acestei coliziuni a necesitat aproximativ rulări ale funcției de contracție H .

În 2004, cercetătorii chinezi Wang Xiaoyun , Feng Dengguo , Lai Xuejia și Yu Hongbo au anunțat o vulnerabilitate pe care au descoperit-o în HAVAL-128 cu trei iterații, care permite găsirea coliziunilor folosind calculele HAVAL. [3]

În 2006, un grup de oameni de știință chinezi condus de Wang Xiaoyun și Yu Hongbo a efectuat două atacuri asupra HAVAL cu 4 iterații, care au necesitat și operațiuni de hashing. Ei au propus, de asemenea, primul atac teoretic asupra HAVAL cu 5 iterații cu numărul de operațiuni hash aproximativ egal cu . [patru]

Vezi și

Note

  1. Tokareva N. N. Strongly nonlinear Boolean functions: bent functions and their generalizations (link inaccessible) (2008). Arhivat din original pe 15 februarie 2012. 
  2. Bart Van Rompay, Alex Biryukov, Bart Preneel și Joos Vandewalle. Criptanaliză  HAVAL cu 3 treceri .  (link indisponibil)
  3. Xiaoyun Wang, Dengguo Feng, Xuejia Lai, Hongbo Yu. Coliziuni pentru funcțiile Hash MD4, MD5, HAVAL-128 și RIPEMD  (engleză)  (downlink) (17 august 2004). Arhivat din original pe 23 august 2011.
  4. Xiaoyun Wang, Aaram Yun, Sangwoo Park, Hongbo Yu. Criptanalysis of the Full HAVAL with 4 and 5 Passes  (engleză) (2006).  (link indisponibil)

Link -uri