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.
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 .
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.
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 |
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ókAz ü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); } } SubCrumbA 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:
A MixWord egy lineáris permutációs függvény, amely bemenetként és ; a kimenet a és , amelyet az algoritmussal kapunk:
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 .
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.
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 |
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 :
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.
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 :
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 |
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 .
Hash függvények | |
---|---|
Általános rendeltetésű | |
Kriptográfia | |
Kulcsgenerálási funkciók | |
Csekkszám ( összehasonlítás ) | |
Hashes |
|