Fuga | |
---|---|
Vývojáři | Shai Halevi , William E. Hall , Charanjit S. Jutla |
Vytvořeno | 2009 |
zveřejněno | října 2009 |
Velikost hash | 224, 256, 384 nebo 512 bitů |
Počet kol | čtyři |
Typ | hashovací funkce |
Fugue je hashovací algoritmus, který vyvinuli Shai Halevi , William E. Hall a Charanjit S. Jutla z IBM pro hashovací soutěž National Institute of Standards and Technology v roce 2009 , kde postoupil do druhého kola [1] . Algoritmus se však do třetího kola soutěže nedostal kvůli nedostatečné kryptografické analýze a nejistotě ohledně kryptografické síly. [2]
Pro vstupní zprávu o délce 1 až 264 −1 bitů algoritmus generuje 224, 256, 384 nebo 512 bitovou hash hodnotu, také nazývanou souhrn zprávy . Funkce pro příslušné výstupní délky jsou pojmenovány Fugue-224, Fugue-256, Fugue-384 a Fugue-512. Autoři také popsali parametrizovanou verzi algoritmu Fugue. Slabě chráněná verze Fugue-256, která běží dvakrát rychleji než standardní verze, je také popsána jako parametrizovaná verze.
Autoři uvádějí, že většina existujících strategií útoku na hashovací funkce je založena na diferenciální kryptoanalýze . Fugue byla navržena tak, aby snížila zranitelnost vůči těmto typům útoků. Podle jejich ujištění je algoritmus konkurenceschopný v efektivitě s hašovacími funkcemi SHA z hlediska softwaru a aplikací a dosahuje výkonu až 36,2 cyklů na bajt ( CPB ) u šesté rodiny procesorů Intel Xeon 5150 a až 25 cyklů na bajt. byte ( CPB ) na procesoru Intel Core 2 T7700. Na 45nm čipu Intel Core 2 T9400 Fugue-256 dosahuje pouze 16 cyklů na bajt ( CPB ) pomocí instrukcí SSE 4.1 . Na procesorech Westmere (32nm), jako je Intel Core i5, se Fugue-256 počítá se 14 cykly na bajt ( CPB ).
Fugue je založena na Grindahlově hash algoritmu, a proto používá S-boxy od AES , ale permutační matice 4x4 je nahrazena operací 16x16 "Super-Mix", což výrazně zlepšuje lavinový efekt . Zároveň je „super-permutace“ („Super-Mix“) operace jen o něco málo náročnější na práci než strategie permutace AES .
Fugue-224, Fugue-256 pracují na stavu, který může být reprezentován maticí 4x30 bajtů bez znaménka, zatímco Fugue-384 a Fugue-512 pracují na matici 4x36 bajtů. Z tohoto stavu lze provádět operace bez další přípravy dat.
Algoritmus, známý jako "Super-Mix transformace", je založen na převzetí matice 4x4 jako vstupu a vrácení nové matice 4x4. Vstupem funkce jsou jednoduše první čtyři sloupce z aktuální matice (4x30 nebo 4x36) a výsledná nová matice je nahrazena použitými vstupními daty. Super permutace tedy ovlivňuje pouze první 4 sloupce matice stavu.
Funkce "Super-Mix" je definována takto:
kde:
; je matice 4x4 bytů (tj. matice po substituci S-bloku ); je transponovaná matice M.Transformace vezme matici 4x4 a posune -tý řádek doleva o bajt, tzn.
Super-permutace je reverzibilní funkce.
Funkce F-256 je srdcem Fugue-256. F-256 přijímá 4bajtový řetězec a 32bajtový inicializační vektor (IV256) jako vstup a vydává 32 bajtů hašované hodnoty.
Hashovací funkce F-256 ukládá stav třiceti 4bajtových sloupců, počínaje inicializačním stavem získaným z inicializačního vektoru (IV256). Vstupní tok o velikosti 4 m bajtů ( m ≥ 0) je rozdělen na m čtyřbajtových slov a předává se po jednom slově do kruhové transformační funkce R , která mění vnitřní stav. Po všech kruhových transformacích je vnitřní stav odeslán do závěrečného kola transformace G . Celkem je vráceno 8 stavových sloupců jako výsledek funkce F-256.
Inicializační vektor pro F-256:
Kulatá transformace R
Kruhová transformace R přijímá 30 sloupců stavu S a jedno 4bajtové slovo I jako vstup a vrací nový stav 30 sloupců. Transformace R se skládá z následujících kroků:
TIX ( I ); ROR3 ; CMIX ; SuperMix ; ROR3 ; CMIX ; SuperMix ;
kde:
TIX ( I ) je „snížit pro XOR“, „vymazat“ (zkrátit), „vložit“ (vložit), „exkluzivně nebo“ ( XOR ), skládá se z následujících kroků:
S10 + = SO; SO = I; S8 + = SO; S1 + = S24.ROR3 je jen posun stavu o 3 sloupce doprava,
CMIX je kolonové míchání (Column MIX), sestává z následujících kroků:
SO+= S4; SI + = S5; S2+= S6; S15+= S4; S16+= S5; S17+= S6;SuperMix (nebo SMIX ) je "super-permutace" ("Super-Mix")
Závěrečné kolo transformace GPoslední kolo transformace G vezme 30 sloupců stavu S jako vstup a vrátí konečný stav 30 sloupců. Vypadá to takto:
Opakujte 5x { ROR3;CMIX; SMIX ROR3;CMIX; SMIX } Opakuje se 13krát { S4+= SO; S15+= SO;ROR15; SMIX; S4+= SO; S16+= SO;ROR14; SMIX; } S4+= SO; S15 + = SO; Implementace hashovacího algoritmu F-256 v pseudokóduNíže je implementace hashovacího algoritmu F-256 v pseudokódu, všechny zápisy jsou jako výše:
pro j = 0..21 nastavte Sj = 0; pro j = 0..7 nastavte S(22+j) = IVj. pro i = 1..m { TIX(Pi); Opakuje se 2x { ROR3;CMIX; SMIX; } } Opakuje se 10krát { ROR3;CMIX; SMIX; } Opakuje se 13krát { S4+= SO; S15+= SO;ROR15; SMIX; S4+= SO; S16+= SO;ROR14; SMIX; } S4+= SO; S15 + = SO; Vrací: S1 S2 S3 S4 S15 S16 S17 S18.Po závěrečném kole G jsou vráceny tyto sloupce: S 1 S 2 S 3 S 4 S 15 S 16 S 17 S 18 , tedy pokud výsledný stav vypadá takto:
,
pak prvních 16 bajtů výstupu bude: 04 05 06 07 08 09 ... 12 13
Algoritmus Fugue-224 se prakticky neliší od Fugue-256. Výsledkem funkce F-224 jsou bajty S 1…4 S 15…17 místo S 1…4 S 15…18 ve Fugue-256 a inicializační vektor (IV224) je také odlišný:
Algoritmus Fugue-384 se prakticky neliší od Fugue-256. Tento algoritmus potlačuje funkce TIX ( I ) a CMIX , používá jiný inicializační vektor (IV384) a mírně odlišné pořadí operací v F-384 a vrací 48bajtovou hodnotu hash.
Implementace hashovacího algoritmu F-384 v pseudokóduNásleduje implementace hashovacího algoritmu F-384 v pseudokódu:
Pro j = 0..23 nastavte Sj = 0; Pro j = 0..11 nastavte S(24+j) = IVj. Pro i = 1..m { TIX(Pi); Opakováno 3x: { ROR3;CMIX; SMIX; } } Opakováno 18krát: { ROR3;CMIX; SMIX; } Opakováno 13krát: { S4+ = SO; S12+ = SO; S24+ = SO; ROR12; SMIX; S4+ = SO; S13+ = SO; S24+ = SO; ROR12; SMIX; S4+ = SO; S13+ = SO; S25+ = SO; ROR11; SMIX; } S4+ = SO; S12+ = SO; S24+ = SO; Vrátí: S1..4 S12..15 S24..27.kde:
TIX ( I ) je „snížit pro XOR“, „vymazat“ (zkrátit), „vložit“ (vložit), „exkluzivně nebo“ ( XOR ), skládá se z následujících kroků:
S16+= SO; SO = I; S8 + = SO; SI+= S27; S4+= S30;CMIX je kolonové míchání (Column MIX), sestává z následujících kroků:
SO+= S4; SI + = S5; S2+= S6; S18+= S4; S19+= S5; S20+= S6;Algoritmus Fugue-512, stejně jako Fugue-384, se prakticky neliší od Fugue-256. Tento algoritmus také nově definuje funkce TIX ( I ) a CMIX a používá jiný inicializační vektor (IV512) a mírně odlišné pořadí operací v F-512. Fugue-512 vrací hash hodnotu 64 bajtů.
Implementace hashovacího algoritmu F-512 v pseudokóduNásleduje implementace hashovacího algoritmu F-512 v pseudokódu:
Pro j = 0..19 nastavte Sj = 0; Pro j = 0..15 nastavte S(20+j) = IVj. Pro i = 1..m { TIX(Pi); Opakováno 4x: { ROR3;CMIX; SMIX; } } Opakuje se 32krát: { ROR3;CMIX; SMIX; } Opakováno 13krát: { S4+ = SO; S9+ = SO; S18+ = SO; S27+ = SO; ROR9; SMIX; S4+ = SO; S10+ = SO; S18+ = SO; S27+ = SO; ROR9; SMIX; S4+ = SO; S10+ = SO; S19+ = SO; S27+ = SO; ROR9; SMIX; S4+ = SO; S10+ = SO; S19+ = SO; S28+ = SO; ROR8; SMIX; } S4+ = SO; S9+ = SO; S18+ = SO; S27+ = SO; Vrácení: S1..4 S9..12 S18..21 S27..30kde:
TIX ( I ) se skládá z následujících kroků:
S22+= SO; SO = I; S8 + = SO; SI+= S24; S4+= S27; S7+=S30;CMIX (Column MIX) se skládá z následujících kroků:
SO+= S4; SI + = S5; S2+= S6; S18+= S4; S19+= S5; S20+= S6;PR-Fugue-256 přijímá binární data od 0 do 2 64 −1 bitů jako vstup, stejně jako 32bajtový klíč. Tento klíč se v podstatě používá jako inicializační vektor namísto pevného IV256, což je jediný rozdíl od Fugue-256.
C-Fugue-256 je definován pro zpětnou kompatibilitu pro aplikace, které musí používat kompresi Merkle-Damgard . Vývojáři tvrdí, že toto použití Fugue není optimální z hlediska výkonu a bezpečnosti, ale umožňuje Fugue používat v aplikacích, které to potřebují.
Fugue-256 může nahradit SHA-256 v mnoha režimech provozu, včetně HMAC , bez použití zpětně kompatibilní funkce C-Fugue-256.
Například HMAC-Fugue-256 bere data X a klíč K jako vstup a vypočítává:
Nezávislé výkonnostní testy algoritmu Fugue, provedené pomocí benchmarku eBASH , ukázaly následující výsledky (rychlost je uvedena v cyklech na byte ( cpb )) [3] :
procesor | Core i5 | Jádro 2 (45nm) | Core 2 (65nm) |
---|---|---|---|
Fuga 2.0 | 12,81 cbp | 15,31 cbp | 15,35 cbp |
Fuga-256 | 16,75 cbp | 18,42 cbp | 21,41 cbp |
Fuga-512 | 46,20 cbp | 56,91 cbp | 56,82 cbp |
Funkce Fugue má částečně paralelní architekturu, která umožňuje vytvářet efektivní implementace algoritmu. Některé instrukce jsou dostupné na mnoha známých architekturách ( x86 , PowerPC , ARM ).
Pokud jde o požadavky na RAM , hashovací funkce Fugue potřebuje hodně paměti pro uložení vnitřního stavu.
Fugue 2.0 [4] je rozšířením původního hashovacího algoritmu Fugue, který autoři připravili pro druhé kolo soutěže SHA-3 , který je dvakrát rychlejší pro 256bitový hash. Návrháři v nové verzi prokázali zlepšenou ochranu proti útokům diferenciální kryptoanalýzy .
Hashovací funkce | |
---|---|
obecný účel | |
Kryptografický | |
Funkce generování klíčů | |
Kontrolní číslo ( srovnání ) | |
Hashe |
|