SIMD (hashovací funkce)

Aktuální verze stránky ještě nebyla zkontrolována zkušenými přispěvateli a může se výrazně lišit od verze recenzované 27. října 2021; kontroly vyžadují 2 úpravy .
SIMD
Vytvořeno 2008
zveřejněno října 2008
Velikost hash 256 nebo 512 bitů
Počet kol čtyři
Typ hashovací funkce

SIMD  je iterativní kryptografická hašovací funkce vyvinutá Gaëtanem Leurentem, Charlesem Bouillaguetem, Pierre-Alainem Fouquem. Byla nominována jako kandidátka do soutěže standardů SHA-3 pořádané National Institute of Standards and Technology (USA) , kde se probojovala do druhého kola [1] .

Existují dvě verze hašovací funkce, SIMD-256 a SIMD-512, které převádějí zprávu libovolné délky na 256 nebo 512bitovou hodnotu hash, nazývanou také souhrn zpráv . Kromě toho je možné definovat hashovací funkce SIMD-n jako zkrácení funkcí SIMD-256 a SIMD-512 pro n<256 a 256<n<512 [2] .

Hlavním rysem hashovací funkce je podle tvůrců výrazné rozšíření zprávy, což umožňuje chránit se před diferenciální kryptoanalýzou [3] .

Algoritmus

Obecný popis a parametry

Hlavní částí hašovací funkce h je kompresní funkce . Pro výpočet h(M) se zpráva M rozdělí na k částí po m bitech. Kompresní funkce : je pak iterativně aplikována na části zprávy . Počáteční stav nebo inicializační vektor je určen a pevně stanoven pro každou funkci rodiny SIMD. Konečný výsledek hashovací funkce se získá aplikací finalizační funkce na .

Funkce komprese C v režimu Davis-Meier je obvykle vytvořena pomocí funkce blokové šifry : , avšak pro hashovací funkci SIMD je použito několik vylepšení.

Rodina hašovacích funkcí SIMD používá následující parametry:

Velikost hash, n Velikost bloku zpráv, m Velikost vnitřního stavu ( ), str
SIMD-256 256 512 512
SIMD-512 512 1024 1024

Vnitřní stav je reprezentován maticí 4x4 32bitových slov pro SIMD-256 a 8x4 pro SIMD-512.


Funkce komprese

Funkce SIMD komprese je založena na Davis-Meyerově návrhu s některými úpravami.

Za prvé, místo kompresní funkce, .

Za druhé, místo operace XOR pro a v SIMD se používá několik dalších Feistelových kol s h jako vstupní klávesou. Tuto akci provádí funkce .

Kompresní funkce je tedy definována jako . Podle autorů hashovací funkce SIMD tyto úpravy poskytují stejnou úroveň zabezpečení jako původní návrh Davis-Meyer, ale zároveň zabraňují některým typům víceblokových útoků [4] .

Rozšíření o zprávu

Rozšíření zprávy hashovací funkce SIMD-256 (resp. SIMD-512) převádí blok zpráv 512 bitů (resp. 1024 bitů) na rozšířenou zprávu 4096 bitů (resp. 8192 bitů) s minimální vzdáleností 520 ( resp. .1032).

Použití sítě Feistel

Použití Feistelovy struktury hashovací funkcí SIMD je konstruováno podobně jako rodina hašovacích funkcí MD/SHA:

nebo v pohodlnějším formátu:

pro SIMD-256

pro SIMD-512

kde je logická funkce, je modulo sčítání a je levý cyklický posun na bit.

Pro SIMD-256 jsou použity 4 paralelní Feistelovy články (resp. 8 pro SIMD-512), které spolu interagují díky permutacím . Permutace jsou voleny tak, aby bylo zajištěno dobré míchání.

Pro SIMD-256 je definováno:

Podobně pro SIMD-512:

Obecně platí, že kompresní funkce funguje ve 4 kolech, z nichž každé se skládá z 8 kroků (kroků) plus jedno další závěrečné kolo.

Funkce konečné komprese

Po zkomprimování všech bloků zprávy se provede další dodatečné volání funkce komprese s velikostí zprávy jako vstupem. V tomto případě se délka zprávy v případě potřeby vypočítá v bitech modulo.

Pro konečnou kompresní funkci se používá mírně upravená metoda rozšíření zprávy:

pro SIMD-256 se používá místo .

V souladu s tím pro SIMD-512 místo použití

Rozšířený rozsah zpráv pro konečnou fázi se tedy liší od rozšířeného rozsahu zpráv bloků těla zprávy.

Po použití konečné kompresní funkce je výstupem následující řetězcová reprezentace:

pro SIMD-256

pro SIMD-512

V případě SIMD-n je na výstupu prvních n bitů SIMD-256 (n < 256) nebo SIMD 512 (256 < n < 512). Například pro SIMD-384 bude výstup

Inicializační vektor

Každá hashovací funkce rodiny SIMD používá vlastní IV, aby se zabránilo propojení mezi výstupy různých funkcí SIMD-n. IV pro funkci SIMD-n je definován takto:

IV = SIMD-Compress(0, "SIMD-(i)" v1.0, 0), kde řetězec je v ASCII doplněn nulami a (i) je dekadická reprezentace n.

Hodnoty IV pro různé hashovací funkce rodiny SIMD:

Vylepšení pro druhé kolo soutěže SHA-3

Změny doznaly 2 části algoritmu: permutace a cyklické posuny (rotace) [5] .

Při výběru nových permutací se autoři hashovací funkce řídili následujícími kritérii:


SIMD-256. Počáteční permutace:

Nové permutace:

kde . Počet permutací se tak zvýšil ze 2 na 3.


SIMD-512. Počáteční permutace:

Nové permutace:

kde . Počet permutací se tak zvýšil ze 4 na 7.

Pseudokód SIMD [6]

1: funkce MessageExpansion(M, f) //f označuje konečnou kompresní funkci 2: pokud f = 0, pak 3: y(i) = NTT(M + X127) //respektive X255 pro SIMD-512 4: jinak 5: y(i) = NTT(M + X127 + X125) //respektive X255 + X253 pro SIMD-512 6: konec pokud 7: Vypočítejte Z(i,j) aplikací vnitřních kódů I(185) a I(233) na y(i). 8: Vypočítejte W(i,j) použitím permutací pro Z(i,j) 9: Návrat W(i,j) 10: funkce ukončení jedenáct: 12: funkce Round(S, i, r) 13: S = krok(S; W(8i+0); IF; r0; r1) 14: S = krok(S; (W8i+1); IF; r1; r2) 15: S = krok(S; W(8i+2); IF; r2; r3) 16: S = krok(S; W(8i+3); IF; r3; r0) 17: S = Krok(S; W(8i+4);MAJ; r0; r1) 18: S = Krok(S; W(8i+5);MAJ; r1; r2) 19: S = Krok(S; W(8i+6);MAJ; r2; r3) 20: S = krok(S; W(8i+7); MAJ; r3; r0) 21: návrat S 22: funkce ukončení 23: 24: funkce SIMD-Compress(IV, M, f) 25: W = MessageExpansion(M; f) 26: S = IV x nebo M 27: S = kolo(S; 0; [3; 20; 14; 27]) 28: S = kolo(S; 1; [26; 4; 23; 11]) 29: S = kolo(S; 2; [19; 28; 7; 22]) 30: S = kolo(S; 3; [15; 5; 29; 9]) 31: S = krok(S; IV(0); IF; 15; 5) 32: S = krok(S; IV(1); IF; 5; 29) 33: S = krok(S; IV(2); IF; 29; 9) 34: S = krok(S; IV(3); IF; 9; 15) 35: návrat S 36: funkce ukončení 37: 38: funkce SIMD(M) 39: Rozdělte zprávu M na části M(i); 0 =<i<k. 40: M(k-1) doplněné nulami. 41:S=IV 42: pro 0 =< i < k do 43: S = SIMD-komprese (S; M(i); 0) 44: konec pro 45: S = SIMD-Compress(S; ||M||; 1) 46: return Truncate(S) 47: funkce ukončení

Ukázkové výsledky [7]

Zpráva M SIMD-256(M)
Prázdná zpráva 8029e81e7320e13ed9001dc3d8021fec695b7a25cd43ad805260181c35fcaea8
0x00; 0x01; 0x02; …0x3f 5bebdb816cd3e6c8c2b5a42867a6f41570c4b917f1d3b15aabc17f24679e6acd
Zpráva M SIMD-512(M)
Prázdná zpráva 51a5af7e243cd9a5989f7792c880c4c3168c3d60c4518725fe5757d1f7a69c63

66977eaba7905ce2da5d7cfd07773725f0935b55f3efb954996689a49b6d29e0

0x00; 0x01; 0x02; …0x3f 8851ad0a57426b4af57af3294706c0448fa6accf24683fc239871be58ca913fb

ee53e35c1dedd88016ebd131f2eb0761e97a3048de6e696787fd5f54981d6f2c

Výkon

Nezávislé výkonnostní testy algoritmu SIMD provedené pomocí benchmarku eBASH ukázaly následující výsledky (rychlost je udávána v cyklech na bajt ( cpb )) [8] [3] :

procesor Core i5 Jádro 2 (45nm) Core 2 (65nm)
SIMD-256 7,51 cbp 9,18 cbp 11,34 cbp
SIMD-512 8,63 cbp 10,02 cpb 12,05 cpb

Přibližně polovinu času hashovací funkce přitom stráví operace rozšiřování zpráv: Číselná teoretická transformace (NTT) je z hlediska výkonu nejdražší částí algoritmu.

Kompresní funkce SIMD má částečně paralelní architekturu, která umožňuje vytvářet efektivní implementace algoritmu pomocí vektorových instrukcí ( SIMD ). Tyto instrukce jsou dostupné na mnoha známých architekturách: SSE na x86 , AltiVec na PowerPC , IwMMXt na ARM .

Pokud jde o požadavky RAM, hashovací funkce SIMD potřebuje paměť pro uložení vnitřního stavu (64 bajtů pro SIMD-256 a 128 bajtů pro SIMD-512) a paměť pro výstupní hodnoty NTT (4*64 = 256 bajtů pro SIMD-256 a 4*128 = 512 bajtů pro SIMD-512).

Výsledky soutěže SHA-3 pro SIMD

Funkce SIMD hash nebyla vybrána jako finalista v soutěži SHA-3.

Experti soutěže poznamenali, že ačkoli funkce SIMD hash do značné míry opakuje algoritmy rodin MD / SHA, vylepšení provedená autory skutečně umožnila chránit SIMD před mnoha typy útoků (například kolizní útok ). Kromě toho změny provedené pro druhé kolo dokázaly ochránit hashovací funkci SIMD před útokem diferenciální kryptoanalýzy provedeným Mendelem a Nadem, kterému byl SIMD vystaven ve své původní implementaci [9] .

Vysoké požadavky na RAM a dostupnost instrukcí SIMD pro dobrý výkon však dělají z hašovací funkce špatného kandidáta na implementaci FPGA [10] . Především z tohoto důvodu se hašovací funkce SIMD nedostala do závěrečné fáze soutěže.

Poznámky

  1. Kandidáti 2. kola SHA-3 .
  2. Oficiální popis hashovací funkce SIMD , str. 9.
  3. 1 2 Oficiální stránky hashovací funkce SIMD .
  4. Oficiální popis hashovací funkce SIMD , str. 7-8.
  5. Vylepšení hashovací funkce SIMD pro druhé kolo soutěže SHA-3 , str. 1-2.
  6. Oficiální popis hashovací funkce SIMD , str. 22.
  7. Oficiální popis hashovací funkce SIMD , str. 43-270.
  8. Oficiální stránky benchmarku eBASH .
  9. Zpráva s výsledky druhého kola soutěže SHA-3 .
  10. Implementace kandidátů soutěže SHA-3 na FPGA.

Literatura