Luffa | |
---|---|
Udviklere | Dai Watanabe, Hisayoshi Sato, Christophe De Canniere |
Oprettet | 2008 |
offentliggjort | 2008 |
Hash størrelse | 224, 256, 384, 512 |
Type | hash funktion |
Lúffa [1] (hash-funktion, udtales "luffa") er en kryptografisk algoritme (familie af algoritmer) til hashing af variabel bitlængde, udviklet af Dai Watanabe , Hisayoshi Sato fra Hitachi Yokohama Research Laboratory og Christophe De Cannière ( Niderl. Christophe De Cannière ) fra forskningsgruppen COSIC ( en: COSIC ) fra det katolske universitet i Leuven for at deltage i konkurrencen [2] , US National Institute of Standards and Technology ( NIST ). Lúffa er en variant af svampefunktionen foreslået af Guido Bertoni et al., hvis kryptografiske styrke kun er baseret på tilfældigheden af den underliggende permutation . I modsætning til den originale svampefunktion bruger Lúffa flere parallelle permutationer og beskedinjektionsfunktioner.
Beskedbehandling udføres af en kæde af runde blandefunktioner med en fast input- og outputlængde, som er en svampefunktion . Kæden består af mellemblandingsblokke C' (runde funktioner) og en færdiggørelsesblok C''. Runde funktioner er dannet af en familie af ikke-lineære permutationer, de såkaldte trinfunktioner. Indgangen til den første runde funktion er : den første blok af beskeden og initialiseringsværdier , hvor er antallet af permutationer. Indgangsparametrene for den -te runde er : outputtet fra den foregående runde og den -te beskedblok .
Tilføjelsen af en besked med længde op til et multiplum af 256 bit udføres af strengen , hvor antallet af nuller bestemmes ud fra sammenligningen
Ud over den første blok af meddelelsen er vektorer givet som initialiseringsværdier ved input af den første runde funktion .
jeg | j | |||||||
---|---|---|---|---|---|---|---|---|
0 | en | 2 | 3 | fire | 5 | 6 | 7 | |
0 | 0x6d251e69 | 0x44b051e0 | 0x4eaa6fb4 | 0xdbf78465 | 0x6e292011 | 0x90152df4 | 0xee058139 | 0xdef610bb |
en | 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 |
fire | 0x6c68e9be | 0x5ec41e22 | 0xc825b7c7 | 0xaffb4363 | 0xf5df3999 | 0x0fc688f1 | 0xb07224cc | 0x03e86cea |
Den runde funktion er en sekventiel anvendelse af meddelelsesinjektionsfunktionen MI og permutationsfunktionen P.
MeddelelsesindsprøjtningsfunktionerMeddelelsesindsprøjtningsfunktionen kan repræsenteres som en transformationsmatrix over en ring . Generering af feltpolynomium .
Meddelelsesindsprøjtningsfunktioner
hvor tallene henholdsvis betegner polynomierne
Meddelelsesindsprøjtningsfunktioner
Meddelelsesindsprøjtningsfunktioner
Permutationsfunktionen
Den ikke-lineære permutationsfunktion har en bit-input, længden af sub-permutationen er fastsat i Lúffa-specifikationen [6] , ; antallet af permutationer afhænger af størrelsen af hashen og er vist i tabellen.
Hash længde | Antal permutationer |
---|---|
224 | 3 |
256 | 3 |
384 | fire |
512 | 5 |
Permutationsfunktionen er en 8-fold iteration af trinfunktionen over blokken opnået fra meddelelsesinjektionsfunktionen . Blokken er repræsenteret som 8 32-bit ord: . Trinfunktionen består af 3 funktioner: SubCrumb, MixWord, AddConstant.
Permute(a[8], j){ //Permutation 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); } } SubCrumbSubCrumb er funktionen til at erstatte l-te bits i eller langs S-boksen , resultatet af udførelsen er erstatningen , S-box-indekset opnås ved at sammenkæde de tilsvarende bits : , bitsene erstattes med de tilsvarende bits fra iflg . til følgende ordning:
MixWord er en lineær permutationsfunktion, den tager og , som input ; outputtet er og , opnået af algoritmen:
AddConstant - funktion til at tilføje en konstant til
En tabel med konstanter er givet i appendiks B til Lúffa-specifikationen [6] .
Det sidste trin af meddelelsessammenslutningsdannelsen består af successive iterationer af exitfunktionen og rundfunktionen med en nul-meddelelsesblok 0x00 0 ved indgangen. Exit-funktionen er en XOR af alle mellemværdier, og resultatet er et 256-bit ord . Ved den i -te iteration bestemmes værdien af outputfunktionen som
, hvor , hvis , ellers
Betegn med 32-bit ord i , så er output fra Lúffa sekventielt sammensat . Symbol "||" står for sammenkædning.
Hash længde | Hash værdi |
---|---|
224 | |
256 | |
384 | |
512 |
Lúffa-224-hash er faktisk Lúffa-256-hash uden det sidste 32-bit ord.
Sammendrag af meddelelsen "abc" ved forskellige hash- størrelser .
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 |
Under anden runde af SHA-3- konkurrencen viste Luffa-224 og Luffa-256 i første omgang lav kryptografisk styrke, og meddelelser var nødvendige for et vellykket angreb. Derefter blev algoritmen modificeret af Dai Watanabe og fik navnet Luffa v.2. Luffa v.2 [5] ændringer :
Bart Preneel præsenterede et vellykket kollisionsdetektionsangreb [7] for 4 runder af Luffa stepping-funktionen til hashing-operationer og i 5 runder, hvilket viste designmodstanden mod differentiel kollisionsdetektion.
I 2010 udførte Thomas Oliviera og Giulio Lopez succesfuld forskning [8] om muligheden for at øge ydeevnen af den oprindelige implementering af Luffa. Den optimerede implementering af algoritmen har en ydelsesforøgelse på 20 % i beregningen af Luffa-512-hashen, når den udføres i 1 tråd; for Luffa-256/384 er ydeevnegevinsten for en enkelt-trådet implementering i forskellige tests ikke mere end 5 %. Testresultaterne er vist i tabellen i cyklusser pr. byte :
Implementering af algoritmen | Luffa-256 | Luffa-384 | Luffa-512 |
---|---|---|---|
Oprindelig implementering 2009 | |||
Enkelt gevind implementering | 27 | 42 | 58 |
Thomas Oliviera 2010 | |||
Enkelt gevind implementering | 24 | 42 | 46 |
Multithreaded implementering | tyve | 24 | 36 |
Implementering af algoritmen | Luffa-256 | Luffa-384 | Luffa-512 |
---|---|---|---|
Oprindelig implementering 2009 | |||
Enkelt gevind implementering | 17 | 19 | tredive |
Thomas Oliviera 2010 | |||
Enkelt gevind implementering | femten | 16 | 24 |
Multithreaded implementering | femten | atten | 25 |
Til sammenligning viste implementeringen af Keccak (vinderen af SHA-3-konkurrencen ) i test [9] på en lignende processor ved brug af SSE følgende resultater: Keccak-256 - 15 c/b, Keccak-512 - 12 c/b .
Hash funktioner | |
---|---|
generelle formål | |
Kryptografisk | |
Nøglegenereringsfunktioner | |
Tjek nummer ( sammenligning ) | |
Hashes |
|