Luffa | |
---|---|
Kehittäjät | Dai Watanabe, Hisayoshi Sato, Christophe De Canniere |
Luotu | 2008 |
julkaistu | 2008 |
Hash-koko | 224, 256, 384, 512 |
Tyyppi | hash-toiminto |
Lúffa [1] (hash-funktio, lausutaan "luffa") on salausalgoritmi (algoritmien perhe) muuttuvan bitin pituuden hajauttamiseen , jonka ovat kehittäneet Dai Watanabe , Hisayoshi Sato Hitachi Yokohama Research Laboratorysta ja Christophe De Cannière ( Niderl. Christophe De Cannière) ) Leuvenin katolisen yliopiston COSIC -tutkimusryhmältä ( en: COSIC ) osallistuakseen kilpailuun [2] , US National Institute of Standards and Technology ( NIST ). Lúffa on muunnos Guido Bertonin ym . ehdottamasta sienifunktiosta , jonka kryptografinen vahvuus perustuu vain taustalla olevan permutaation satunnaisuuteen . Toisin kuin alkuperäinen sienitoiminto , Lúffa käyttää useita rinnakkaisia permutaatioita ja viestin injektiotoimintoja.
Viestien käsittely suoritetaan ketjulla pyöreitä sekoitustoimintoja, joilla on kiinteä tulo- ja lähtöpituus, joka on sienitoiminto . Ketju koostuu välisekoituslohkoista C' (pyöreät toiminnot) ja täydennyslohkosta C''. Pyöreät funktiot muodostuvat epälineaaristen permutaatioiden perheestä, niin kutsutuista askelfunktioista. Ensimmäisen kierroksen funktion syöte on : viestin ensimmäinen lohko ja alustusarvot , jossa on permutaatioiden lukumäärä. -: nnen kierroksen syöttöparametrit ovat : edellisen kierroksen lähtö ja -:nnen viestilohkon syöttöparametrit .
Sanoman , jonka pituus on enintään 256 bitin kerrannainen, lisääminen suoritetaan merkkijonolla , jossa nollien lukumäärä määritetään vertailusta
Viestin ensimmäisen lohkon lisäksi vektorit annetaan alustusarvoina ensimmäisen kierroksen funktion sisääntulossa .
i | j | |||||||
---|---|---|---|---|---|---|---|---|
0 | yksi | 2 | 3 | neljä | 5 | 6 | 7 | |
0 | 0x6d251e69 | 0x44b051e0 | 0x4eaa6fb4 | 0xdbf78465 | 0x6e292011 | 0x90152df4 | 0xee058139 | 0xdef610bb |
yksi | 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 |
neljä | 0x6c68e9be | 0x5ec41e22 | 0xc825b7c7 | 0xaffb4363 | 0xf5df3999 | 0x0fc688f1 | 0xb07224cc | 0x03e86cea |
Pyöreä funktio on viestin injektiofunktion MI ja permutaatiofunktion P peräkkäinen sovellus.
Viestin lisäystoiminnotViestin injektiofunktio voidaan esittää muunnosmatriisina renkaan yli . Luodaan kenttäpolynomia .
Viestin ruiskutustoiminnot
jossa numerot vastaavat vastaavasti polynomeja
Viestin ruiskutustoiminnot
Viestin ruiskutustoiminnot
Permutaatiofunktio
Epälineaarisella permutaatiofunktiolla on bittitulo, alipermutaation pituus on kiinteä Lúffa-spesifikaatiossa [6] , ; permutaatioiden määrä riippuu tiivisteen koosta ja näkyy taulukossa.
Hash pituus | Permutaatioiden määrä |
---|---|
224 | 3 |
256 | 3 |
384 | neljä |
512 | 5 |
Permutaatiofunktio on 8-kertainen iteraatio askelfunktiosta viestin injektiofunktiosta saadun lohkon yli . Lohko esitetään 8 32-bittisenä sanana: . Vaihetoiminto koostuu kolmesta funktiosta: SubCrumb, MixWord, AddConstant.
Permutti(a[8], j){ //Permutaatio 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]); (k = 0; k < 4; k++) MixWord(a[k],a[k+4]); AddConstant(a, j, r); } } SubCrumbSubCrumb on toiminto, jolla korvataan l:nnet bitit S-laatikossa tai sitä pitkin , suorituksen tulos on korvaaminen , S-boxin indeksi saadaan ketjuttamalla vastaavat bitit : , bitit korvataan vastaavilla bitteillä seuraavaan kaavaan:
MixWord on lineaarinen permutaatiofunktio, joka ottaa ja syötteenä ; tulos on ja , saatu algoritmilla:
AddConstant - toiminto, johon vakio lisätään
Vakioiden taulukko on Lúffa-määrityksen [6] liitteessä B.
Sanomatiivistelmän muodostuksen viimeinen vaihe koostuu peräkkäisistä exit-funktion ja pyöreän funktion iteraatioista, joiden sisääntulossa on nollaviestilohko 0x00 0. Poistumisfunktio on kaikkien väliarvojen XOR, ja tuloksena on 256-bittinen sana . i : nnessä iteraatiossa tulosfunktion arvo määritetään muodossa
, missä , jos , muuten
Merkitään 32-bittisillä sanoilla , niin Lúffan tulosteet muodostuvat peräkkäin . Symboli "||" tarkoittaa ketjutusta.
Hash pituus | Hash-arvo |
---|---|
224 | |
256 | |
384 | |
512 |
Lúffa-224 hash on itse asiassa Lúffa-256 hash ilman viimeistä 32-bittistä sanaa.
Tiivistelmät viestistä "abc" eri hash -kooilla .
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 |
SHA-3- kilpailun toisella kierroksella Luffa-224 ja Luffa-256 osoittivat aluksi alhaista salausvoimakkuutta, ja onnistuneeseen hyökkäykseen vaadittiin viestejä. Sen jälkeen Dai Watanabe muokkasi algoritmia ja nimettiin Luffa v.2. Luffa v.2 [5] muutokset :
Bart Preneel esitteli onnistuneen törmäyksen havaitsemishyökkäyksen [7] 4 kierrokselle Luffa stepping -toiminnolle hajautustoimintoja varten ja 5 kierrosta, mikä osoitti mitoituskestävyyden differentiaalisen törmäyksen havaitsemiseen.
Vuonna 2010 Thomas Oliviera ja Giulio Lopez tekivät menestyksekkään tutkimuksen [8] mahdollisuudesta parantaa Luffan alkuperäisen toteutuksen suorituskykyä. Algoritmin optimoidulla toteutuksella on 20 % suorituskyvyn lisäys Luffa-512 hashin laskennassa, kun se suoritetaan 1 säikeessä; Luffa-256/384:lle yksisäikeisen toteutuksen suorituskyvyn lisäys eri testeissä on korkeintaan 5 %. Testitulokset näkyvät taulukossa jaksoina tavua kohden :
Algoritmin toteutus | Luffa-256 | Luffa-384 | Luffa-512 |
---|---|---|---|
Alkuperäinen toteutus 2009 | |||
Yksisäikeinen toteutus | 27 | 42 | 58 |
Thomas Oliviera 2010 | |||
Yksisäikeinen toteutus | 24 | 42 | 46 |
Monisäikeinen toteutus | kaksikymmentä | 24 | 36 |
Algoritmin toteutus | Luffa-256 | Luffa-384 | Luffa-512 |
---|---|---|---|
Alkuperäinen toteutus 2009 | |||
Yksisäikeinen toteutus | 17 | 19 | kolmekymmentä |
Thomas Oliviera 2010 | |||
Yksisäikeinen toteutus | viisitoista | 16 | 24 |
Monisäikeinen toteutus | viisitoista | kahdeksantoista | 25 |
Vertailun vuoksi, Keccakin ( SHA-3-kilpailun voittaja ) käyttöönotto testeissä [9] samankaltaisella prosessorilla käyttäen SSE:tä osoitti seuraavat tulokset: Keccak-256 - 15 c/b, Keccak-512 - 12 c/b .
Hash-funktiot | |
---|---|
yleinen tarkoitus | |
Kryptografinen | |
Avainten luontitoiminnot | |
Tarkista numero ( vertailu ) | |
Hashes |
|