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] .
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 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í 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í 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.
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
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:
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.
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 |
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).
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.
Hashovací funkce | |
---|---|
obecný účel | |
Kryptografický | |
Funkce generování klíčů | |
Kontrolní číslo ( srovnání ) | |
Hashe |
|