HAVAL | |
---|---|
Udviklere | Yuliang Zheng , Josef Pieprzyk , Jennifer Seberry |
Oprettet | 1992 |
offentliggjort | 1992 |
Hash størrelse | 128, 160, 192, 224, 256 bit |
Antal runder | 96, 128, 160 |
Type | hash funktion |
HAVAL er en kryptografisk hashfunktion udviklet af Yuliang Zheng , Josef Pieprzyk og Jennifer Seberry i 1992 .
Givet en vilkårlig inputmeddelelse genererer funktionen en hashværdi kaldet message digest , som kan være 128, 160, 192, 224 eller 256 bit lang. Antallet af iterationer er variabelt, fra 3 til 5. Antallet af runder ved hver iteration er 32. Det er en modifikation af MD5 .
Lad os definere booleske funktioner , der bruges til at udføre bitvise operationer på ord.
1. iteration
2. iteration
3. iteration
4. iteration
5. iteration
Algoritmen modtager en inputdatastrøm, hvis hash skal findes. Denne strøm er opdelt i blokke, hver 1024 bit lange. Følgende er de 3 trin i algoritmen.
Først udvides meddelelsen, så dens længde i bit bliver lig med 944 modulo 1024. For at gøre dette skrives en en bit til slutningen af meddelelsen, og derefter det nødvendige antal nul bit. De resterende 80 bit er tilføjet en 64-bit repræsentation af antallet af bit i meddelelsen før justering (MSGLENG-felt), en 10-bit repræsentation af meddelelsessammenfatningslængden (DGSTLENG-felt), en 3-bit repræsentation af antallet af iterationer (PASS-feltet) og en 3-bit repræsentation af HAVAL-versionen ( VERSION-feltet).
Lad os skrive en udvidet meddelelse i formen:
, hvor er en 1024-bit blok og n er antallet af blokke i en udvidet meddelelse.
For i fra 0 til n-1 udfører vi derefter følgende beregning: , hvor H er komprimeringsfunktionen beskrevet nedenfor og er en 256-bit konstant.
H behandler meddelelsesblokken i 3, 4 eller 5 iterationer (afhængigt af værdien af PASS-feltet). Lad os betegne de kompressionsfunktioner, der bruges i iterationer af og . Lad være en 256-bit konstant, og lad være 256-bit output af funktionen H . Så kan H beskrives som følger (se figur):
(Bemærk: en typeoperation er en operation af formen: , hvor 32-bit ord.
Lad os betegne iterationstallet med j (j =1,…,5). Iteration nummer j svarer til komprimeringsfunktionen . Indgangen til hver funktion er og , hvor er en 1024-bit beskedblok bestående af 32 ord , a består af 8 ord . Så kan det skrives som følger:
1 . Lade 2 . Gentag følgende trin for i fra 0 til 31: , hvor er 32-bit konstanter 3 . Lad og være et 256-bit output .Notation: - sammensætning af to funktioner (den første udføres ),
Bemærk: der bruges ingen konstanter i 1. iteration (dvs. ).
I modsætning til iteration 1, behandles den i 2. og efterfølgende iterationer ikke i ordrækkefølge, men i den rækkefølge, der er angivet i tabel 1.
( ) | 0 | en | 2 | 3 | fire | 5 | 6 | 7 | otte | 9 | ti | elleve | 12 | 13 | fjorten | femten | 16 | 17 | atten | 19 | tyve | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | tredive | 31 |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
( ) | 5 | fjorten | 26 | atten | elleve | 28 | 7 | 16 | 0 | 23 | tyve | 22 | en | ti | fire | otte | tredive | 3 | 21 | 9 | 17 | 24 | 29 | 6 | 19 | 12 | femten | 13 | 2 | 25 | 31 | 27 |
( ) | 19 | 9 | fire | tyve | 28 | 17 | otte | 22 | 29 | fjorten | 25 | 12 | 24 | tredive | 16 | 26 | 31 | femten | 7 | 3 | en | 0 | atten | 27 | 13 | 6 | 21 | ti | 23 | elleve | 5 | 2 |
( ) | 24 | fire | 0 | fjorten | 2 | 7 | 28 | 23 | 26 | 6 | tredive | tyve | atten | 25 | 19 | 3 | 22 | elleve | 31 | 21 | otte | 27 | 12 | 9 | en | 29 | 5 | femten | 17 | ti | 16 | 13 |
( ) | 27 | 3 | 21 | 26 | 17 | elleve | tyve | 29 | 19 | 0 | 12 | 7 | 13 | otte | 31 | ti | 5 | 9 | fjorten | tredive | atten | 6 | 28 | 24 | 2 | 23 | 16 | 22 | fire | en | 25 | femten |
|
|
|
|
|
|
| |
|
|||||||
---|---|---|---|---|---|---|---|
|
|||||||
|
|||||||
|
|||||||
|
|||||||
|
|||||||
|
|||||||
|
|||||||
|
|||||||
|
|||||||
|
|||||||
|
Dette trin bruger længden på 256 bit opnået i trin 2. Hvis den nødvendige hashstørrelse er 256 bit, er der en meddelelsessammenfatning. Lad os overveje de andre 4 sager.
1. Hash-størrelse - 128 bit
Lad os sætte det i følgende form:
(det hævede skrift angiver længden af X i bits)Så er beskedsammendraget 128-bit , hvor
2. Hash-størrelse - 160 bit
Lad os sætte det i følgende form:
Så er beskedsammendraget 160-bit , hvor
3. Hash-størrelse - 192 bit
Lad os sætte det i følgende form:
Lade
- beskedsammendrag.
4. Hash-størrelse - 224 bit
Lad os præsentere det i følgende form:
Så er beskedsammendraget 224-bit , hvor
Denne algoritme bruger 136 32-bit konstanter. Lad os skrive dem ned i følgende rækkefølge:
en. 2. 3. fire. 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
De første 8 konstanter repræsenterer de første 256 bit af brøkdelen af tallet . Konstanterne svarer til de næste 1024 bit af brøkdelen , og så videre.
Boolske funktioner , , , og , brugt i algoritmen, har en række nyttige egenskaber i tilfælde af foreløbig permutation af deres argumenter:
HAVAL-hash er normalt repræsenteret som en sekvens af 32, 40, 48, 56 eller 64 hexadecimale tal.
Nogle hash-eksempler (størrelse - 256 bit, antal iterationer - 5):
Selv en lille ændring i inputmeddelelsen (i vores tilfælde med et tegn: tegnet "d" erstattes af tegnet "c") fører til en fuldstændig ændring i hashen.
HAVAL("Den hurtige brune ræv hopper over det dovne tandhjul") = 60983bb8c8f49ad3bea29899b78cd741f4c96e911bbc272e5550a4f195a4077eEt eksempel på en HAVAL-hash for en "nul"-streng:
HAVAL("") = be417bb4dd5cfb76c7126f4f8eeb1553a449039307b1a3cd451dbfdc0fbbe330I modsætning til MD5-hash-funktionen, som har en fast størrelse på digest og antallet af iterationer, giver HAVAL 15 forskellige algoritmevarianter ved at kombinere digest-længden og antallet af iterationer. Dette giver mere fleksibilitet og gør derfor hash-funktionen mere velegnet til applikationer, der kræver forskellige besked-hash-længder og forskellige sikkerhedsniveauer.
Eksperimenter har vist, at HAVAL er 60 % hurtigere end MD5 ved 3 iterationer, 15 % hurtigere ved 4 iterationer og lige så hurtig ved fem iterationer.
En hash-kollision får den samme funktionsværdi for forskellige meddelelser.
I 2003 opdagede Bart Van Rompay, Alex Biryukov , Bart Prenel og Joos Vandewalle en kollision for 3-iteration HAVAL. [2] At finde denne kollision krævede cirka kørsler af kontraktionsfunktionen H .
I 2004 annoncerede de kinesiske forskere Wang Xiaoyun , Feng Dengguo , Lai Xuejia og Yu Hongbo en sårbarhed, de havde opdaget i 3-iterationen HAVAL-128, der gør det muligt at finde kollisioner ved hjælp af HAVAL-beregninger. [3]
I 2006 udførte en gruppe kinesiske videnskabsmænd ledet af Wang Xiaoyun og Yu Hongbo to angreb på 4-iterationen HAVAL, som også krævede henholdsvis hashing-operationer. De foreslog også det første teoretiske angreb på 5-iterations HAVAL med antallet af hash-operationer omtrent lig med . [fire]
Hash funktioner | |
---|---|
generelle formål | |
Kryptografisk | |
Nøglegenereringsfunktioner | |
Tjek nummer ( sammenligning ) | |
Hashes |
|