MD4 | |
---|---|
Vytvořeno | 1990_ _ |
zveřejněno | října 1990_ _ |
Předchůdce | MD2 |
Nástupce | MD5 |
Velikost hash | 128 bit |
Počet kol | 3 |
Typ | hashovací funkce |
MD4 ( Message Digest 4 ) je kryptografická hašovací funkce vyvinutá profesorem University of Massachusetts Ronaldem Rivestem v roce 1990 a poprvé popsána v RFC 1186 . Vzhledem k libovolné vstupní zprávě funkce vygeneruje 128bitovou hodnotu hash nazvanou souhrn zprávy . Tento algoritmus se používá v ověřovacím protokolu MS-CHAP vyvinutém společností Microsoft k provádění postupů ověřování na vzdálených pracovních stanicích Windows . Je to předchůdce MD5 .
Předpokládá se, že vstupem je zpráva složená z bitů, jejichž hash musíme vypočítat. Zde je libovolné nezáporné celé číslo ; může být nula, nemusí být násobkem osmi a může být libovolně velká. Napišme zprávu kousek po kousku ve tvaru:
Následuje 5 kroků používaných k výpočtu hash zprávy.
Zpráva je rozšířena tak, že její délka v bitech modulo 512 je 448. V důsledku rozšíření je tedy zpráva o 64 bitů kratší než násobek délky 512 bitů. Rozšíření se provede vždy, i když má zpráva původně správnou délku.
Rozšiřování se provádí následovně: ke zprávě se přidá jeden bit rovný 1 a poté se přidávají bity rovné 0, dokud délka zprávy není 448 modulo 512. Celkem se ke zprávě přidá alespoň 1 bit, a maximálně 512.
64bitová reprezentace (délka zprávy před přidáním výplňových bitů) je přidána k výsledku předchozího kroku. V nepravděpodobném případě, že je větší než , se použije pouze nejméně významných 64 bitů. Tyto bity jsou přidány jako dvě 32bitová slova, přičemž slovo obsahující nejméně významné bity se přidává jako první.
V této fázi (po sečtení bitů a délky zprávy) dostaneme zprávu o délce, která je násobkem 512 bitů. To je ekvivalentní této zprávě, která je násobkem 16 32bitových slov. Označme pole slov ve výsledné zprávě (zde násobek 16).
K výpočtu hashe zprávy se používá vyrovnávací paměť sestávající ze 4 slov (32bitové registry): . Tyto registry jsou inicializovány následujícími hexadecimálními čísly (nejprve nižšími bajty):
slovo : 01 23 45 67 slovo : 89 ab cd ef slovo : fe dc ba 98 slovo : 76 54 32 10Nejprve definujeme tři pomocné funkce, z nichž každá přijímá tři 32bitová slova jako vstup a vypočítává z nich jedno 32bitové slovo.
Funguje jako podmíněný výraz na každé bitové pozici : if , then ; jinak . Funkce by mohla být definována pomocí namísto , protože a nemohou se obě rovnat . působí na každou pozici bitu jako funkce maximální hodnoty: pokud jsou alespoň ve dvou slovech odpovídající bity , pak se vrátí v tomto bitu, jinak vrátí bit rovný . Je zajímavé poznamenat, že pokud jsou bity a jsou statisticky nezávislé, pak budou statisticky nezávislé také bity a . Funkce se implementuje bitově , má stejnou vlastnost jako .
Hašovací algoritmus v abstraktním programovacím jazyce :
/* Zpracuj každý blok 16 slov */ pro i = 0 až N / 16-1 do /* Zadejte i-tý blok do proměnné X */ pro j = 0 až 15 do nastavte X [ j ] na M [ i * 16 + j ]. konec /* konec smyčky na j */ /* Uložit A jako AA, B jako BB, C jako CC a D jako DD */ AA = A B.B. = B CC = C DD = D /* 1. kolo */ /* Nechť [abcd ks] znamená následující operaci: a = (a + F(b,c,d) + X[k]) <<< s. */ /* Proveďte následujících 16 operací: */ [ ABCD 0 3 ] [ DABC 1 7 ] [ CDAB 2 11 ] [ BCDA 3 19 ] [ ABCD 4 3 ] [ DABC 5 7 ] [ CDAB 6 11 ] [ BCDA 7 19 ] [ ABCD 8 3 ] [ DABC 9 7 ] [ CDAB 10 11 ] [ BCDA 11 19 ] [ ABCD 12 3 ] [ DABC 13 7 ] [ CDAB 14 11 ] [ BCDA 15 19 ] /* 2. kolo */ /* Nechť [abcd ks] označuje následující operaci: a = (a + G(b,c,d) + X[k] + 5A827999) <<< s. */ /* Proveďte následujících 16 operací: */ [ ABCD 0 3 ] [ DABC 4 5 ] [ CDAB 8 9 ] [ BCDA 12 13 ] [ ABCD 1 3 ] [ DABC 5 5 ] [ CDAB 9 9 ] [ BCDA 13 13 ] [ ABCD 2 3 ] [ DABC 6 5 ] [ CDAB 10 9 ] [ BCDA 14 13 ] [ ABCD 3 3 ] [ DABC 7 5 ] [ CDAB 11 9 ] [ BCDA 15 13 ] /* 3. kolo */ /* Nechť [abcd ks] znamená následující operaci: a = (a + H(b,c,d) + X[k] + 6ED9EBA1) <<< s. */ /* Proveďte následujících 16 operací: */ [ ABCD 0 3 ] [ DABC 8 9 ] [ CDAB 4 11 ] [ BCDA 12 15 ] [ ABCD 2 3 ] [ DABC 10 9 ] [ CDAB 6 11 ] [ BCDA 14 15 ] [ ABCD 1 3 ] [ DABC 9 9 ] [ CDAB 5 11 ] [ BCDA 13 15 ] [ ABCD 3 3 ] [ DABC 11 9 ] [ CDAB 7 11 ] [ BCDA 15 15 ] /* Poté provedeme následující operace sčítání. (Zvyšte hodnotu v každém registru o hodnotu, kterou měl před iterací přes i */ A = A + AA B = B + BB C = C + CC D = D + DD konec /* konec smyčky na i */Komentář. Hodnota 5A827999 je 32bitová hexadecimální konstanta, první bajty jsou vysoké. Je to druhá odmocnina ze 2 . Je také v osmičkovém zobrazení: 013240474631. Hodnota 6ED9EBA1 je hexadecimální 32bitová konstanta, první bajty jsou vysoké. Je to druhá odmocnina ze 3. Je také v osmičce: 015666365641. Tato data jsou uvedena v Knuth, The Art of Computer Programming , 1981 Edition, svazek 2, strana 660, tabulka 2.
Výsledek (hashovací funkce) se získá jako ABCD. To znamená, že vypíšeme 128 bitů, počínaje nejméně významným bitem A a konče nejvýznamnějším bitem D.
Implementace algoritmu v jazyce C je obsažena v RFC 1320 .
128bitové hash MD4 jsou 32místné číslo v hexadecimálním formátu. Následující příklad ukazuje hash 43bajtového řetězce ASCII :
MD4(" Rychlá hnědá liška skáče přes líného psa ") = 1bee69a46ba811185c194762abaeae90Jakákoli i sebemenší změna v hashované informaci má za následek úplně jiný hash, například změna jednoho písmene z d na c v příkladu :
MD4 ("Rychlá hnědá liška skáče přes líného voza ") = b86e130ce7028da59e672d56ad0113dfPříklad MD4 hash pro "null" řetězec:
MD4("") = 31d6cfe0d16ae931b73c59d7e0c089c0Úroveň zabezpečení stanovená v MD4 byla navržena tak, aby vytvořila dostatečně stabilní hybridní systémy digitálního podpisu založené na MD4 a kryptosystému veřejného klíče. Ronald Rivest věřil, že hashovací algoritmus MD4 by mohl být také použit pro systémy, které potřebují silnou kryptografickou sílu . Zároveň ale poznamenal, že MD4 byl vytvořen především jako velmi rychlý hashovací algoritmus, takže může být špatný z hlediska kryptografické síly. Jak ukázaly následné studie, měl pravdu a pro aplikace, kde je především důležitá kryptografická síla, se začal používat algoritmus MD5 .
Zranitelnosti v MD4 byly demonstrovány v článku Berta den Boera a Antona Bosselarse v roce 1991. První kolize byla nalezena Hansem Dobbertinem v roce 1996.
Hashovací funkce | |
---|---|
obecný účel | |
Kryptografický | |
Funkce generování klíčů | |
Kontrolní číslo ( srovnání ) | |
Hashe |
|