Kůže | |
---|---|
Vytvořeno | 2008 |
zveřejněno | 2008 |
Velikost hash | proměnná, 0<d≤2 64 -1 |
Počet kol | proměnná, 72 pro 256/512bitový výstup, 80 pro 1024bitový výstup |
Typ | hashovací funkce |
Skein (angl. Skein) je hashovací algoritmus s proměnnou délkou vyvinutý skupinou autorů vedených Brucem Schneierem . Hašovací funkce Skein je implementována jako univerzální kryptografické primitivum založené na blokové šifře Threefish pracující v režimu hashování UBI. [1] Hlavními vývojovými požadavky byla optimalizace pro minimální využití paměti, kryptograficky bezpečné hashování malých zpráv, odolnost vůči všem existujícím útokům na hashovací funkce, optimalizace pro 64bitové procesory a aktivní využívání přístupů k tabulkám.
Skein byl vytvořen v roce 2008 skupinou autorů pod vedením Bruce Schneiera a přihlásil se do pěti nejlepších finalistů soutěže SHA-3 , v roce 2012 se však vítězem stal algoritmus Keccak , nejproduktivnější a nejcitlivější na zranitelnosti SHA-2 [ 2] . Název hashovací funkce Skein znamená "přadeno příze".
Threefish je vlastní bloková šifra definovaná pro 256, 512 a 1024 bitové bloky. Šifra je implementována jako substitučně-permutační síť . Šifra je založena na jednoduché funkci MIX, která přijímá dvě 64bitová slova jako vstup a skládá se z bloků sčítání, kruhového posunu o konstantu a sčítání modulo 2 (XOR). Pro 256bitové a 512bitové šifry se používá 72 kol a pro 1024bitové šifry 80 kol. Mezi koly se slova vyměňují a každé čtyři kola se přidává klíč, což vede k nelinearitě.
Threefish in Skein se používá v režimu hashování UBI (Unique Block Iteration). Režim UBI je variantou režimu Matyas-Meyer-Oseas .[1] Každý odkaz UBI kombinuje vstupní zprávy z předchozího článku v řetězci s libovolnou délkou sekvence a nastavuje výstup na hodnotu pevné velikosti. Zpráva odeslaná mezi odkazy (tweak) obsahuje informace o tom, kolik bajtů bylo zpracováno, příznaky pro začátek a konec řetězce a pole typu dat, které umožňuje rozlišovat mezi aplikacemi UBI. UBI garantuje nereprodukovatelnost výsledku hash stejné zprávy a dodatečnou ochranu díky tomu, že se na vstup hashovací funkce a šifry dostanou stejné zprávy. UBI je organizována následovně. Každý článek v řetězu je funkcí
— počáteční hodnota -byte - zpráva reprezentovaná řetězcem bajtů (délka tohoto řetězce může být libovolná, ale maximum je bitů) - počáteční hodnota tweaku celočíselného typu (128 bitů).Tweak obsahuje následující pole:
Výpočty probíhají následovně. Pokud je počet bitů dělitelný 8, pak nastavíme a . Pokud počet bitů není dělitelný 8, doplníme poslední (neúplný) bajt následovně: nejvýznamnějšímu nepoužitému bitu přiřadíme hodnotu 1 a zbytek nastavíme na 0 s přihlédnutím k rozšířenému bajtu. . je počet bajtů v . Vstupní hodnota je omezená . Dále přidáme nuly, aby počet bitů byl násobkem a zavoláme výsledek . Pojďme si to každý rozdělit na bloky bajtů. Hodnota UBI se vypočítá takto:
,kde je funkce výpočtu blokové šifry, , zbytek
Tweak se vypočítá podle vzorce:
První termín definuje pole TreeLevel a Type, druhý definuje pole Position, třetí nastavuje příznak First, čtvrtý nastavuje příznaky Final a BitPad.
Následující parametry lze nastavit v poli Typ přiřazením příslušné hodnoty
Ve finální verzi je Skein vypočítán následovně. Skein má následující vstupní argumenty:
Nejprve se vygeneruje klíč . Pokud je prázdný řetězec, pak počáteční hodnota je: . Pokud ne, vypočítá se takto:
Další výpočty probíhají podle následujícího schématu:
Zde je konfigurační řetězec, který obsahuje identifikátor (je potřeba pro rozlišení různých funkcí vytvořených na základě UBI), informace o verzi, délku výstupní hodnoty, parametry stromu.
Konečný výsledek je určen tzv. funkcí , která je definována jako úvodní bajty výrazu
Pokud jsou parametry , , nenulové, pak se výpočty provádějí jinak. Velikost listu stromu je definována jako velikost uzlu jako .
Zpráva l -té úrovně je rozdělena do bloků velikosti a další úroveň stromu je vypočítána jako sloučení přes všechny
Pokud je délka , je hash u konce a jeho výsledkem je . Pokud je délka větší než ale , bylo dosaženo maximální výšky stromu, v takovém případě je výsledek hash .
Existuje také zjednodušená verze Skein s argumenty , , . Pole Typ může nabývat pouze hodnot Cfg a Msg
V roce 2009 tým autorů [3] zkoumal Threefish jako důležitou součást Skein pro kryptografickou stabilitu. Společně s výzkumem tvůrců [1] došli k výsledku uvedenému v tabulce.
Počet kol | Čas | Paměť | Typ kryptoanalýzy |
---|---|---|---|
osm | jeden | - | 511bitová pseudokolize |
16 | 26 _ | - | 459bitová pseudokolize |
17 | 2 24 | - | 434bitová pseudokolize |
17 | 2 8.6 | - | Odlišovač souvisejících klíčů |
21 | 2 3.4 | - | Odlišovač souvisejících klíčů |
21 | - | - | Související klíč nemožný rozdíl |
25 | ? | - | Obnovení souvisejícího klíče (předpokládá se) |
25 | 2 416,6 | - | Obnovení souvisejícího klíče |
26 | 2507,8 _ | - | Obnovení souvisejícího klíče |
32 | 2312 _ | 2 71 | Obnovení bumerangového klíče souvisejícího klíče |
34 | 2 398 | - | Související klíčový rozlišovač bumerangů |
35 | 2478 _ | - | Známý rozlišovač bumerangů souvisejících s klíčem |
Kromě toho jiný tým autorů [4] v roce 2010 ukázal, že pomocí kryptoanalýzy typu round-robin je možné provést útok uhádnutým klíčem na Threefish, ale pouze pokud je použito 53/57 kol místo 72. To nestačí k útok Skein, takže se navrhuje kombinovat cyklickou kryptoanalýzu s diferenciální kryptoanalýzou.
Existují implementace Skein pro tři možnosti hodnoty vnitřního stavu: 256, 512 a 1024 bitů. Za hlavní možnost je považován Skein-512, který lze v dohledné době bezpečně používat pro všechny kryptografické aplikace. 1024bitová verze je ještě bezpečnější a běží dvakrát rychleji ve stávajících hardwarových implementacích. Skein-256 je nejlepší volbou pro použití v zařízeních s nízkou pamětí (jako jsou čipové karty), protože vyžaduje pouze 100 bajtů RAM, na rozdíl od Skein-512, který vyžaduje 200 bajtů. Díky zařízení Threefish běží Skein nejrychleji na 64bitových procesorech. Níže uvedená tabulka porovnává výkon algoritmů Skein a SHA. Tabulka ukazuje rychlost (v hodinách na bajt) implementace C na 64bitovém procesoru.
Algoritmus/délka zprávy (bajty) | jeden | deset | 100 | 1000 | 10 000 | 100 000 |
---|---|---|---|---|---|---|
Kůže-256 | 774 | 77 | 16.6 | 9.8 | 9.2 | 9.2 |
Kůže-512 | 1086 | 110 | 15.6 | 7.3 | 6.6 | 6.5 |
Kůže-1024 | 3295 | 330 | 33.2 | 14.2 | 12.3 | 12.3 |
SHA-1 | 677 | 74,2 | 14.0 | 10.4 | 10,0 | 10,0 |
SHA-224 | 1379 | 143,1 | 27.4 | 20.7 | 20.1 | 20,0 |
SHA-256 | 1405 | 145,7 | 77,6 | 20.7 | 20.1 | 20,0 |
SHA-384 | 1821 | 187,3 | 19.6 | 13.7 | 13.4 | 13.3 |
SHA-512 | 1899 | 192,5 | 20.6 | 13.8 | 13.4 | 13.3 |
Jak můžete vidět z tabulky, Skein je dvakrát rychlejší než SHA-512.
Rozsah Skein je poměrně široký. Pomocí zprávy a klíče jako příslušných vstupů lze vypočítat MAC . Může být použit jako hashovací funkce pro výpočet HMAC . Chcete-li použít Skein v režimu proudové šifry, použijte argument Nonce. Je také možné jej použít jako generátor pseudonáhodných čísel, například v algoritmech Fortuna a Yarrow , jako funkci odvození klíče a funkci odvození klíče na základě hesla (s použitím argumentů Klíč a identifikátor derivace klíče ), jako hashovací funkce pro výpočet elektronického podpisu (předpokládá se pomocí argumentu Public Key ).
S argumentem Personalizace lze všechny aplikace Skein personalizovat pro konkrétního uživatele. Například pro aplikaci FOO může personalizační řetězec v UTF8 Unicode vypadat takto
20081031 někdo@example.com FOO/bar,kde pruh je personifikace uvnitř aplikace.
Hodnoty různých variant hash z prázdného řetězce.
Skin256-224("") 0x 0fadf1fa39e3837a95b3660b4184d9c2f3cfc94b55d8e7a083278bf8Malá změna ve zprávě pravděpodobně povede k velké změně hodnoty hash v důsledku lavinového efektu , jak ukazuje následující příklad:
Skein512-256 („Rychlá hnědá liška skáče přes líného psa“) 0x b3250457e05d3060b1a4bbc1428bc75a3f525ca389aeab96cfa34638d96e492aHashovací funkce | |
---|---|
obecný účel | |
Kryptografický | |
Funkce generování klíčů | |
Kontrolní číslo ( srovnání ) | |
Hashe |
|