SIMD | |
---|---|
Skapad | 2008 |
publiceras | oktober 2008 |
Hash storlek | 256 eller 512 bitar |
Antal omgångar | fyra |
Sorts | hash-funktion |
SIMD är en iterativ kryptografisk hashfunktion utvecklad av Gaëtan Leurent, Charles Bouillaguet, Pierre-Alain Fouque. Hon nominerades som en kandidat till standardtävlingen SHA-3 som hölls av National Institute of Standards and Technology (USA) , där hon tog sig till den andra omgången [1] .
Det finns två versioner av hashfunktionen, SIMD-256 och SIMD-512, som omvandlar ett meddelande av godtycklig längd till ett 256 eller 512-bitars hashvärde, även kallat meddelandesammandrag . Dessutom är det möjligt att definiera SIMD-n hashfunktioner som trunkering av SIMD-256 och SIMD-512 funktioner för n<256 respektive 256<n<512 [2] .
Enligt skaparna är hashfunktionens huvudfunktion en betydande expansion av meddelandet, vilket gör att du kan skydda dig mot differentiell kryptoanalys [3] .
Huvuddelen av hashfunktionen h är komprimeringsfunktionen . För att beräkna h(M) delas meddelandet M i k delar om m bitar vardera. Komprimeringsfunktionen : appliceras sedan iterativt på meddelandedelarna . Initialtillståndet eller initialiseringsvektorn är designad och fixerad för varje SIMD-familjefunktion. Det slutliga resultatet av hashfunktionen erhålls genom att applicera avslutningsfunktionen på .
C-komprimeringsfunktionen i Davis-Meier- läge byggs vanligtvis med blockchifferfunktionen : , men flera förbättringar används för SIMD-hashfunktionen.
SIMD-familjen av hashfunktioner använder följande parametrar:
Hashstorlek, n | Meddelandeblockstorlek, m | Intern tillståndsstorlek( ), sid | |
---|---|---|---|
SIMD-256 | 256 | 512 | 512 |
SIMD-512 | 512 | 1024 | 1024 |
Det interna tillståndet representeras av en 4x4-matris med 32-bitars ord för SIMD-256 och 8x4 för SIMD-512.
SIMD-kompressionsfunktionen är baserad på Davis-Meyer-designen med vissa modifieringar.
Först, istället för komprimeringsfunktionen , .
För det andra, istället för XOR-operationen för och i SIMD, används flera ytterligare Feistel-rundor med h som inmatningsnyckel. Denna åtgärd utförs av funktionen .
Således definieras komprimeringsfunktionen som . Enligt författarna till SIMD-hashfunktionen ger dessa modifieringar samma säkerhetsnivå som den ursprungliga Davis-Meyer-designen, men förhindrar samtidigt vissa typer av multi-block attacker [4] .
Meddelandeexpansionen av hashfunktionen SIMD-256 (resp. SIMD-512) omvandlar ett meddelandeblock på 512 bitar (resp. 1024 bitar) till ett utökat meddelande på 4096 bitar (resp. 8192 bitar) med ett minsta avstånd på 520 ( resp. .1032).
Användningen av Feistel-strukturen av SIMD-hashfunktionen är konstruerad på samma sätt som MD/SHA-familjen av hashfunktioner:
eller i ett mer bekvämt format:
för SIMD-256
för SIMD-512
där är en logisk funktion, är modulo-addition och är ett vänstercykliskt skift per bit.
4 parallella Feistel-celler används för SIMD-256 (resp. 8 för SIMD-512), som interagerar med varandra på grund av permutationer . Permutationerna är valda för att säkerställa god blandning.
För SIMD-256 är det definierat:
Följaktligen för SIMD-512:
I allmänhet fungerar komprimeringsfunktionen i 4 omgångar, som var och en består av 8 steg (steg), plus ytterligare en sista omgång.
Efter att alla block i meddelandet har komprimerats, görs ytterligare ett ytterligare anrop till komprimeringsfunktionen med storleken på meddelandet som indata. I detta fall beräknas meddelandets längd i bitar modulo om det behövs.
För den slutliga komprimeringsfunktionen används en något modifierad meddelandeexpansionsmetod:
för SIMD-256 används istället för .
Följaktligen, för SIMD-512, istället för att använda
Således skiljer sig det utökade meddelandeintervallet för det sista steget från det utökade meddelandeintervallet av meddelandekroppsblock.
Efter att ha tillämpat den slutliga komprimeringsfunktionen är utdata följande strängrepresentation:
för SIMD-256
för SIMD-512
I fallet med SIMD-n matas de första n bitarna av SIMD-256 (n < 256) eller SIMD 512 (256 < n < 512). Till exempel, för SIMD-384 blir utgången
Varje SIMD-familjs hashfunktion använder sin egen IV för att undvika länkar mellan utgångarna från olika SIMD-n-funktioner. IV för SIMD-n-funktionen definieras enligt följande:
IV = SIMD-Compress(0, "SIMD-(i)" v1.0, 0) där strängen är i ASCII utfylld med nollor och (i) är decimalrepresentationen av n.
IV-värden för olika hashfunktioner i SIMD-familjen:
2 delar av algoritmen har genomgått förändringar: permutationer och cykliska skift (rotationer) [5] .
När de valde nya permutationer vägleddes författarna till hashfunktionen av följande kriterier:
SIMD-256. Inledande permutationer:
Nya permutationer:
var . Således ökade antalet permutationer från 2 till 3.
SIMD-512. Inledande permutationer:
Nya permutationer:
var . Således ökade antalet permutationer från 4 till 7.
Meddelande M | SIMD-256(M) |
---|---|
Tomt meddelande | 8029e81e7320e13ed9001dc3d8021fec695b7a25cd43ad805260181c35fcaea8 |
0x00; 0x01; 0x02; … 0x3f | 5bebdb816cd3e6c8c2b5a42867a6f41570c4b917f1d3b15aabc17f24679e6acd |
Meddelande M | SIMD-512(M) |
---|---|
Tomt meddelande | 51a5af7e243cd9a5989f7792c880c4c3168c3d60c4518725fe5757d1f7a69c63 66977eaba7905ce2da5d7cfd07773725f0935b55f3efb954996689a49b6d29e0 |
0x00; 0x01; 0x02; … 0x3f | 8851ad0a57426b4af57af3294706c0448fa6accf24683fc239871be58ca913fb ee53e35c1dedd88016ebd131f2eb0761e97a3048de6e696787fd5f54981d6f2c |
Oberoende prestandatester av SIMD-algoritmen, utförda med eBASH benchmark , visade följande resultat (hastigheten anges i cykler per byte ( cpb )) [8] [3] :
CPU | Core i5 | Core 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 |
Samtidigt läggs ungefär hälften av hashfunktionens tid på meddelandeexpansionsoperationen: Number-Theoretic Transform (NTT) är den dyraste delen av algoritmen sett till prestanda.
SIMD-komprimeringsfunktionen har en delvis parallell arkitektur, vilket gör att du kan skapa effektiva implementeringar av algoritmen med hjälp av vektorinstruktioner ( SIMD ). Dessa instruktioner finns tillgängliga på många välkända arkitekturer: SSE på x86 , AltiVec på PowerPC , IwMMXt på ARM .
När det gäller RAM-krav behöver SIMD-hash-funktionen minne för att lagra internt tillstånd (64 byte för SIMD-256 och 128 byte för SIMD-512) och minne för NTT-utgångsvärden (4*64 = 256 byte för SIMD-256) och 4*128 = 512 byte för SIMD-512).
SIMD-hashfunktionen valdes inte ut som finalist i SHA-3-tävlingen.
Tävlingsexperterna noterade att även om SIMD-hashfunktionen till stor del upprepar algoritmerna för MD/SHA-familjerna, gjorde de förbättringar som gjorts av författarna det verkligen möjligt att skydda SIMD från många typer av attacker (till exempel en kollisionsattack ). Dessutom kunde ändringarna som gjordes för den andra omgången skydda SIMD-hashfunktionen från den differentiella kryptoanalysattacken utförd av Mendel och Nad, som SIMD utsattes för i sin ursprungliga implementering [9] .
De höga RAM- kraven och tillgängligheten av SIMD-instruktioner för bra prestanda gör dock hashfunktionen till en dålig kandidat för FPGA- implementering [10] . Främst av denna anledning kom SIMD-hashfunktionen inte till slutskedet av tävlingen.
Hash-funktioner | |
---|---|
generell mening | |
Kryptografisk | |
Nyckelgenereringsfunktioner | |
Kontrollnummer ( jämförelse ) | |
Hashes |
|