SIMD (hash funkció)

Az oldal jelenlegi verzióját még nem ellenőrizték tapasztalt közreműködők, és jelentősen eltérhet a 2021. október 27-én felülvizsgált verziótól ; az ellenőrzések 2 szerkesztést igényelnek .
SIMD
Létrehozva 2008
közzétett 2008. október
Hash méret 256 vagy 512 bites
A körök száma négy
Típusú hash függvény

A SIMD  egy iteratív kriptográfiai hash függvény , amelyet Gaëtan Leurent, Charles Bouillaguet és Pierre-Alain Fouque fejlesztett ki. A National Institute of Standards and Technology (USA) SHA-3 szabványversenyére jelölték , ahol bejutott a második fordulóba [ 1] .

A hash függvénynek két változata létezik, a SIMD-256 és a SIMD-512, amelyek egy tetszőleges hosszúságú üzenetet 256 vagy 512 bites hash értékké alakítanak át, amit üzenetkivonatnak is neveznek . Ezenkívül lehetőség van SIMD-n hash függvények definiálására a SIMD-256 és SIMD-512 függvények csonkolásaként n<256 és 256<n<512 esetén [2] .

Az alkotók szerint a hash függvény fő jellemzője az üzenet jelentős kibővítése, amely lehetővé teszi, hogy megvédje magát a differenciális kriptoanalízistől [3] .

Algoritmus

Általános leírás és paraméterek

A h hash függvény fő része a tömörítési függvény . A h(M) kiszámításához az M üzenetet k darab m bites részre osztjuk . A tömörítési függvényt ezután iteratív módon alkalmazzuk az üzenetrészekre . A kezdeti állapot vagy inicializálási vektor ki van jelölve és rögzítve minden SIMD család funkcióhoz. A hash függvény végeredményét a véglegesítési függvény alkalmazásával kapjuk meg .

A C tömörítési funkció Davis-Meier módban általában a blokk titkosítási funkcióval épül fel : , azonban számos fejlesztést alkalmaznak a SIMD hash funkcióhoz.

A SIMD hash függvénycsalád a következő paramétereket használja:

Hash mérete, n Üzenetblokk mérete, m Belső állapotméret( ), p
SIMD-256 256 512 512
SIMD-512 512 1024 1024

A belső állapotot a SIMD-256 esetében 32 bites, a SIMD-512 esetében pedig 8x4-es szavakból álló 4x4-es mátrix képviseli.


Tömörítési funkció

A SIMD tömörítési funkció a Davis-Meyer tervezésen alapul, néhány módosítással.

Először is, a tömörítési függvény helyett a .

Másodszor, az XOR művelet helyett a SIMD-ben és a SIMD-ben több további Feistel kört használnak h beviteli billentyűvel. Ezt a műveletet a függvény hajtja végre .

Így a tömörítési függvény definíciója: . A SIMD hash függvény szerzői szerint ezek a módosítások ugyanolyan szintű biztonságot nyújtanak, mint az eredeti Davis-Meyer terv, ugyanakkor megakadályozzák bizonyos típusú többblokkos támadásokat [4] .

Üzenetbővítmény

A SIMD-256 hash függvény üzenetbővítése (illetve SIMD-512) egy 512 bites (illetve 1024 bites) üzenetblokkot alakít át 4096 bites (illetve 8192 bites) kiterjesztett üzenetté, minimális távolsággal 520 ( ill. .1032).

A Feistel hálózat használata

A Feistel struktúra SIMD hash függvény általi használata az MD/SHA hash függvénycsaládhoz hasonlóan épül fel:

vagy egy kényelmesebb formátumban:

SIMD-256-hoz

SIMD-512 esetén

ahol egy logikai függvény, modulo összeadás, és egy balra ciklikus eltolás bitenként.

4 párhuzamos Feistel cellát használnak a SIMD-256-hoz (illetve 8-at a SIMD-512-hez), amelyek a permutációk miatt kölcsönhatásba lépnek egymással . A permutációkat úgy választják meg, hogy biztosítsák a jó keveredést.

A SIMD-256 esetében ez a következő:

Ennek megfelelően a SIMD-512 esetében:

Általában a tömörítési funkció 4 körben működik, amelyek mindegyike 8 lépésből (lépésből), plusz egy további utolsó körből áll.

Végső tömörítési funkció

Az üzenet összes blokkjának tömörítése után a tömörítési funkció újabb további hívása történik az üzenet méretével mint bemenettel. Ebben az esetben az üzenet hosszát szükség esetén modulo bitben számítjuk ki.

A végső tömörítési funkcióhoz egy kissé módosított üzenetbővítési módszert alkalmazunk:

SIMD-256 esetén a .

Ennek megfelelően a SIMD-512 esetében a használat helyett

Így az utolsó szakasz kiterjesztett üzenettartománya eltér az üzenettörzs blokkok kiterjesztett üzenettartományától.

A végső tömörítési függvény alkalmazása után a kimenet a következő karakterlánc-ábrázolás lesz:

SIMD-256-hoz

SIMD-512 esetén

SIMD-n esetén a SIMD-256 (n < 256) vagy a SIMD 512 (256 < n < 512) első n bitje kerül kiadásra. Például a SIMD-384 esetében a kimenet a következő lesz

Inicializálási vektor

Minden SIMD-család hash függvény a saját IV-jét használja, hogy elkerülje a különböző SIMD-n függvények kimenetei közötti kapcsolatokat. A SIMD-n függvény IV-je a következőképpen van definiálva:

IV = SIMD-Compress(0, "SIMD-(i)" v1.0, 0), ahol a karakterlánc ASCII formátumban nullákkal van kitöltve, és (i) az n decimális reprezentációja.

IV értékek a SIMD család különböző hash függvényeihez:

Fejlesztések az SHA-3 verseny második fordulójához

Az algoritmus 2 része változott: permutációk és ciklikus eltolások (rotációk) [5] .

Az új permutációk kiválasztásakor a hash függvény szerzőit a következő kritériumok vezérelték:


SIMD-256. Kezdeti permutációk:

Új permutációk:

ahol . Így a permutációk száma 2-ről 3-ra nőtt.


SIMD-512. Kezdeti permutációk:

Új permutációk:

ahol . Így a permutációk száma 4-ről 7-re nőtt.

SIMD pszeudokód [6]

1: A MessageExpansion(M, f) //f függvény a végső tömörítési függvényt jelöli 2: ha f = 0, akkor 3: y(i) = NTT(M + X127) //rendre X255 SIMD-512 esetén 4:egyéb 5: y(i) = NTT(M + X127 + X125) //rendre X255 + X253 SIMD-512 esetén 6: vége, ha 7: Számítsa ki a Z(i,j)-t az I(185) és I(233) belső kódok alkalmazásával y(i)-re. 8: Számítsa ki W(i,j) értékét Z(i,j) permutációinak alkalmazásával 9: Visszatérés W(i,j) 10: végfunkció tizenegy: 12: függvény Round(S, i, r) 13: S = lépés (S; W(8i+0); IF; r0; r1) 14: S = lépés (S; (W8i+1); IF; r1; r2) 15: S = lépés (S; W(8i+2); IF; r2; r3) 16: S = lépés (S; W(8i+3); IF; r3; r0) 17: S = lépés (S; W(8i+4);MAJ; r0; r1) 18: S = lépés (S; W(8i+5);MAJ; r1; r2) 19: S = lépés (S; W(8i+6);MAJ; r2; r3) 20: S = lépés (S; W (8i+7); MAJ; r3; r0) 21: vissza S 22: végfunkció 23: 24: funkció SIMD-Compress(IV, M, f) 25: W = Üzenetkiterjesztés (M; f) 26: S = IV x vagy M 27: S = kerek (S; 0; [3; 20; 14; 27]) 28: S = kör(S; 1; [26; 4; 23; 11]) 29: S = kör(S; 2; [19; 28; 7; 22]) 30: S = kerek (S; 3; [15; 5; 29; 9]) 31: S = lépés (S; IV (0); IF; 15; 5) 32: S = lépés (S; IV (1); IF; 5; 29) 33: S = lépés (S; IV (2); IF; 29; 9) 34: S = lépés (S; IV (3); IF; 9; 15) 35: vissza S 36: végfunkció 37: 38: SIMD(M) funkció 39: Ossza M üzenetet M(i) részekre; 0 =<i<k. 40: M(k-1) nullákkal kitömve. 41:S=IV 42: 0 esetén =< i < k do 43: S = SIMD-Compress(S; M(i); 0) 44: vége for 45: S = SIMD-Compress(S; ||M||; 1) 46: vissza Csonka(S) 47: végfüggvény

Mintaeredmények [7]

Üzenet M SIMD-256(M)
Üres üzenet 8029e81e7320e13ed9001dc3d8021fec695b7a25cd43ad805260181c35fcaea8
0x00; 0x01; 0x02; … 0x3f 5bebdb816cd3e6c8c2b5a42867a6f41570c4b917f1d3b15aabc17f24679e6acd
Üzenet M SIMD-512(M)
Üres üzenet 51a5af7e243cd9a5989f7792c880c4c3168c3d60c4518725fe5757d1f7a69c63

66977eaba7905ce2da5d7cfd07773725f0935b55f3efb954996689a49b6d29e0

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

ee53e35c1dedd88016ebd131f2eb0761e97a3048de6e696787fd5f54981d6f2c

Teljesítmény

A SIMD algoritmus független teljesítménytesztjei, amelyeket az eBASH benchmark segítségével végeztek, a következő eredményeket mutatták (a sebesség ciklus per bájtban van megadva ( cpb )) [8] [3] :

processzor Core i5 2. mag (45 nm) 2. mag (65 nm)
SIMD-256 7,51 cbp 9,18 cbp 11,34 cbp
SIMD-512 8,63 cbp 10,02 cpb 12,05 cpb

Ugyanakkor a hash függvény idejének mintegy felét az üzenetbővítési művelet tölti el: a számelméleti transzformáció (NTT) az algoritmus legdrágább része a teljesítmény szempontjából.

A SIMD tömörítési funkció részben párhuzamos architektúrával rendelkezik, amely lehetővé teszi az algoritmus hatékony megvalósítását vektorutasítások ( SIMD ) segítségével. Ezek az utasítások számos jól ismert architektúrán elérhetők: SSE x86 - on , AltiVec PowerPC - n , IwMMXt ARM -en .

Ami a RAM-igényt illeti, a SIMD hash funkciónak memóriára van szüksége a belső állapot tárolásához (64 bájt a SIMD-256-hoz és 128 bájt a SIMD-512-hez), és memóriára van szüksége az NTT kimeneti értékekhez (4 * 64 = 256 bájt SIMD-256 esetén és 4*128 = 512 bájt SIMD-512 esetén).

A SIMD SHA-3 verseny eredményei

A SIMD hash funkciót nem választották ki döntősnek az SHA-3 versenyen.

A verseny szakértői megjegyezték, hogy bár a SIMD hash funkciója nagyrészt megismétli az MD / SHA családok algoritmusait, a szerzők által végrehajtott fejlesztések valóban lehetővé tették a SIMD védelmét sokféle támadástól (például ütközési támadástól ). Ezen túlmenően a második körre végrehajtott változtatások meg tudták védeni a SIMD hash függvényt a Mendel és Nad által végrehajtott differenciális kriptoanalízis támadástól, amelynek a SIMD ki volt téve az eredeti megvalósításban [9] .

Azonban a magas RAM -igény és a jó teljesítmény érdekében rendelkezésre álló SIMD utasítások miatt a hash függvény rossz jelölt az FPGA megvalósításához [10] . Főleg emiatt a SIMD hash funkciója nem jutott be a verseny utolsó szakaszába.

Jegyzetek

  1. SHA-3 2. forduló jelöltjei .
  2. A SIMD hash funkciójának hivatalos leírása , p. 9.
  3. 1 2 A SIMD hash funkció hivatalos honlapja .
  4. A SIMD hash funkciójának hivatalos leírása , p. 7-8.
  5. Az SHA-3 verseny második fordulójának SIMD hash-függvényének továbbfejlesztései , 1. o. 1-2.
  6. A SIMD hash funkciójának hivatalos leírása , p. 22.
  7. A SIMD hash funkciójának hivatalos leírása , p. 43-270.
  8. Az eBASH benchmark hivatalos webhelye .
  9. Beszámoló az SHA-3 verseny második fordulójának eredményeiről .
  10. SHA-3 verseny jelöltek megvalósítása FPGA-n.

Irodalom