HAVAL | |
---|---|
Utvecklare | Yuliang Zheng , Josef Pieprzyk , Jennifer Seberry |
Skapad | 1992 |
publiceras | 1992 |
Hash storlek | 128, 160, 192, 224, 256 bitar |
Antal omgångar | 96, 128, 160 |
Sorts | hash-funktion |
HAVAL är en kryptografisk hashfunktion utvecklad av Yuliang Zheng , Josef Pieprzyk och Jennifer Seberry 1992 .
Givet ett godtyckligt ingångsmeddelande genererar funktionen ett hashvärde som kallas meddelandesammandraget , som kan vara 128, 160, 192, 224 eller 256 bitar långt. Antalet iterationer är variabelt, från 3 till 5. Antalet omgångar vid varje iteration är 32. Det är en modifiering av MD5 .
Låt oss definiera booleska funktioner som används för att utföra bitvisa operationer på ord.
1:a iterationen 2:
a iterationen 3:
e iterationen
4:e iterationen
5 :e iterationen Algoritmen
tar emot en indataström, vars hash måste hittas. Denna ström är uppdelad i block, vart och ett 1024 bitar långt. Följande är de 3 stegen i algoritmen.
Först utökas meddelandet så att dess längd i bitar blir lika med 944 modulo 1024. För att göra detta skrivs en enbit till slutet av meddelandet och sedan det erforderliga antalet nollbitar. De återstående 80 bitarna läggs till med en 64-bitars representation av antalet bitar i meddelandet före justering (MSGLENG-fält), en 10-bitars representation av meddelandesammandragens längd (DGSTLENG-fält), en 3-bitars representation av antalet av iterationer (PASS-fält) och en 3-bitars representation av HAVAL-versionen ( VERSION-fält).
Låt oss skriva ett utökat meddelande i formen:
, där är ett 1024-bitars block och n är antalet block i ett utökat meddelande.
Därefter, för i från 0 till n-1, utför vi följande beräkning: , där H är komprimeringsfunktionen som beskrivs nedan och är en 256-bitars konstant.
H behandlar meddelandeblocket i 3, 4 eller 5 iterationer (beroende på värdet på PASS-fältet). Låt oss beteckna komprimeringsfunktionerna som används i iterationer med och . Låt vara någon 256-bitars konstant, och låt vara 256-bitars utdata från funktionen H . Då kan H beskrivas så här (se figur):
(Obs: en typoperation är en operation av formen: , där 32-bitars ord.
Låt oss beteckna iterationsnumret med j (j =1,…,5). Iterationsnummer j motsvarar komprimeringsfunktionen . Ingången för varje funktion är och , där är ett 1024-bitars meddelandeblock som består av 32 ord , a består av 8 ord . Då kan det skrivas så här:
1 . Låta 2 . Upprepa följande steg för i från 0 till 31: , där är 32-bitars konstanter 3 . Låt och vara en 256-bitars utgång .Notation: - sammansättning av två funktioner (den första exekveras ),
Obs: inga konstanter används i den första iterationen (dvs ).
Till skillnad från iteration 1, i den andra och efterföljande iterationerna behandlas den inte i ordföljd utan i den ordning som anges i Tabell 1.
( ) | 0 | ett | 2 | 3 | fyra | 5 | 6 | 7 | åtta | 9 | tio | elva | 12 | 13 | fjorton | femton | 16 | 17 | arton | 19 | tjugo | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | trettio | 31 |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
( ) | 5 | fjorton | 26 | arton | elva | 28 | 7 | 16 | 0 | 23 | tjugo | 22 | ett | tio | fyra | åtta | trettio | 3 | 21 | 9 | 17 | 24 | 29 | 6 | 19 | 12 | femton | 13 | 2 | 25 | 31 | 27 |
( ) | 19 | 9 | fyra | tjugo | 28 | 17 | åtta | 22 | 29 | fjorton | 25 | 12 | 24 | trettio | 16 | 26 | 31 | femton | 7 | 3 | ett | 0 | arton | 27 | 13 | 6 | 21 | tio | 23 | elva | 5 | 2 |
( ) | 24 | fyra | 0 | fjorton | 2 | 7 | 28 | 23 | 26 | 6 | trettio | tjugo | arton | 25 | 19 | 3 | 22 | elva | 31 | 21 | åtta | 27 | 12 | 9 | ett | 29 | 5 | femton | 17 | tio | 16 | 13 |
( ) | 27 | 3 | 21 | 26 | 17 | elva | tjugo | 29 | 19 | 0 | 12 | 7 | 13 | åtta | 31 | tio | 5 | 9 | fjorton | trettio | arton | 6 | 28 | 24 | 2 | 23 | 16 | 22 | fyra | ett | 25 | femton |
|
|
|
|
|
|
| |
|
|||||||
---|---|---|---|---|---|---|---|
|
|||||||
|
|||||||
|
|||||||
|
|||||||
|
|||||||
|
|||||||
|
|||||||
|
|||||||
|
|||||||
|
|||||||
|
Det här steget använder längden på 256 bitar som erhölls i steg 2. Om den erforderliga hashstorleken är 256 bitar finns det ett meddelandesammandrag. Låt oss överväga de andra fyra fallen.
1. Hashstorlek - 128 bitar
Låt oss sätta det i följande form:
(upphöjningen anger längden på X i bitar)Då är meddelandesammandraget 128-bitars , där
2. Hashstorlek - 160 bitar
Låt oss sätta det i följande form:
Då är meddelandesammandraget 160-bitars , där
3. Hashstorlek - 192 bitar
Låt oss sätta det i följande form:
Låta
- meddelandesammanfattning.
4. Hashstorlek - 224 bitar
Låt oss presentera det i följande form:
Då är meddelandesammandraget 224-bitars , där
Denna algoritm använder 136 32-bitars konstanter. Låt oss skriva ner dem i följande ordning:
ett. 2. 3. fyra. 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örsta 8 konstanterna representerar de första 256 bitarna av bråkdelen av talet . Konstanterna motsvarar de nästa 1024 bitarna av bråkdelen , och så vidare.
Booleska funktioner , , , och , som används i algoritmen, har ett antal användbara egenskaper i fallet med preliminär permutation av deras argument:
HAVAL-hashar representeras vanligtvis som en sekvens av 32, 40, 48, 56 eller 64 hexadecimala tal.
Några hash-exempel (storlek - 256 bitar, antal iterationer - 5):
Även en liten förändring i inmatningsmeddelandet (i vårt fall med ett tecken: tecknet "d" ersätts med tecknet "c") leder till en fullständig förändring av hashen.
HAVAL("Den kvicka bruna räven hoppar över den lata kuggen") = 60983bb8c8f49ad3bea29899b78cd741f4c96e911bbc272e5550a4f195a4077eEtt exempel på en HAVAL-hash för en "null"-sträng:
HAVAL("") = be417bb4dd5cfb76c7126f4f8eeb1553a449039307b1a3cd451dbfdc0fbbe330Till skillnad från hashfunktionen MD5, som har en fast storlek på sammandraget och antalet iterationer, tillhandahåller HAVAL 15 olika algoritmvarianter genom att kombinera sammandragslängden och antalet iterationer. Detta ger mer flexibilitet och gör därför hashfunktionen mer lämpad för applikationer som kräver olika meddelandehashlängder och olika säkerhetsnivåer.
Experiment har visat att HAVAL är 60 % snabbare än MD5 vid 3 iterationer, 15 % snabbare vid 4 iterationer och lika snabb vid fem iterationer.
En hashkollision får samma funktionsvärde för olika meddelanden.
2003 upptäckte Bart Van Rompay, Alex Biryukov , Bart Prenel och Joos Vandewalle en kollision för HAVAL med 3 iterationer. [2] För att hitta denna kollision krävdes ungefärliga körningar av kontraktionsfunktionen H .
2004 tillkännagav de kinesiska forskarna Wang Xiaoyun , Feng Dengguo , Lai Xuejia och Yu Hongbo en sårbarhet som de hade upptäckt i HAVAL-128 med tre iterationer som gör att kollisioner kan hittas med HAVAL-beräkningar. [3]
2006 genomförde en grupp kinesiska forskare under ledning av Wang Xiaoyun och Yu Hongbo två attacker mot HAVAL med fyra iterationer, vilket också krävde hashoperationer. De föreslog också den första teoretiska attacken på HAVAL med 5-iterationer med antalet hashoperationer ungefär lika med . [fyra]
Hash-funktioner | |
---|---|
generell mening | |
Kryptografisk | |
Nyckelgenereringsfunktioner | |
Kontrollnummer ( jämförelse ) | |
Hashes |
|