Luffa (hash-funktion)

Den aktuelle version af siden er endnu ikke blevet gennemgået af erfarne bidragydere og kan afvige væsentligt fra den version , der blev gennemgået den 26. april 2014; checks kræver 16 redigeringer .
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.   

Historie om deltagelse i NIST SHA-3- konkurrencen [2]

Algoritme Lúffa [6]

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 .

Færdiggørelse af meddelelsen

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

Initialisering

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

Rund funktion

Den runde funktion er en sekventiel anvendelse af meddelelsesinjektionsfunktionen MI og permutationsfunktionen P.

Meddelelsesindsprøjtningsfunktioner

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

SubCrumb  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

MixWord  er en lineær permutationsfunktion, den tager og , som input ; outputtet er og , opnået af algoritmen:

  1. , (<<< 2 - drej til venstre med 2 bit)
AddConstant

AddConstant  - funktion til at tilføje en konstant til

En tabel med konstanter er givet i appendiks B til Lúffa-specifikationen [6] .

Fuldførelsesblok

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.

Test vektorer [6]

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

Krypteringsanalyse

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 :

  • tilføjet tom rund færdiggørelsesfunktion for alle hashstørrelser
  • ændret S-blok
  • øgede antallet af gentagelser af trinfunktionen fra 7 til 8

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.

Ydeevne

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 :

  • På 64-bit platforme uden SSE:
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
  • Brug af SSE:
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 .

Noter

  1. Hash-funktionsfamilien Luffa . Hentet 22. november 2013. Arkiveret fra originalen 28. december 2013.
  2. 12 NIST sha-3 konkurrence . Hentet 22. november 2013. Arkiveret fra originalen 9. juli 2011.
  3. 1 2 Anden runde kandidater . Hentet 28. december 2013. Arkiveret fra originalen 10. april 2012.
  4. Den anden SHA-3-kandidatkonference . Hentet 28. december 2013. Arkiveret fra originalen 12. januar 2014.
  5. 1 2 Statusrapport om anden runde af SHA-3 . Hentet 28. december 2013. Arkiveret fra originalen 14. marts 2011.
  6. 1 2 3 4 Luffa-specifikation V.2.01 . Hentet 29. november 2013. Arkiveret fra originalen 20. februar 2013.
  7. Find kollisioner for reduceret Luffa-256 v2 . Dato for adgang: 4. januar 2014. Arkiveret fra originalen 20. februar 2013.
  8. Forbedring af ydeevnen af ​​Luffa Hash Algorithm . Hentet 28. december 2013. Arkiveret fra originalen 21. marts 2014.
  9. Keccak svampefunktionsfamilien: Softwareydelse . Dato for adgang: 4. januar 2014. Arkiveret fra originalen 4. januar 2014.

Litteratur

Links