SIMD (hash-toiminto)

Kokeneet kirjoittajat eivät ole vielä tarkistaneet sivun nykyistä versiota, ja se voi poiketa merkittävästi 27. lokakuuta 2021 tarkistetusta versiosta . tarkastukset vaativat 2 muokkausta .
SIMD
Luotu 2008
julkaistu lokakuuta 2008
Hash-koko 256 tai 512 bittiä
Kierrosten lukumäärä neljä
Tyyppi hash-toiminto

SIMD  on iteratiivinen kryptografinen hash-funktio , jonka ovat kehittäneet Gaëtan Leurent, Charles Bouillaguet ja Pierre-Alain Fouque. Hänet asetettiin ehdokkaaksi National Institute of Standards and Technologyn (USA) järjestämään SHA-3- standardikilpailuun , jossa hän pääsi toiselle kierrokselle [1] .

Hajautusfunktiosta on kaksi versiota, SIMD-256 ja SIMD-512, jotka muuntavat mielivaltaisen pituisen viestin 256- tai 512-bittiseksi hash-arvoksi, jota kutsutaan myös sanoman tiivisteeksi . Lisäksi on mahdollista määritellä SIMD-n-hajautusfunktiot SIMD-256- ja SIMD-512-funktioiden katkaisuiksi funktioille n<256 ja 256<n<512 [2] .

Tekijöiden mukaan hash-funktion pääominaisuus on viestin merkittävä laajennus, jonka avulla voit suojautua differentiaaliselta kryptausanalyysiltä [3] .

Algoritmi

Yleinen kuvaus ja parametrit

Pääosa hash-funktiosta h on pakkausfunktio . H(M) laskemiseksi sanoma M jaetaan k osaan , joissa kussakin on m bittiä. Pakkaustoimintoa : sovelletaan sitten iteratiivisesti viestin osiin . Alkutila tai alustusvektori on nimetty ja kiinteä jokaiselle SIMD-perhefunktiolle. Hajautusfunktion lopputulos saadaan soveltamalla viimeistelyfunktiota .

C-pakkaustoiminto Davis-Meier- tilassa rakennetaan yleensä käyttämällä lohkosalaustoimintoa : , mutta SIMD-hajautustoimintoon käytetään useita parannuksia.

SIMD-hajautusfunktioperhe käyttää seuraavia parametreja:

Hash-koko, n Viestilohkon koko, m Sisäinen tilakoko( ), s
SIMD-256 256 512 512
SIMD-512 512 1024 1024

Sisäinen tila esitetään 32-bittisten sanojen 4x4 matriisina SIMD-256:lle ja 8x4:lle SIMD-512:lle.


Pakkaustoiminto

SIMD-pakkaustoiminto perustuu Davis-Meyerin malliin, jossa on joitain muutoksia.

Ensinnäkin pakkaustoiminnon sijaan .

Toiseksi XOR-operaation sijasta SIMD:ssä ja SIMD:ssä käytetään useita Feistel-lisäkierroksia h syöttönäppäimenä. Tämän toiminnon suorittaa toiminto .

Näin ollen pakkausfunktio määritellään muodossa . SIMD-hajautusfunktion tekijöiden mukaan nämä muutokset tarjoavat saman turvallisuustason kuin alkuperäinen Davis-Meyer-suunnittelu, mutta samalla estävät tietyntyyppiset usean lohkon hyökkäykset [4] .

Viestilaajennus

SIMD-256-hajautustoiminnon (vastaavasti SIMD-512) viestilaajennus muuntaa 512 bitin (vastaa 1024 bitin) viestilohkon 4096 bitin (vastaa 8192 bitin) laajennetuksi viestiksi, jonka vähimmäisetäisyys on 520 ( vastaavasti .1032).

Feistel-verkon käyttö

Feistel-rakenteen käyttö SIMD-hajautusfunktiolla on rakennettu samalla tavalla kuin MD/SHA-hajautusfunktioiden perhe:

tai kätevämmässä muodossa:

SIMD-256:lle

SIMD-512:lle

jossa on looginen funktio, on modulo-lisäys ja vasen syklinen siirto bittiä kohden.

SIMD-256:ssa käytetään 4 rinnakkaista Feistel-solua (vastaavasti 8 SIMD-512:ssa), jotka ovat vuorovaikutuksessa toistensa kanssa permutaatioiden vuoksi . Permutaatiot valitaan hyvän sekoituksen varmistamiseksi.

SIMD-256:lle se on määritelty:

Vastaavasti SIMD-512:lle:

Yleensä pakkaustoiminto toimii 4 kierroksella, joista jokainen koostuu 8 vaiheesta (vaiheesta) sekä yhdestä ylimääräisestä viimeisestä kierroksesta.

Lopullinen pakkaustoiminto

Kun kaikki viestin lohkot on pakattu, tehdään toinen ylimääräinen pakkaustoimintokutsu syöttämällä viestin koko. Tällöin sanoman pituus lasketaan tarvittaessa bitteinä modulo.

Viimeiseen pakkaustoimintoon käytetään hieman muokattua viestin laajennusmenetelmää:

SIMD-256:lle käytetään .

Näin ollen SIMD-512:lle käytön sijaan

Siten viimeisen vaiheen laajennettu viestialue eroaa viestin runkolohkojen laajennetusta viestialueesta.

Kun viimeinen pakkaustoiminto on käytetty, tulos on seuraava merkkijonoesitys:

SIMD-256:lle

SIMD-512:lle

SIMD-n:n tapauksessa SIMD-256:n (n < 256) tai SIMD 512:n (256 < n < 512) ensimmäiset n bittiä tulostetaan. Esimerkiksi SIMD-384:lle lähtö on

Alustusvektori

Jokainen SIMD-perheen hash-funktio käyttää omaa IV-toimintoaan välttääkseen linkit eri SIMD-n-toimintojen lähtöjen välillä. SIMD-n-toiminnon IV on määritelty seuraavasti:

IV = SIMD-Compress(0, "SIMD-(i)" v1.0, 0) jossa merkkijono on ASCII -muodossa nolilla täytettynä ja (i) on n:n desimaaliesitys.

IV-arvot SIMD-perheen erilaisille hash-funktioille:

Parannuksia SHA-3- kilpailun toiselle kierrokselle

Algoritmin 2 osaa on muuttunut: permutaatiot ja sykliset siirtymät (rotaatiot) [5] .

Uusia permutaatioita valittaessa tiivistefunktion kirjoittajia ohjasivat seuraavat kriteerit:


SIMD-256. Alkuperäiset permutaatiot:

Uudet permutaatiot:

missä . Siten permutaatioiden määrä kasvoi kahdesta kolmeen.


SIMD-512. Alkuperäiset permutaatiot:

Uudet permutaatiot:

missä . Siten permutaatioiden määrä kasvoi 4:stä 7:ään.

SIMD pseudokoodi [6]

1: Funktio MessageExpansion(M, f) //f merkitsee viimeisen pakkausfunktion 2: jos f = 0 niin 3: y(i) = NTT(M + X127) //vastaavasti X255 SIMD-512:lle 4: muuten 5: y(i) = NTT(M + X127 + X125) //vastaavasti X255 + X253 SIMD-512:lle 6: lopeta jos 7: Laske Z(i,j) käyttämällä sisäisiä koodeja I(185) ja I(233) y(i):iin. 8: Laske W(i,j) käyttämällä permutaatioita Z(i,j) 9: Paluu W(i,j) 10: lopetustoiminto yksitoista: 12: funktio Round(S, i, r) 13: S = Vaihe (S; W(8i+0); IF; r0; r1) 14: S = Vaihe (S; (W8i+1); IF; r1; r2) 15: S = Vaihe (S; W(8i+2); IF; r2; r3) 16: S = Vaihe (S; W(8i+3); IF; r3; r0) 17: S = Vaihe (S; W(8i+4);MAJ; r0; r1) 18: S = Vaihe (S; W(8i+5);MAJ; r1; r2) 19: S = Vaihe (S; W(8i+6);MAJ; r2; r3) 20: S = Vaihe (S; W(8i+7); MAJ; r3; r0) 21: paluu S 22: lopputoiminto 23: 24: toiminto SIMD-Compress(IV, M, f) 25: W = Viestin laajennus (M; f) 26: S = IV x tai M 27: S = kierros(S; 0; [3; 20; 14; 27]) 28: S = kierros(S; 1; [26; 4; 23; 11]) 29: S = kierros(S; 2; [19; 28; 7; 22]) 30: S = kierros (S; 3; [15; 5; 29; 9]) 31: S = vaihe (S; IV (0); IF; 15; 5) 32: S = vaihe (S; IV (1); IF; 5; 29) 33: S = vaihe (S; IV (2); IF; 29; 9) 34: S = vaihe (S; IV (3); IF; 9; 15) 35: paluu S 36: lopputoiminto 37: 38: toiminto SIMD(M) 39: Jaa viesti M osiin M(i); 0 =<i<k. 40: M(k-1) nollalla. 41:S=IV 42: 0 =< i < k do 43: S = SIMD-Compress(S; M(i); 0) 44: loppu for 45: S = SIMD-Compress(S; ||M||; 1) 46: palauta lyhennetty(S) 47: lopputoiminto

Esimerkkitulokset [7]

Viesti M SIMD-256(M)
Tyhjä viesti 8029e81e7320e13ed9001dc3d8021fec695b7a25cd43ad805260181c35fcaea8
0x00; 0x01; 0x02; … 0x3f 5bebdb816cd3e6c8c2b5a42867a6f41570c4b917f1d3b15aabc17f24679e6acd
Viesti M SIMD-512(M)
Tyhjä viesti 51a5af7e243cd9a5989f7792c880c4c3168c3d60c4518725fe5757d1f7a69c63

66977eaba7905ce2da5d7cfd07773725f0935b55f3efb954996689a49b6d29e0

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

ee53e35c1dedd88016ebd131f2eb0761e97a3048de6e696787fd5f54981d6f2c

Suorituskyky

SIMD-algoritmin riippumattomat suorituskykytestit, jotka suoritettiin käyttämällä eBASH- vertailuarvoa , osoittivat seuraavat tulokset (nopeus ilmaistaan ​​jaksoina tavua kohden ( cpb )) [8] [3] :

prosessori 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

Samaan aikaan noin puolet hash-funktion ajasta kuluu sanoman laajennusoperaatioon: Number-Theoretic Transform (NTT) on suorituskyvyn kannalta kallein osa algoritmia.

SIMD-pakkaustoiminnolla on osittain rinnakkaisarkkitehtuuri, jonka avulla voit luoda algoritmin tehokkaita toteutuksia käyttämällä vektoriohjeita ( SIMD ). Nämä ohjeet ovat saatavilla monille tunnetuille arkkitehtuureille : SSE x86 , AltiVec PowerPC , IwMMXt ARM .

RAM-vaatimusten osalta SIMD-hajautustoiminto tarvitsee muistia sisäisen tilan tallentamiseen (64 tavua SIMD-256:lle ja 128 tavua SIMD-512:lle) ja muistia NTT-lähtöarvoille (4*64 = 256 tavua SIMD-256:lle ja 4*128 = 512 tavua SIMD-512:lle).

SIMD:n SHA-3-kilpailun tulokset

SIMD-hajautustoimintoa ei valittu SHA-3-kilpailun finalistiksi.

Kilpailun asiantuntijat totesivat, että vaikka SIMD-hajautustoiminto toistaa suurelta osin MD/SHA-perheiden algoritmeja, tekijöiden tekemät parannukset todella mahdollistivat SIMD:n suojaamisen monentyyppisiltä hyökkäyksiltä (esimerkiksi törmäyshyökkäykseltä ). Lisäksi toiselle kierrokselle tehdyt muutokset pystyivät suojaamaan SIMD-hajautusfunktiota Mendelin ja Nadin suorittamalta differentiaaliselta kryptausanalyysiltä, ​​jolle SIMD oli alttiina alkuperäisessä toteutuksessaan [9] .

Kuitenkin korkeat RAM -vaatimukset ja SIMD-ohjeiden saatavuus hyvää suorituskykyä varten tekevät hash-toiminnosta huonon ehdokkaan FPGA -toteutukseen [10] . Pääasiassa tästä syystä SIMD-hajautustoiminto ei päässyt kilpailun viimeiseen vaiheeseen.

Muistiinpanot

  1. SHA-3 kierroksen 2 ehdokkaat .
  2. Virallinen kuvaus SIMD-hajautustoiminnosta , s. 9.
  3. 1 2 SIMD-hajautustoiminnon virallinen verkkosivusto .
  4. Virallinen kuvaus SIMD-hajautustoiminnosta , s. 7-8.
  5. Parannuksia SIMD-hajautustoimintoon SHA-3-kilpailun toiselle kierrokselle , s. 1-2.
  6. Virallinen kuvaus SIMD-hajautustoiminnosta , s. 22.
  7. Virallinen kuvaus SIMD-hajautustoiminnosta , s. 43-270.
  8. eBASH benchmarkin virallinen sivusto .
  9. Raportti SHA-3-kilpailun toisen kierroksen tuloksista .
  10. SHA-3-kilpailun ehdokkaiden käyttöönotto FPGA:ssa.

Kirjallisuus