Kůže

Aktuální verze stránky ještě nebyla zkontrolována zkušenými přispěvateli a může se výrazně lišit od verze recenzované 28. října 2015; kontroly vyžadují 18 úprav .
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.

Historie

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".

Algoritmus

Threefish Block

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ě.

UBI

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.

Další argumenty

Následující parametry lze nastavit v poli Typ přiřazením příslušné hodnoty

skin

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

Kryptoanalýza

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.

Výkon

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.

Aplikace

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ě[email protected] FOO/bar,

kde pruh je personifikace uvnitř aplikace.

Příklady hash přadena

Hodnoty různých variant hash z prázdného řetězce.

Skin256-224("") 0x 0fadf1fa39e3837a95b3660b4184d9c2f3cfc94b55d8e7a083278bf8
Skein256-256("") 0x c8877087da56e072870daa843f176e9453115929094c3a40c463a196c29bf7ba
Skein512-224("") 0x 1541ae9fc3ebe24eb758ccb1fd60c2c31a9ebfe65b220086e7819e25
Skein512-256("") 0x 39ccc4554a8b31853b9de7a1fe638a24cce6b35a55f2431009e18780335d2621
Skein512-384("") 0x
dd5aaf4589dc227bd1eb7bc68771f5baeaa3586ef6c7680167a023ec8ce26980f06c4082c488b4ac9ef313f8cbe70808 0x bc5b4c50925519c290cc634277ae3d6257212395cba733bbad37a4af0fa06af4 1fca7903d06564fea7a2d3730dbdb80c1f85562dfcc070334ea4d1d9e72cba7a
Skein1024-384("") 0x 1fdb081963b960e89eaa11b87dda55e8a55a3e1066b30e38d8ae2a45242f7dadfaf06d80ca8a73cd8242ce5eab84c164
"-511" 0x e2943eb0bc0efabd49503a76edf7cfcf072db25bad94ed44fe537284163f3119 c47ac6f78699b4272255966e0aba65c75a0a64bd23df6996d1bc3174afd9fa8b
Skein1024-1024("") 0x 0fff9563bb3279289227ac77d319b6fff8d7e9f09da1247b72a0a265cd6d2a62 645ad547ed8193db48cff847c06494a03f55666d3b47eb4c20456c9373c86297 d630d5578ebd34cb40991578f9f52b18003efa35d3da6553ff35db91b81ab890 bec1b189b7f52cb2a783ebb7d823d725b0b4a71f6824e88f68f982eefc6d19c6

Malá 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 b3250457e05d3060b1a4bbc1428bc75a3f525ca389aeab96cfa34638d96e492a
Skein512-256("Rychlá hnědá liška skáče přes líného psa.") 0x 41e829d7fca71c7d7154ed8fc8a069f274dd664ae0ed29d365d919f4e575eebb

Odkazy

Poznámky

  1. 1 2 Dokumentace přadena, verze 1.3 (2010-10-01) . Datum přístupu: 17. prosince 2013. Archivováno z originálu 24. srpna 2014.
  2. NIST vybírá vítěze soutěže Secure Hash Algorithm (SHA-3) . NIST . Získáno 2. října 2012. Archivováno z originálu 5. října 2012.
  3. Jean-Philippe Aumasson1, C¸ a˘gda¸s C¸ alık, Willi Meier1, Onur Ozen, Raphael C.-W. a Kerem VarIcI,. Vylepšená kryptoanalýza  přadena (neopr.) . — Lucemburská univerzita, 2009.
  4. Dmitrij Chovratovič a Ivica Nikolić. Rotační kryptoanalýza ARX  (neopr.) . — Lucemburská univerzita, 2010.