Luffa | |
---|---|
Vývojáři | Dai Watanabe, Hisayoshi Sato, Christophe De Canniere |
Vytvořeno | 2008 |
zveřejněno | 2008 |
Velikost hash | 224, 256, 384, 512 |
Typ | hashovací funkce |
Lúffa [1] (hashovací funkce, vyslovováno „luffa“) je kryptografický algoritmus (rodina algoritmů) pro hašování proměnné délky bitů, vyvinutý Dai Watanabe , Hisayoshi Sato z Hitachi Yokohama Research Laboratory a Christophe De Cannière ( Niderl. Christophe De Cannière ) z výzkumné skupiny COSIC ( en: COSIC ) Katolické univerzity v Lovani k účasti v soutěži [2] , US National Institute of Standards and Technology ( NIST ). Lúffa je variantou funkce houby navržené Guido Bertonim et al., jejíž kryptografická síla je založena pouze na náhodnosti základní permutace . Na rozdíl od původní funkce houby , Lúffa používá více paralelních permutací a funkcí vkládání zpráv.
Zpracování zpráv se provádí pomocí řetězce funkcí kulatého míchání s pevnou vstupní a výstupní délkou, což je funkce houby . Řetězec se skládá z mezilehlých směšovacích bloků C' (kruhové funkce) a dokončovacího bloku C''. Kruhové funkce jsou tvořeny rodinou nelineárních permutací, tzv. krokovými funkcemi. Vstupem funkce prvního kola je : první blok zprávy a inicializační hodnoty , kde je počet permutací. Vstupní parametry -tého kola jsou : výstup předchozího kola a -tý blok zpráv .
Přidání zprávy o délce až násobku 256 bitů se provádí řetězcem , kde počet nul je určen z porovnání
Kromě prvního bloku zprávy jsou na vstupu funkce prvního kola uvedeny vektory jako inicializační hodnoty .
i | j | |||||||
---|---|---|---|---|---|---|---|---|
0 | jeden | 2 | 3 | čtyři | 5 | 6 | 7 | |
0 | 0x6d251e69 | 0x44b051e0 | 0x4eaa6fb4 | 0xdbf78465 | 0x6e292011 | 0x90152df4 | 0xee058139 | 0xdef610bb |
jeden | 0xc3b44b95 | 0xd9d2f256 | 0x70eee9a0 | 0xde099fa3 | 0x5d9b0557 | 0x8fc944b3 | 0xcf1ccf0e | 0x746cd581 |
2 | 0xf7efc89d | 0x5dba5781 | 0x04016ce5 | 0xad659c05 | 0x0306194f | 0x666d1836 | 0x24aa230a | 0x8b264ae7 |
3 | 0x858075d5 | 0x36d79cce | 0xe571f7d7 | 0x204b1f67 | 0x35870c6a | 0x57e9e923 | 0x14bcb808 | 0x7cde72ce |
čtyři | 0x6c68e9be | 0x5ec41e22 | 0xc825b7c7 | 0xaffb4363 | 0xf5df3999 | 0x0fc688f1 | 0xb07224cc | 0x03e86cea |
Funkce zaokrouhlení je sekvenční aplikací funkce vkládání zpráv MI a permutační funkce P.
Funkce vkládání zprávFunkce vkládání zpráv může být reprezentována jako transformační matice přes kruh . Generování polynomu pole .
Funkce vkládání zpráv
kde čísla označují polynomy
Funkce vkládání zpráv
Funkce vkládání zpráv
Permutační funkce
Funkce nelineární permutace má bitový vstup, délka sub-permutace je pevně stanovena ve specifikaci Lúffa [6] , ; počet permutací závisí na velikosti hashe a je uveden v tabulce.
Délka hash | Počet permutací |
---|---|
224 | 3 |
256 | 3 |
384 | čtyři |
512 | 5 |
Permutační funkce je 8násobná iterace krokovací funkce přes blok získaný z funkce vkládání zpráv . Blok je reprezentován jako 8 32bitových slov: . Funkce krok se skládá ze 3 funkcí: SubCrumb, MixWord, AddConstant.
Permutace(a[8], j){ //Permutace Q_j for (r = 0; r < 8; r++){ SubCrumb(a[0],a[1],a[2],a[3]); SubCrumb(a[5],a[6],a[7],a[4]); pro (k = 0; k < 4; k++) MixWord(a[k],a[k+4]); AddConstant(a, j, r); } } SubCrumbSubCrumb je funkce nahrazení l-tých bitů v nebo podél S-boxu , výsledkem provedení je nahrazení , index S-boxu se získá zřetězením odpovídajících bitů : , bity jsou nahrazeny odpovídajícími bity z podle na následující schéma:
MixWord je lineární permutační funkce , jako vstup bere a ; výstupem jsou a získané algoritmem:
AddConstant - funkce pro přidání konstanty
Tabulka konstant je uvedena v příloze B Lúffovy specifikace [6] .
Závěrečná fáze tvorby přehledu zpráv se skládá z postupných iterací funkce exit a funkce round s nulovým blokem zprávy 0x00 0 na vstupu. Funkce exit je XOR všech mezilehlých hodnot a výsledkem je 256bitové slovo . Při i -té iteraci je hodnota výstupní funkce určena jako
, kde , pokud , jinak
Označte 32bitovými slovy v , pak se výstup Lúffa postupně skládá . Symbol "||" znamená zřetězení.
Délka hash | Hodnota hash |
---|---|
224 | |
256 | |
384 | |
512 |
Hash Lúffa-224 je ve skutečnosti hash Lúffa-256 bez posledního 32bitového slova.
Digesty zprávy „abc“ při různých velikostech hash .
224 | 256 | 384 | 512 | |
---|---|---|---|---|
Z0,0 _ | 0xf29311b8 | 0xf29311b8 | 0x9a7abb79 | 0xf4024597 |
Z0.1 _ | 0x7e9e40de | 0x7e9e40de | 0x7a840e2d | 0x3e80d79d |
Z0,2 _ | 0x7699be23 | 0x7699be23 | 0x423c34c9 | 0x0f4b9b20 |
Z 0,3 | 0xfbeb5a47 | 0xfbeb5a47 | 0x1f559f68 | 0x2ddd4505 |
Z0,4 _ | 0xcb16ea4f | 0xcb16ea4f | 0x09bdb291 | 0xb81b8830 |
Z0,5 _ | 0x5556d47c | 0x5556d47c | 0x6fb2e9ef | 0x501bea31 |
Z0,6 _ | 0xa40c12ad | 0xa40c12ad | 0xfec2fa0a | 0x612b5817 |
Z 0,7 | 0x764a73bd | 0x7a69881b | 0xaae38792 | |
Z 1,0 | 0xe9872480 | 0x1dcefd80 | ||
Z 1.1 | 0xc635d20d | 0x8ca2c780 | ||
Z 1.2 | 0x2fd6e95d | 0x20aff593 | ||
Z 1.3 | 0x046601a7 | 0x45d6f91f | ||
Z 1.4 | 0x0ee6b2ee | |||
Z 1,5 | 0xe113f0cb | |||
Z 1.6 | 0xcf22b643 | |||
Z 1.7 | 0x81387e8a |
Během druhého kola soutěže SHA-3 Luffa-224 a Luffa-256 zpočátku vykazovaly nízkou kryptografickou sílu a pro úspěšný útok byly vyžadovány zprávy. Poté byl algoritmus upraven Dai Watanabe a byl pojmenován Luffa v.2. Luffa v.2 [5] změny :
Bart Preneel prezentoval úspěšný útok detekce kolizí [7] pro 4 kola funkce Luffa stepping pro hašovací operace a pro 5 kol, čímž ukázal konstrukční odolnost vůči diferenciální detekci kolizí.
V roce 2010 provedli Thomas Oliviera a Giulio Lopez úspěšný výzkum [8] o možnosti zvýšení výkonu původní implementace Luffa. Optimalizovaná implementace algoritmu má 20% zvýšení výkonu při výpočtu hash Luffa-512 při spuštění v 1 vláknu; pro Luffa-256/384 není zvýšení výkonu jednovláknové implementace v různých testech větší než 5 %. Výsledky testu jsou uvedeny v tabulce v cyklech na bajt :
Implementace algoritmu | Luffa-256 | Luffa-384 | Luffa-512 |
---|---|---|---|
Původní provedení 2009 | |||
Jednovláknová implementace | 27 | 42 | 58 |
Thomas Oliviera 2010 | |||
Jednovláknová implementace | 24 | 42 | 46 |
Vícevláknová implementace | dvacet | 24 | 36 |
Implementace algoritmu | Luffa-256 | Luffa-384 | Luffa-512 |
---|---|---|---|
Původní provedení 2009 | |||
Jednovláknová implementace | 17 | 19 | třicet |
Thomas Oliviera 2010 | |||
Jednovláknová implementace | patnáct | 16 | 24 |
Vícevláknová implementace | patnáct | osmnáct | 25 |
Pro srovnání, implementace Keccak (vítěz soutěže SHA-3 ) v testech [9] na podobném procesoru pomocí SSE ukázala následující výsledky: Keccak-256 - 15 c/b, Keccak-512 - 12 c/b .
Hashovací funkce | |
---|---|
obecný účel | |
Kryptografický | |
Funkce generování klíčů | |
Kontrolní číslo ( srovnání ) | |
Hashe |
|