Luffa (hashovací funkce)

Aktuální verze stránky ještě nebyla zkontrolována zkušenými přispěvateli a může se výrazně lišit od verze recenzované 26. dubna 2014; kontroly vyžadují 16 úprav .
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.   

Historie účasti v soutěži NIST SHA-3 [2]

Algoritmus Lúffa [6]

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 .

Dokončení zprávy

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í

Inicializace

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

Kulatá funkce

Funkce zaokrouhlení je sekvenční aplikací funkce vkládání zpráv MI a permutační funkce P.

Funkce vkládání zpráv

Funkce 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); } } SubCrumb

SubCrumb  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

MixWord je lineární permutační funkce , jako vstup  bere a ; výstupem jsou a získané algoritmem:

  1. , (<<< 2 - otočit doleva o 2 bity)
AddConstant

AddConstant - funkce pro  přidání konstanty

Tabulka konstant je uvedena v příloze B Lúffovy specifikace [6] .

Dokončovací blok

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.

Testovací vektory [6]

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

Kryptoanalýza

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 :

  • přidána funkce dokončení prázdného kola pro všechny velikosti hash
  • změněný S-blok
  • zvýšil počet opakování funkce kroku ze 7 na 8

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ýkon

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 :

  • Na 64bitových platformách bez SSE:
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
  • Pomocí SSE:
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 .

Poznámky

  1. Rodina hashovacích funkcí Luffa . Získáno 22. listopadu 2013. Archivováno z originálu dne 28. prosince 2013.
  2. Soutěž 12 NIST sha-3 . Získáno 22. listopadu 2013. Archivováno z originálu 9. července 2011.
  3. 1 2 Kandidáti druhého kola . Získáno 28. prosince 2013. Archivováno z originálu 10. dubna 2012.
  4. Druhá konference kandidátů SHA-3 . Získáno 28. prosince 2013. Archivováno z originálu 12. ledna 2014.
  5. 1 2 Zpráva o stavu druhého kola SHA-3 . Získáno 28. prosince 2013. Archivováno z originálu dne 14. března 2011.
  6. 1 2 3 4 Specifikace Luffa V.2.01 . Získáno 29. listopadu 2013. Archivováno z originálu 20. února 2013.
  7. Hledání kolize pro Reduced Luffa-256 v2 . Datum přístupu: 4. ledna 2014. Archivováno z originálu 20. února 2013.
  8. Zlepšení výkonu Luffa Hash Algorithm . Získáno 28. prosince 2013. Archivováno z originálu dne 21. března 2014.
  9. Skupina funkcí houby Keccak: Výkon softwaru . Datum přístupu: 4. ledna 2014. Archivováno z originálu 4. ledna 2014.

Literatura

Odkazy