HAVAL

Den aktuella versionen av sidan har ännu inte granskats av erfarna bidragsgivare och kan skilja sig väsentligt från versionen som granskades den 11 maj 2018; kontroller kräver 6 redigeringar .
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 .

Algoritm

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.




Steg 1. Expandera meddelandet

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).

Steg 2. Bearbeta meddelandet i block om 1024 bitar

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 komprimeringsfunktion

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 ),

 - addition modulo ,  är de permutationer som beskrivs i tabell 2.

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.

Tabell 1. Ordbehandlingsordning
( ) 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
Tabell 2. Permutationer

Steg 3. Bildning av meddelandesammandraget

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

Konstanter som används i algoritmen

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.

Funktioner , , och _

Booleska funktioner , , , och , som används i algoritmen, har ett antal användbara egenskaper i fallet med preliminär permutation av deras argument:

1) De är balanserade med 0 och 1. Detta betyder att utdata från funktionen för en godtycklig uppsättning indata med lika sannolikhet (1/2) kan vara antingen 0 eller 1. 2) De är mycket icke-linjära. [ett] 3) De uppfyller Strict Avalanche -kriteriet, dvs när värdet på någon av ingångsvariablerna ändras ändras värdet på funktionen med en sannolikhet på 1/2. 4) De kan inte erhållas från varandra genom att tillämpa linjära transformationer på indatavariablerna. 5) Denna uppsättning funktioner är ömsesidigt icke-korrelerade i utdata, det vill säga alla funktionspar är ömsesidigt icke-korrelerade i utdata (funktioner och korrelerar inte ömsesidigt i utdata om , och  är balanserade med 0 och 1, icke-linjära funktioner)

HAVAL - hash

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):

HAVAL(" Den snabba bruna räven hoppar över den lata hunden ") = b89c551cdfe2e06dbd4cea2be1bc7d557416c58ebb4d07cbc94e49f710c55be4

Ä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") = 60983bb8c8f49ad3bea29899b78cd741f4c96e911bbc272e5550a4f195a4077e

Ett exempel på en HAVAL-hash för en "null"-sträng:

HAVAL("") = be417bb4dd5cfb76c7126f4f8eeb1553a449039307b1a3cd451dbfdc0fbbe330

Jämförelse mellan HAVAL och MD5

Till 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.

Kryptanalys

Kollisioner HAVAL

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]

Se även

Anteckningar

  1. Tokareva N. N. Starkt olinjära booleska funktioner: böjda funktioner och deras generaliseringar (otillgänglig länk) (2008). Arkiverad från originalet den 15 februari 2012. 
  2. Bart Van Rompay, Alex Biryukov, Bart Preneel och Joos Vandewalle. Kryptanalys av 3-pass  HAVAL .  (inte tillgänglig länk)
  3. Xiaoyun Wang, Dengguo Feng, Xuejia Lai, Hongbo Yu. Kollisioner för hashfunktionerna MD4, MD5, HAVAL-128 och RIPEMD  (engelska)  (nedlänk) (17 augusti 2004). Arkiverad från originalet den 23 augusti 2011.
  4. Xiaoyun Wang, Aaram Yun, Sangwoo Park, Hongbo Yu. Krypteringsanalys av den fullständiga HAVAL med 4 och 5 pass  (engelska) (2006).  (inte tillgänglig länk)

Länkar