Luffa (hash függvény)

Az oldal jelenlegi verzióját még nem ellenőrizték tapasztalt hozzászólók, és jelentősen eltérhet a 2014. április 26-án felülvizsgált verziótól ; az ellenőrzések 16 szerkesztést igényelnek .
Luffa
Fejlesztők Dai Watanabe, Hisayoshi Sato, Christophe De Canniere
Létrehozva 2008
közzétett 2008
Hash méret 224, 256, 384, 512
Típusú hash függvény

A Lúffa [1] (kivonatoló függvény, ejtsd: „luffa”) egy kriptográfiai algoritmus (algoritmuscsalád) a változó bithosszúságú kivonatoláshoz , amelyet Dai Watanabe ,  Hisayoshi Sato , a Hitachi  Yokohama Research Laboratory és Christophe De Cannière ( Niderl. Christophe De Cannière ) fejlesztettek ki. ) a Leuveni Katolikus Egyetem COSIC ( en: COSIC ) kutatócsoportjától , hogy részt vegyen a versenyen [2] , az US National Institute of Standards and Technology ( NIST ). A Lúffa a Guido Bertoni és munkatársai által javasolt szivacsfunkció egy változata , amelynek kriptográfiai erőssége csak az alapul szolgáló permutáció véletlenszerűségén alapul . Az eredeti szivacs funkcióval ellentétben a Lúffa több párhuzamos permutációt és üzenetbefecskendezési funkciót használ.   

A NIST SHA-3 versenyen való részvétel története [2]

Algoritmus Lúffa [6]

Az üzenetfeldolgozást kerek keverési funkciók lánca hajtja végre, rögzített bemeneti és kimeneti hosszúsággal, amely egy szivacsfunkció . A lánc C' közbenső keverőblokkokból (kerek funkciók) és egy C'' befejező blokkból áll. A körfüggvényeket nemlineáris permutációk családja, az úgynevezett lépésfüggvények alkotják. Az első kör függvény bemenete : az üzenet első blokkja és az inicializálási értékek , ahol  a permutációk száma. A -edik kör bemeneti paraméterei : az előző kör kimenete és a -edik üzenetblokk .

Az üzenet befejezése

A legfeljebb 256 bites hosszúságú üzenet összeadását a karakterlánc hajtja végre , ahol a nullák számát az összehasonlításból határozzuk meg.

Inicializálás

Az üzenet első blokkján kívül az első kör függvény bemenetén a vektorok inicializálási értékeket kapnak .

én j
0 egy 2 3 négy 5 6 7
0 0x6d251e69 0x44b051e0 0x4eaa6fb4 0xdbf78465 0x6e292011 0x90152df4 0xee058139 0xdef610bb
egy 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
négy 0x6c68e9be 0x5ec41e22 0xc825b7c7 0xaffb4363 0xf5df3999 0x0fc688f1 0xb07224cc 0x03e86cea

Kerek funkció

A kerek függvény az MI üzenetinjektáló függvény és a P permutációs függvény szekvenciális alkalmazása.

Üzenetbefecskendezési funkciók

Az üzenetinjektáló függvény egy gyűrűn átívelő transzformációs mátrixként ábrázolható . Mezőpolinom generálása .

Üzenetbefecskendezési funkciók

ahol a számok rendre a polinomokat jelölik

Üzenetbefecskendezési funkciók

Üzenetbefecskendezési funkciók

A permutációs függvény

A nemlineáris permutációs függvénynek bitbemenete van, az alpermutáció hossza a Lúffa specifikációban rögzített [6] , ; a permutációk száma a hash méretétől függ, és a táblázatban látható.

Hash hossza Permutációk száma
224 3
256 3
384 négy
512 5

A permutációs függvény a léptető függvény 8-szoros iterációja az üzenetinjektáló függvényből kapott blokkon keresztül . A blokk 8 32 bites szóként jelenik meg: . A lépés funkció 3 funkcióból áll: SubCrumb, MixWord, AddConstant.

Permutáció(a[8], j){ //Permutáció 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]); for (k = 0; k < 4; k++) MixWord(a[k],a[k+4]); AddConstant(a, j, r); } } SubCrumb

A SubCrumb  az l-edik bitek cseréjének funkciója az S-boxban vagy annak mentén , a végrehajtás eredménye a csere , az S-box indexet a megfelelő bitek összefűzésével kapjuk meg : , a biteket a megfelelő bitekkel helyettesítjük a következő sémához:

MixWord

A MixWord  egy lineáris permutációs függvény, amely bemenetként és ; a kimenet a és , amelyet az algoritmussal kapunk:

  1. , (<<< 2 - elforgatás balra 2 bittel)
AddConstant

AddConstant  – a konstans hozzáadására szolgáló függvény

Az állandók táblázatát a Lúffa specifikáció [6] B. függeléke tartalmazza .

Befejező blokk

Az üzenetkivonat kialakításának utolsó szakasza a kilépési függvény és a kerek függvény egymást követő iterációiból áll, a bemeneten 0x00 0 nulla üzenetblokkkal . A kilépési függvény az összes köztes érték XOR-je, és az eredmény egy 256 bites szó . Az i -edik iterációnál a kimeneti függvény értékét a következőképpen határozzuk meg

, hol , ha , különben

Jelölje 32 bites szavakkal -ban , akkor a Lúffa kimenete szekvenciálisan összeáll . "||" szimbólum az összefűzést jelenti.

Hash hossza Hash érték
224
256
384
512

A Lúffa-224 hash valójában a Lúffa-256 hash az utolsó 32 bites szó nélkül.

Tesztvektorok [6]

Az "abc" üzenet kivonatai különböző hash -méretekben .

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

Kriptanalízis

Az SHA-3 verseny második fordulójában a Luffa-224 és a Luffa-256 kezdetben alacsony kriptográfiai erősséget mutatott, és üzenetekre volt szükség a sikeres támadáshoz. Ezt követően az algoritmust Dai Watanabe módosította, és a Luffa v.2 nevet kapta. Luffa v.2 [5] változások :

  • hozzáadva az üres körkiegészítő funkciót minden hash mérethez
  • S-blokkot cseréltek
  • a lépésfüggvény ismétléseinek számát 7-ről 8-ra növelte

Bart Preneel sikeres ütközésészlelési támadást [7] mutatott be a Luffa léptető funkció 4 fordulójára hashelési műveletekre és 5 körre, így bemutatva a tervezési ellenállást a differenciális ütközésérzékeléssel szemben.

Teljesítmény

2010 -ben Thomas Oliviera és Giulio Lopez sikeres kutatást [8] végzett a Luffa eredeti megvalósításának teljesítményének növelésének lehetőségéről. Az algoritmus optimalizált megvalósítása 20%-os teljesítménynövekedést eredményez a Luffa-512 hash kiszámításában, ha 1 szálban hajtják végre; a Luffa-256/384 esetében az egyszálú implementáció teljesítménynövekedése különböző tesztekben nem több, mint 5%. A teszt eredményeit a táblázat mutatja ciklusonként bájtonként :

  • SSE nélküli 64 bites platformokon:
Az algoritmus megvalósítása Luffa-256 Luffa-384 Luffa-512
Eredeti megvalósítás 2009
Egyszálas megvalósítás 27 42 58
Thomas Oliviera 2010
Egyszálas megvalósítás 24 42 46
Többszálú megvalósítás húsz 24 36
  • SSE használata:
Az algoritmus megvalósítása Luffa-256 Luffa-384 Luffa-512
Eredeti megvalósítás 2009
Egyszálas megvalósítás 17 19 harminc
Thomas Oliviera 2010
Egyszálas megvalósítás tizenöt 16 24
Többszálú megvalósítás tizenöt tizennyolc 25

Összehasonlításképpen, a Keccak ( az SHA-3 verseny győztese ) tesztekben [9] egy hasonló, SSE-t használó processzoron a következő eredményeket mutatta: Keccak-256 - 15 c/b, Keccak-512 - 12 c/b .

Jegyzetek

  1. A Hash Function Family Luffa . Letöltve: 2013. november 22. Az eredetiből archiválva : 2013. december 28..
  2. 12 NIST sha-3 verseny . Letöltve: 2013. november 22. Az eredetiből archiválva : 2011. július 9..
  3. 1 2 Második forduló jelöltjei . Letöltve: 2013. december 28. Az eredetiből archiválva : 2012. április 10..
  4. A második SHA-3 jelölt konferencia . Letöltve: 2013. december 28. Az eredetiből archiválva : 2014. január 12..
  5. 1 2 Állapotjelentés az SHA-3 második fordulójáról . Letöltve: 2013. december 28. Az eredetiből archiválva : 2011. március 14..
  6. 1 2 3 4 Luffa specifikáció V.2.01 . Letöltve: 2013. november 29. Az eredetiből archiválva : 2013. február 20..
  7. Ütközések keresése csökkentett Luffa-256 v2 esetén . Hozzáférés dátuma: 2014. január 4. Az eredetiből archiválva : 2013. február 20.
  8. A Luffa Hash Algorithm teljesítményének javítása . Letöltve: 2013. december 28. Az eredetiből archiválva : 2014. március 21..
  9. A Keccak szivacs funkciócsalád: Szoftverteljesítmény . Hozzáférés időpontja: 2014. január 4. Eredetiből archiválva : 2014. január 4.

Irodalom

Linkek