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 .
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.
Î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).
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.
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ă ),
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.
( ) | 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 |
|
|
|
|
|
|
| |
|
|||||||
---|---|---|---|---|---|---|---|
|
|||||||
|
|||||||
|
|||||||
|
|||||||
|
|||||||
|
|||||||
|
|||||||
|
|||||||
|
|||||||
|
|||||||
|
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
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țiile booleene , , , și , utilizate în algoritm, au o serie de proprietăți utile în cazul permutării preliminare a argumentelor lor:
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):
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") = 60983bb8c8f49ad3bea29899b78cd741f4c96e911bbc272e5550a4f195a4077eUn exemplu de hash HAVAL pentru un șir „null”:
HAVAL("") = be417bb4dd5cfb76c7126f4f8eeb1553a449039307b1a3cd451dbfdc0fbbe330Spre 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.
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]
Funcții hash | |
---|---|
scop general | |
Criptografic | |
Funcții de generare a cheilor | |
Numărul de verificare ( comparație ) | |
Hashes |
|