Fugă | |
---|---|
Dezvoltatori | Shai Halevi , William E. Hall , Charanjit S. Jutla |
Creată | 2009 |
publicat | octombrie 2009 |
Dimensiunea hash | 224, 256, 384 sau 512 biți |
Numărul de runde | patru |
Tip de | funcția hash |
Fugue este un algoritm de hashing dezvoltat de Shai Halevi , William E. Hall și Charanjit S. Jutla de la IBM pentru competiția de hash a Institutului Național de Standarde și Tehnologie din 2009 , unde a ajuns în runda a doua [1] . Cu toate acestea, algoritmul nu a ajuns în a treia rundă a competiției din cauza analizei criptografice insuficiente și a incertitudinii cu privire la puterea criptografică. [2]
Pentru un mesaj de intrare cu lungimea de la 1 la 264 −1 biți, algoritmul generează o valoare hash de 224, 256, 384 sau 512 biți, numită și rezumat de mesaje . Funcțiile pentru lungimile de ieșire respective sunt denumite Fugue-224, Fugue-256, Fugue-384 și, respectiv, Fugue-512. Autorii au descris, de asemenea, o versiune parametrizată a algoritmului Fugue. O versiune slab protejată a lui Fugue-256, care rulează de două ori mai repede decât versiunea standard, este, de asemenea, descrisă în termeni de versiune parametrizată.
Autorii afirmă că majoritatea strategiilor de atac existente pentru funcțiile hash se bazează pe criptoanaliza diferențială . Fugue a fost concepută astfel încât să reducă vulnerabilitatea la aceste tipuri de atacuri. De asemenea, conform asigurărilor acestora, algoritmul este competitiv în eficiență cu funcțiile hash SHA în termeni de software și aplicație, atingând performanțe de până la 36,2 cicluri pe octet ( CPB ) pe cea de-a șasea familie de procesoare Intel Xeon 5150 și până la 25 de cicluri pe octet. octet ( CPB ) pe procesorul Intel Core 2 T7700. Pe cipul Intel Core 2 T9400 Fugue-256 de 45 nm, acesta realizează doar 16 cicluri pe octet ( CPB ) folosind instrucțiuni SSE 4.1 . Pe procesoarele Westmere (32nm), cum ar fi Intel Core i5, Fugue-256 este calculat la 14 cicluri pe octet ( CPB ).
Fugue se bazează pe algoritmul hash Grindahl și, prin urmare, utilizează S-box-uri din AES , dar matricea de permutare 4x4 este înlocuită cu o operațiune „Super-Mix” de 16x16, îmbunătățind foarte mult efectul de avalanșă . În același timp, „super-permutarea” („Super-Mix”) este doar o operație puțin mai intensă de muncă decât strategia de permutare AES .
Fugue-224, Fugue-256 operează pe stare, care poate fi reprezentată printr-o matrice 4x30 de octeți nesemnați, în timp ce Fugue-384 și Fugue-512 operează pe o matrice de 4x36 octeți. Din această stare, operațiunile pot fi efectuate fără pregătirea suplimentară a datelor.
Cunoscută sub numele de „Transformarea Super-Mix”, algoritmul se bazează pe luarea unei matrice 4x4 ca intrare și returnarea unei noi matrice 4x4. Intrarea funcției este pur și simplu primele patru coloane din matricea curentă (4x30 sau 4x36), iar noua matrice rezultată este înlocuită cu datele de intrare utilizate. Deci super-permutarea afectează doar primele 4 coloane ale matricei de stare.
Funcția „Super-Mix” este definită după cum urmează:
Unde:
; este o matrice 4x4 de octeți (adică o matrice după înlocuirea blocului S ); este matricea transpusă M.Transformarea ia o matrice 4x4 și deplasează rândul --lea rămas cu un octet, adică.
Super-permutarea este o funcție reversibilă.
Caracteristica F-256 se află în centrul Fugue-256. F-256 preia un șir de 4 octeți și un vector de inițializare de 32 de octeți (IV256) ca intrare și scoate 32 de octeți de valoare hashed.
Funcția hash F-256 stochează starea a treizeci de coloane de 4 octeți, pornind de la starea de inițializare obținută din vectorul de inițializare (IV256). Fluxul de intrare de 4 m octeți ( m ≥ 0) este împărțit în m cuvinte de patru octeți și este transmis câte un cuvânt la funcția de transformare rotundă R , care schimbă starea internă. După toate transformările circulare, starea internă este trimisă în runda finală a transformării G . În total, 8 coloane de stare sunt returnate ca rezultat al funcției F-256.
Vector de inițializare pentru F-256:
Transformare rotundă R
Transformarea circulară R ia 30 de coloane de stare S și un cuvânt de 4 octeți I ca intrare și returnează o nouă stare de 30 de coloane. Transformarea R constă din următorii pași:
TIX ( I ); ROR3 ; CMIX ; SuperMix ; ROR3 ; CMIX ; SuperMix ;
Unde:
TIX ( I ) este „reduce pentru XOR”, „clear” (Truncate), „insert” (Insert), „exclusive sau” ( XOR ), constă din următorii pași:
S10 += SO; S0 = I; S8 += SO; S1 += S24.ROR3 este doar o schimbare de stare cu 3 coloane la dreapta,
CMIX este amestecarea coloanelor (Column MIX), constă din următorii pași:
SO += S4; S1 += S5; S2 += S6; S15 += S4; S16 += S5; S17 += S6;SuperMix (sau SMIX ) este o „super-permutare” („Super-Mix”)
Runda finală a transformării lui GRunda finală a transformării G ia 30 de coloane de stare S ca intrare și returnează o stare finală de 30 de coloane. Iată cum arată:
Repetați de 5 ori { ROR3;CMIX; SMIX ROR3;CMIX; SMIX } Se repetă de 13 ori { S4 += SO; S15 += SO;ROR15; SMIX; S4 += SO; S16 += SO;ROR14; SMIX; } S4 += SO; S15 += SO; Implementarea algoritmului hash F-256 în pseudocodMai jos este o implementare a algoritmului hash F-256 în pseudocod, toate notațiile sunt ca mai sus:
pentru j = 0..21, se stabilește Sj = 0; pentru j = 0..7, se stabilește S(22+j) = IVj . pentru i = 1..m { TIX(Pi); Se repetă de 2 ori { ROR3;CMIX; SMIX; } } Se repetă de 10 ori { ROR3;CMIX; SMIX; } Se repetă de 13 ori { S4 += SO; S15 += SO;ROR15; SMIX; S4 += SO; S16 += SO;ROR14; SMIX; } S4 += SO; S15 += SO; Retur: S1 S2 S3 S4 S15 S16 S17 S18.După runda finală G , se returnează următoarele coloane: S 1 S 2 S 3 S 4 S 15 S 16 S 17 S 18 , adică dacă starea finală arată astfel:
,
atunci primii 16 octeți ai ieșirii vor fi: 04 05 06 07 08 09 ... 12 13
Algoritmul Fugue-224 nu este practic diferit de Fugue-256. Rezultatul funcției F-224 este octeții S 1…4 S 15…17 în loc de S 1…4 S 15…18 în Fugue-256, iar vectorul de inițializare (IV224) este, de asemenea, diferit:
Algoritmul Fugue-384 nu este practic diferit de Fugue-256. Acest algoritm suprascrie funcțiile TIX ( I ) și CMIX , folosește un vector de inițializare diferit (IV384) și o ordine ușor diferită a operațiilor în F-384 și returnează o valoare hash de 48 de octeți.
Implementarea algoritmului hash F-384 în pseudocodUrmătoarea este o implementare a algoritmului hash F-384 în pseudocod:
Pentru j = 0..23, se stabilește Sj = 0; Pentru j = 0..11, se stabilește S(24+j) = IVj . Pentru i = 1..m { TIX(Pi); Se repeta de 3 ori: { ROR3;CMIX; SMIX; } } Se repetă de 18 ori: { ROR3;CMIX; SMIX; } Se repetă de 13 ori: { S4+ = S0; S12+ = S0; S24+ = S0; ROR12; SMIX; S4+ = S0; S13+ = S0; S24+ = S0; ROR12; SMIX; S4+ = S0; S13+ = S0; S25+ = S0; ROR11; SMIX; } S4+ = S0; S12+ = S0; S24+ = S0; Returnări: S1..4 S12..15 S24..27.Unde:
TIX ( I ) este „reduce pentru XOR”, „clear” (Truncate), „insert” (Insert), „exclusive sau” ( XOR ), constă din următorii pași:
S16 += SO; S0 = I; S8 += SO; S1 += S27; S4 += S30;CMIX este amestecarea coloanelor (Column MIX), constă din următorii pași:
SO += S4; S1 += S5; S2 += S6; S18 += S4; S19 += S5; S20 += S6;Algoritmul Fugue-512, ca și Fugue-384, nu este practic diferit de Fugue-256. Acest algoritm redefinește și funcțiile TIX ( I ) și CMIX și utilizează un vector de inițializare diferit (IV512) și o ordine ușor diferită a operațiilor în F-512. Fugue-512 returnează o valoare hash de 64 de octeți.
Implementarea algoritmului hash F-512 în pseudocodUrmătoarea este o implementare a algoritmului hash F-512 în pseudocod:
Pentru j = 0..19, se stabilește Sj = 0; Pentru j = 0..15, se stabilește S(20+j) = IVj . Pentru i = 1..m { TIX(Pi); Se repetă de 4 ori: { ROR3;CMIX; SMIX; } } Se repetă de 32 de ori: { ROR3;CMIX; SMIX; } Se repetă de 13 ori: { S4+ = S0; S9 + = SO; S18+ = S0; S27+ = S0; ROR9; SMIX; S4+ = S0; S10+ = S0; S18+ = S0; S27+ = S0; ROR9; SMIX; S4+ = S0; S10+ = S0; S19+ = S0; S27+ = S0; ROR9; SMIX; S4+ = S0; S10+ = S0; S19+ = S0; S28+ = S0; ROR8; SMIX; } S4+ = S0; S9+ = S0; S18+ = S0; S27+ = S0; Returnări: S1..4 S9..12 S18..21 S27..30Unde:
TIX ( I ) constă din următorii pași:
S22 += SO; S0 = I; S8 += SO; S1 += S24; S4 += S27; S7+=S30;CMIX (Column MIX) constă din următorii pași:
SO += S4; S1 += S5; S2 += S6; S18 += S4; S19 += S5; S20 += S6;PR-Fugue-256 acceptă date binare de la 0 la 2 64 −1 biți ca intrare, precum și o cheie de 32 de octeți. Această cheie este folosită în esență ca un vector de inițializare în loc de un IV256 fix, care este singura diferență față de Fugue-256.
C-Fugue-256 este definit pentru compatibilitatea anterioară pentru aplicațiile care trebuie să utilizeze compresia Merkle-Damgard . Dezvoltatorii susțin că această utilizare a Fugue nu este optimă în ceea ce privește performanța și securitatea, dar permite ca Fugue să fie folosit în aplicațiile care au nevoie de el.
Fugue-256 poate înlocui SHA-256 în multe moduri de operare, inclusiv HMAC , fără a utiliza funcția C-Fugue-256 compatibilă cu versiunea inversă.
De exemplu, HMAC-Fugue-256 ia datele X și tasta K ca intrare și calculează:
Testele independente de performanță ale algoritmului Fugue, efectuate folosind benchmark -ul eBASH , au arătat următoarele rezultate (viteza este indicată în cicluri pe octet ( cpb )) [3] :
CPU | Core i5 | Core 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 |
Funcția Fugue are o arhitectură parțial paralelă, care vă permite să creați implementări eficiente ale algoritmului. Unele instrucțiuni sunt disponibile pe multe arhitecturi binecunoscute ( x86 , PowerPC , ARM ).
În ceea ce privește cerințele RAM , funcția de hash Fugue are nevoie de multă memorie pentru a stoca starea internă.
Fugue 2.0 [4] este o extensie a algoritmului de hash Fugue original, pregătit de autori pentru a doua rundă a concursului SHA-3 , care este de două ori mai rapid pentru un hash de 256 de biți. Designerii au dovedit o protecție îmbunătățită împotriva atacurilor de criptoanaliza diferențială în noua versiune.
Funcții hash | |
---|---|
scop general | |
Criptografic | |
Funcții de generare a cheilor | |
Numărul de verificare ( comparație ) | |
Hashes |
|