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] .
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.
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] .
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 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.
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
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:
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.
Ü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 |
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 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.
Hash függvények | |
---|---|
Általános rendeltetésű | |
Kriptográfia | |
Kulcsgenerálási funkciók | |
Csekkszám ( összehasonlítás ) | |
Hashes |
|