RIPEMD-128 | |
---|---|
Vývojáři | Hans Dobberthin , Anton Boselaers a Bart Prenel |
Vytvořeno | 1996 |
Normy | ISO/IEC 10118-3:2004 |
Velikost hash | 128 bit |
Počet kol | čtyři |
Typ | hashovací funkce |
RIPEMD-128 ( RACE Integrity Primitives Evaluation Message Digest ) je kryptografická hašovací funkce vyvinutá Hansem Dobbertinemanglicky Antonem Boselaersem a Bartem Prenelem v roce 1996 .
RIPEMD je sada hashovacích funkcí patřících do rodiny MD-SHA. První z nich byl RIPEMD-0, doporučený v roce 1992 konsorciem RACE Integrity Primitives Evaluation (RIPE) jako vylepšená verze algoritmu MD4 [1] . Kryptoanalýza provedená Dobbertinem ukázala, že tento algoritmus není bezpečný z hlediska , což později potvrdily nalezené zranitelnosti [ 2] RIPEMD-128 (spolu se 160bitovou verzí, RIPEMD-160 ) byl představen jako náhrada za původní RIPEMD, který byl rovněž 128bitový. Další verze algoritmu byly také vyvinuty s delšími délkami hash: RIPEMD-256 a RIPEMD-320 (256-bit a 320-bit, v tomto pořadí).
Dalším důvodem pro přechod k algoritmům, které produkují výsledek s velkým počtem bitů, byl rychlý rozvoj výpočetní techniky (podle Moorova zákona ). Algoritmy dostupné v té době se staly každým rokem více a více zranitelnější vůči útokům kolizí hrubou silou . RIPEMD-128 si však našel cestu do některých bankovních aplikací [3] . Byl standardizován v roce 2004 ( ISO/IEC 10118-3:2004 Archived 2 February 2017 at Wayback Machine ).
Vzhledem k libovolné vstupní zprávě vygeneruje hašovací funkce 128bitovou hašovací hodnotu, souhrn zprávy . Algoritmus je založen na hashovacím algoritmu MD4 . MD4 hash se skládá ze 48 operací obsahujících aplikaci nelineárních booleovských funkcí , seskupených do 3 kol po 16 operacích. V algoritmu RIPEMD-128 byl počet kol zvýšen na 4. Kromě toho se používají další booleovské funkce a konstantní hodnoty [3] . V algoritmu jsou paralelně prováděny dvě linie (toky), které jsou podmíněně rozděleny na levou a pravou.
Algoritmus se skládá z několika hlavních kroků:
Algoritmus pracuje s datovými bloky 512 bitů, vstupní zpráva je předběžně zmenšena na požadovanou velikost. Nejprve se k ní bez ohledu na počáteční délku zprávy přidá jeden bit rovný 1. Poté se k ní přidají bity rovné 0, dokud délka výsledné sekvence nebude 448 bitů modulo 512. V důsledku rozšíření se na 512 bitů, upravená zpráva je přesně 64 bitů krátká. V tomto kroku k němu lze přidat od 1 do 512 bitů.
V dalším kroku se délka původní zprávy (před aplikací prvního kroku) v 64bitové reprezentaci přičte k 448bitové přijaté zprávě. Pokud původní délka zprávy přesáhne 264 bitů, použije se pouze nejméně významných 64 bitů její bitové délky. Navíc je délka původní zprávy přidána ve formě dvou 32bitových slov: nejprve se přidá nižších 32 bitů, poté vyšší. Po tomto kroku bude délka upravené zprávy 512 bitů. Může být také reprezentován jako 16 32bitových slov.
K určení pořadí 32bitových slov ve zprávě se v každém kole používají různé kombinace permutačních funkcí .
Pojďme definovat permutační funkci :
0 | jeden | 2 | 3 | čtyři | 5 | 6 | 7 | osm | 9 | deset | jedenáct | 12 | 13 | čtrnáct | patnáct | |
7 | čtrnáct | 13 | jeden | deset | 6 | patnáct | 3 | 12 | 0 | 9 | 5 | 2 | čtrnáct | jedenáct | osm |
A také permutační funkce :
V každém kole je pořadí určeno takto:
Čára | 1. kolo | 2. kolo | 3. kolo | 4. kolo |
---|---|---|---|---|
Vlevo, odjet | ||||
Že jo |
V každém kole jsou na každý řádek aplikovány určité booleovské funkce.
Pojďme definovat nelineární bitové booleovské funkce:
V každém kole, v závislosti na řadě, platí následující:
Čára | 1. kolo | 2. kolo | 3. kolo | 4. kolo |
---|---|---|---|---|
Vlevo, odjet | ||||
Že jo |
Následující posuny ( ) platí pro oba řádky :
Kolo | x0 _ | x1 _ | x2 _ | x3 _ | x4 _ | x5 _ | x6 _ | X7 _ | x8 _ | x9 _ | X 10 | X 11 | X 12 | X 13 | X 14 | X 15 |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
jeden | jedenáct | čtrnáct | patnáct | 12 | 5 | osm | 7 | 9 | jedenáct | 13 | čtrnáct | patnáct | 6 | 7 | 9 | osm |
2 | 12 | 13 | jedenáct | patnáct | 6 | 9 | 9 | 7 | 12 | patnáct | jedenáct | 13 | 7 | osm | 7 | 7 |
3 | 13 | patnáct | čtrnáct | jedenáct | 7 | 7 | 6 | osm | 13 | čtrnáct | 13 | 12 | 5 | 5 | 6 | 9 |
čtyři | čtrnáct | jedenáct | 12 | čtrnáct | osm | 6 | 5 | 5 | patnáct | 12 | patnáct | čtrnáct | 9 | 9 | osm | 6 |
Celé části následujících reálných čísel se používají jako konstanty ( ) použité v algoritmu:
Čára | 1. kolo | 2. kolo | 3. kolo | 4. kolo |
---|---|---|---|---|
Vlevo, odjet | ||||
Že jo |
Po nastavení všech počátečních funkcí a konstant, uvedení zprávy na požadovanou velikost, můžete přistoupit k provádění algoritmu. Algoritmus se provádí podél dvou paralelních cest (čar). Zpracování zprávy probíhá ve slovech o 16 slovech ve 32 bitech.
V každém kroku se pro každý z řádků provede následující operace:
kde označuje cyklický posun v pozicích.
Tabulka pro srovnání ukazuje rychlosti provádění funkcí podobných MD. Testovací programy byly napsány v assembleru a C s použitím optimalizací pro testovací stroj: [4]
Algoritmus | Mbps – asm | Mbps - C | Relativní výkon |
---|---|---|---|
RIPEMD-128 | 77,6 | 35.6 | 1,00 |
RIPEMD-160 | 45.3 | 19.3 | 0,58 |
SHA-1 | 54,9 | 21.2 | 0,71 |
MD5 | 136,2 | 59,7 | 1,76 |
MD4 | 190,6 | 81,4 | 2.46 |
Nezávislá studie provedená později ukázala poměrně podobné výsledky. Při měření byla použita C++ knihovna Crypto++ : [5]
Algoritmus | Mbps | Cykly na byte | Relativní výkon |
---|---|---|---|
RIPEMD-128 | 153 | 11.4 | 1,00 |
RIPEMD-160 | 106 | 16.5 | 0,69 |
RIPEMD-256 | 158 | 11.1 | 1.03 |
RIPEMD-320 | 110 | 15.9 | 0,72 |
SHA-1 | 153 | 11.4 | 1,00 |
MD5 | 255 | 6.8 | 1,67 |
V kryptografii existují dva hlavní typy útoků na kryptografické hashovací funkce: útok preimage – pokus najít zprávu s danou hash hodnotou, a kolizní útok – hledání dvou různých vstupních bloků kryptografické hashovací funkce, které produkují stejné hodnoty hashovací funkce, to jest hašovací kolize -funkce .
Algoritmus RIPEMD-128, stejně jako ostatní algoritmy z rodiny RIPEMD , včetně původního prvního, je považován za odolný vůči útoku preimage. Pro RIPEMD-128 je výpočetní složitost nalezení prvního předobrazu 2 128 , což se shoduje s maximální hodnotou pro jeho bitovou délku – hledání vyžaduje vyčerpávající hledání : [6]
Algoritmus | Obtížnost nalezení předobrazu | Nejlepší útok (kola) |
---|---|---|
RIPEMD (originál) | 2128 _ | 35 ze 48 |
RIPEMD-128 | 2128 _ | 35 z 64 |
RIPEMD-160 | 2160 _ | 31 z 80 |
Pro zkrácenou verzi RIPEMD-128 existují algoritmy pro nalezení prvního předobrazu, které vyžadují menší složitost: [7]
kola | Obtížnost hledání | Zdroj |
---|---|---|
33 | 2 124,5 _ | článek [6] |
35 | 2121 _ | článek [6] |
36 | 2 126,5 _ | článek [8] |
Původní RIPEMD nebyl kolizní. Kolize vešla ve známost v roce 2004 [2] , v roce 2005 vyšel odpovídající článek o kryptoanalýze algoritmu [9] . Vzhledem k tomu, že jakákoli kryptografická hašovací funkce je z definice zranitelná vůči narozeninovému útoku , obtížnost uhodnutí nemůže překročit 2 N/2 pro N-bitovou hašovací funkci. 128bitový RIPEMD však může být „zlomen“ na 2 18 , což je mnohem méně než jeho odpovídající hodnota 2 64 .
Kompletní RIPEMD-128 by teoreticky mohl být "rozbitý". Kolizní útok má složitost asi 2 61,57 (proti nezbytným 2 64 ). Zatímco zkrácená verze podléhá úspěšnějším útokům:
cílová | kola | Obtížnost hledání | Zdroj |
---|---|---|---|
Kompresní funkce | 48 | 2 40 | článek [7] |
Kompresní funkce | 60 | 2 57,57 | článek [1] |
Kompresní funkce | 63 | 2 59,91 | článek [1] |
Kompresní funkce | Úplné (64) | 2 61,57 | článek [1] |
hashovací funkce | 38 | 2 14 | článek [7] |
128bitový výstup funkce, který se krátkodobě nezdál být dostatečně chráněný [3] , posloužil právě jako důvod k přechodu na RIPEMD-160 . U ní jsou známy pouze kolizní útoky na zkrácenou verzi (48 z 80 ran, 251krát ) [10] .
Příklady demonstrující lavinový efekt :
RIPEMD128("aaa10 0 ") = "5b250e8d7ee4fd67f35c3d193c6648c4" RIPEMD128("aaa10 1 ") = "e607de9b0ca4fe01be84f87b83d8b5a3"Hashovací funkce | |
---|---|
obecný účel | |
Kryptografický | |
Funkce generování klíčů | |
Kontrolní číslo ( srovnání ) | |
Hashe |
|