HAVAL | |
---|---|
Vývojáři | Yuliang Zheng , Josef Pieprzyk , Jennifer Seberry |
Vytvořeno | 1992 |
zveřejněno | 1992 |
Velikost hash | 128, 160, 192, 224, 256 bitů |
Počet kol | 96, 128, 160 |
Typ | hashovací funkce |
HAVAL je kryptografická hašovací funkce vyvinutá Yuliang Zheng , Josef Pieprzyk a Jennifer Seberry v roce 1992 .
Vzhledem k libovolné vstupní zprávě funkce vygeneruje hodnotu hash nazvanou message digest , která může být dlouhá 128, 160, 192, 224 nebo 256 bitů. Počet iterací je variabilní, od 3 do 5. Počet kol v každé iteraci je 32. Jedná se o modifikaci MD5 .
Pojďme definovat booleovské funkce , které se používají k provádění bitových operací se slovy.
1. iterace
2. iterace
3. iterace
4. iterace
5. iterace
Algoritmus přijímá vstupní datový tok, jehož hash má být nalezen. Tento tok je rozdělen do bloků, každý o délce 1024 bitů. Následují 3 kroky algoritmu.
Nejprve se zpráva rozšíří tak, aby její délka v bitech byla rovna 944 modulo 1024. K tomu je na konec zprávy zapsán jeden bit a poté požadovaný počet nulových bitů. Zbývajících 80 bitů je doplněno 64bitovou reprezentací počtu bitů ve zprávě před zarovnáním (pole MSGLENG), 10bitovou reprezentací délky výtahu zprávy (pole DGSTLENG), 3bitovou reprezentací čísla iterací (pole PASS) a 3bitová reprezentace verze HAVAL (pole VERSION).
Napišme rozšířenou zprávu ve tvaru:
, kde je 1024bitový blok a n je počet bloků v rozšířené zprávě.
Dále pro i od 0 do n-1 provedeme následující výpočet: , kde H je kompresní funkce popsaná níže a je 256bitová konstanta.
H zpracovává blok zpráv ve 3, 4 nebo 5 iteracích (v závislosti na hodnotě pole PASS). Označme kompresní funkce používané v iteracích pomocí a . Nechť je nějaká 256bitová konstanta a nechť je 256bitový výstup funkce H . Potom H lze popsat následovně (viz obrázek):
(Poznámka: operace typu je operace ve tvaru: , kde 32bitová slova.
Označme iterační číslo j (j =1,…,5). Iterační číslo j odpovídá kompresní funkci . Vstupem každé funkce je a , kde je 1024bitový blok zpráv sestávající z 32 slov , a se skládá z 8 slov . Pak to lze napsat následovně:
1 . Nechat 2 . Opakujte následující kroky pro i od 0 do 31: , kde jsou 32bitové konstanty 3 . Nechť a být 256bitový výstup .Zápis: - složení dvou funkcí (první je vykonána ),
Poznámka: v 1. iteraci (tj. ) nejsou použity žádné konstanty .
Na rozdíl od iterace 1 se ve 2. a dalších iteracích zpracovává nikoli ve slovosledu, ale v pořadí uvedeném v tabulce 1.
Tabulka 1. Pořadí zpracování textu( ) | 0 | jeden | 2 | 3 | čtyři | 5 | 6 | 7 | osm | 9 | deset | jedenáct | 12 | 13 | čtrnáct | patnáct | 16 | 17 | osmnáct | 19 | dvacet | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | třicet | 31 |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
( ) | 5 | čtrnáct | 26 | osmnáct | jedenáct | 28 | 7 | 16 | 0 | 23 | dvacet | 22 | jeden | deset | čtyři | osm | třicet | 3 | 21 | 9 | 17 | 24 | 29 | 6 | 19 | 12 | patnáct | 13 | 2 | 25 | 31 | 27 |
( ) | 19 | 9 | čtyři | dvacet | 28 | 17 | osm | 22 | 29 | čtrnáct | 25 | 12 | 24 | třicet | 16 | 26 | 31 | patnáct | 7 | 3 | jeden | 0 | osmnáct | 27 | 13 | 6 | 21 | deset | 23 | jedenáct | 5 | 2 |
( ) | 24 | čtyři | 0 | čtrnáct | 2 | 7 | 28 | 23 | 26 | 6 | třicet | dvacet | osmnáct | 25 | 19 | 3 | 22 | jedenáct | 31 | 21 | osm | 27 | 12 | 9 | jeden | 29 | 5 | patnáct | 17 | deset | 16 | 13 |
( ) | 27 | 3 | 21 | 26 | 17 | jedenáct | dvacet | 29 | 19 | 0 | 12 | 7 | 13 | osm | 31 | deset | 5 | 9 | čtrnáct | třicet | osmnáct | 6 | 28 | 24 | 2 | 23 | 16 | 22 | čtyři | jeden | 25 | patnáct |
|
|
|
|
|
|
| |
|
|||||||
---|---|---|---|---|---|---|---|
|
|||||||
|
|||||||
|
|||||||
|
|||||||
|
|||||||
|
|||||||
|
|||||||
|
|||||||
|
|||||||
|
|||||||
|
Tento krok používá délku 256 bitů získanou v kroku 2. Pokud je požadovaná velikost hash 256 bitů, existuje výtah zprávy. Podívejme se na další 4 případy.
1. Velikost hash – 128 bitů
Uveďme to v následujícím tvaru:
(horní index označuje délku X v bitech)Pak je souhrn zpráv 128bitový , kde
2. Velikost hash – 160 bitů
Uveďme to v následujícím tvaru:
Potom je souhrn zpráv 160bitový , kde
3. Velikost hash – 192 bitů
Uveďme to v následujícím tvaru:
Nechat
- přehled zpráv.
4. Velikost hash – 224 bitů
Pojďme si to představit v následující podobě:
Potom je souhrn zpráv 224bitový , kde
Tento algoritmus používá 136 32bitových konstant. Zapišme si je v následujícím pořadí:
jeden. 2. 3. čtyři. 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
Prvních 8 konstant představuje prvních 256 bitů zlomkové části čísla . Konstanty odpovídají dalším 1024 bitům zlomkové části a tak dále.
Booleovské funkce , , a , používané v algoritmu, mají řadu užitečných vlastností v případě předběžné permutace jejich argumentů:
Hashe HAVAL jsou obvykle reprezentovány jako sekvence 32, 40, 48, 56 nebo 64 hexadecimálních čísel.
Některé příklady hash (velikost – 256 bitů, počet iterací – 5):
I malá změna ve vstupní zprávě (v našem případě o jeden znak: znak "d" je nahrazen znakem "c") vede k úplné změně hashe.
HAVAL("Rychlá hnědá liška přeskakuje líné kolečko") = 60983bb8c8f49ad3bea29899b78cd741f4c96e911bbc272e5550a4f195a4077ePříklad hashe HAVAL pro řetězec "null":
HAVAL("") = be417bb4dd5cfb76c7126f4f8eeb1553a449039307b1a3cd451dbfdc0fbbe330Na rozdíl od hashovací funkce MD5, která má pevnou velikost výtahu a počet iterací, HAVAL poskytuje 15 různých variant algoritmu kombinací délky digestu a počtu iterací. To poskytuje větší flexibilitu, a proto je hašovací funkce vhodnější pro aplikace, které vyžadují různé délky hash zpráv a různé úrovně zabezpečení.
Experimenty ukázaly, že HAVAL je o 60 % rychlejší než MD5 při 3 iteracích, o 15 % rychlejší při 4 iteracích a stejně rychlý při pěti iteracích.
Kolize hash získává stejnou hodnotu funkce pro různé zprávy.
V roce 2003 Bart Van Rompay, Alex Biryukov , Bart Prenel a Joos Vandewalle objevili kolizi pro 3-iterační HAVAL. [2] Nalezení této kolize vyžadovalo přibližně běhů kontrakční funkce H .
V roce 2004 čínští výzkumníci Wang Xiaoyun , Feng Dengguo , Lai Xuejia a Yu Hongbo oznámili zranitelnost, kterou objevili v 3-iteračním HAVAL-128, která umožňuje nalézt srážky pomocí výpočtů HAVAL. [3]
V roce 2006 skupina čínských vědců vedená Wang Xiaoyun a Yu Hongbo provedla dva útoky na 4-iterační HAVAL, které rovněž vyžadovaly hašovací operace, resp. Navrhli také první teoretický útok na 5-iterační HAVAL s počtem hašovacích operací přibližně rovným . [čtyři]
Hashovací funkce | |
---|---|
obecný účel | |
Kryptografický | |
Funkce generování klíčů | |
Kontrolní číslo ( srovnání ) | |
Hashe |
|