A Keccak (kiejtése: [kɛtʃak] , mint a „ketchak”) egy kriptográfiai hash függvény , amelyet Guido Bertoni, Joan Daemen , Michaël Peeters és Gilles Van Assche terveztek a RadioGatún funkcióból .
SHA-3 származik a NIST hash függvény verseny , amely megválasztotta az Keccak algoritmus a 2012. október 2. Nem célja az SHA-2 helyettesítése , amelyet egy jelentős támadás még nem veszélyeztetett, hanem alternatív megoldást kínál az MD5 , SHA- szabványok 0 és SHA-1 elleni támadások lehetőségeire .
Keccak egy szivacs funkció , amelyben az üzenet blokkok XORed a kezdeti bit , akkor cserélték reverzibilis.
Előfordul, hogy az eredetileg beküldött Keccak algoritmust használják, ez eltér a NIST által megadott algoritmustól, mert a NIST meghatározta, hogyan kell kitölteni az üzenetet, ha az üzenet hossza nem egyenlő a szivacsfunkció által bevitt méretével. Az eredmények különbözőek.
A Keccak egy szivacsfunkció, amelynek átalakulását le fogjuk írni, amelyet a szivacs felépítésének terminológiájában f -nek nevezünk . Ez az átalakítás érvényes permutáció, ha olyan szót választunk, amely két w = 2 ℓ hatványú . Keccak esetében a szavak 64 bitesek, azaz = 6 .
Ennek a függvénynek a belső állapota az 5 × 5 × w dimenziójú mátrixnak fog tekinteni . a bejegyzés bitje lesz . Az indexeket az első két dimenzióra az 5 modulo , a harmadikra a modulo w- t kell kiszámítani .
Keccak f függvénye egy permutáció, amely öt meglehetősen egyszerű alprogram 12 + 2ℓ iterációjából ( azaz 24) áll:
A rutin θ Számítsa ki a jelentés 5 × w (5 bites) oszlopainak paritását , majd számolja ki a kizáró vagy két szomszédos oszlop közötti értéket. A rutin ρ Körkörösen tolja el a háromszög szám 25 szavát (0, 1, 3, 6, 10, 15,…). nincs eltolva, és: minden 0 ≤ t <24 esetén :Az SHA-3 a szivacsszerkezetet használja , amelyben a bemenet metaforikusan szerepel az állam által elnyelt első mondatban , egy bizonyos sebességgel, a másodikban pedig kicsavarva, azonos sebességgel.
Az adatok r bitjeinek elnyeléséhez az adatokat XOR szerkesztjük az állapot első bitjeiben, majd blokk-permutációt alkalmazunk, ha további kimenetre van szükség.
A kapacitás a hash függvény, a c = 25 w - r bit az államok, amelyek soha nem közvetlenül érinti a bemeneti és kimeneti, fontos paraméter. Meg lehet igazítani a várt biztonsági az építési, de az SHA-3 szabvány meghatározza, hogy ésszerűen át c = 2 n , és n a méret a kívánt lábnyom.
Így r , az egyes permutációk során feldolgozott üzenet bitjeinek mennyisége a kívánt lenyomat méretétől függ. A különböző r sebességválasztási lehetőségek 1152, 1088, 832 vagy 576 (144, 136, 104 vagy 72 bájt ) 224, 256, 384 és 512 bites ujjlenyomat-méret esetén, ha w értéke 64.
Ha az üzenetet egy r bitblokk méretének többszöröséhez akarjuk igazítani , akkor azt kitöltjük ( kitöltéssel vagy angol nyelvű kitöltéssel ) a 10 ... 01 bináris mintával : egy első bit 1-nél, esetleg a megfelelő bitszám 0-nál (maximális r -1 bit), de mindig következik egy másik bit 1-nél. Ez az utolsó bit szükséges előfeltétele a szivacs felépítésének biztonságosságának igazolásához (az üzenet utolsó blokkjának nem -nulla).
Az algoritmus a következőképpen halad: az állapotot 0-ra inicializáljuk, a bejegyzést kitöltjük, r bit blokkokra osztva . A bemenetet az állapot abszorbeálja, vagyis minden blokkhoz XOR izot adunk az állapottal, majd a permutációt alkalmazzuk az eredményre.
Miután az összes permutációt elvégeztük, az eredmény ujjlenyomatát a jelentés első n bitje alkotja. r mindig nagyobb, mint n , ezért soha nem kell több permutációt alkalmazni a spin fázis alatt. Más alkalmazásokban, például az Optimal Asymmetric Encryption Padding (OAEP) változó méretű kimenet hasznos. Ebben az esetben n több biztonsági paraméter, mint pusztán kimeneti méret.
A kisebb hash-ok előállítására szolgáló permutációs függvény változatai a belső állapotuk feléig terjedő kivonatméretekig is rendelkezésre állnak, ha az r sebesség elég alacsony. Nem volt szükségük az SHA versenyre való nevezésre. Például 256 bites lábnyom kiszámítása 25 32 bites szó felhasználásával lehetséges, ha r = 800−2 × 256 = 288 , vagy 32 bájt iterációnként.
Az SHA-3, a szivacs felépítését példázva, álkóddal írható:
SHA-3 funkció ( adatfolyam ): építési paraméterek: f : az előző szakaszban leírt b bit → b bit átalakulása r : a kimeneti blokkonkénti bitek száma pad : a bemeneti adatfolyam r bitekből álló egész blokkokban történő kitöltésére szolgáló funkció n s : a kimeneti blokkok száma belső változók: állapot : 0 bitre inicializált b bit tömb, [1 .. r ] állapotra és [ r +1 .. b ] állapotra osztva blokkok : mindegyik r bit blokk tömbje z : egy visszatérő karakterlánc, amelynek hossza n s × r , inicializálása üres algoritmus: (* abszorpciós fázis *) blokkok ← vágási pad ( fluxus ) blokkokra mérete r bit minden p -re blokkokban : állapot ← f ( állapot [1 .. r ] ⊕ p ) (* centrifugálási fázis *) ismételje n s -szer : z ← összefűz ( z , állapot [1 .. r ]) állapot ← f ( állam ) visszatér z