Grostl | |
---|---|
Vývojáři | Soren Stefan Thompson, Lars Knudsen , Martin Schlaffer, Christian Rechberger, Florian Mendel, Christian Matusevich, Praaven Gauravaram |
Velikost hash | 224, 256, 384, 512 (proměnná, 8–512 bitů) |
Počet kol | 9 (doporučeno) |
Typ | hashovací funkce |
Grøstl ( Groestl ) je iterativní kryptografická hašovací funkce . Jeden z pěti finalistů soutěže SHA-3 pořádané společností NIST . Kontrakce funkce Grøstl se skládá ze dvou pevných 2n-bitových permutací P a Q, jejichž struktura je vypůjčena ze šifry AES . Zejména se používá stejný S-box . Výsledek hashovací funkce může mít délku 8 až 512 bitů s krokem 8 bitů. Varianta, která vrací n bitů, se nazývá Grøstl-n.
Algoritmus Grøstl byl speciálně navržen pro soutěž kryptografických funkcí SHA-3 týmem kryptografů [1] z Dánské technické univerzity . Funkce se původně jmenovala Grøstl-0. Strukturální rozdíly mezi obměnami se však zvýšily, aby se kvalifikovaly do finále. Byly změněny hodnoty ShiftBytes v permutaci Q. Změnily se i zaokrouhlovací konstanty v P a Q. Aktualizovaná hashovací funkce se jmenovala Grøstl. Poté, co prokázal dobrou kryptografickou sílu , byl v řadě ukazatelů horší než ostatní účastníci finálového kola a nemohl se stát vítězem.
Gröstl je rakouský pokrm . Recept je velmi blízký pokrmu zvanému „Hash“ v USA . Písmeno „ö“ v názvu funkce bylo nahrazeno písmenem „ø“ z dánské abecedy, které má stejnou výslovnost.
Grøstl je byte-orientovaná SP síť . Svou strukturou se výrazně liší od algoritmů rodiny SHA. Mnoho komponent hashovací funkce je vypůjčeno ze šifry AES. Stejně jako AES jsou permutace vyvíjeny pomocí strategie návrhu Wide Trail , jejímž hlavním principem je, že bloková šifra má :
Velikost vnitřního stavu funkce je mnohem větší než velikost výstupních dat. Jedná se o tzv. „wide-pipe construction“.
Nejprve je zpráva rozdělena do bloků , ,…, každý bit po bitu. Pro varianty funkcí vracející až 256 bitů = 512. Pro varianty vracející velké hodnoty = 1024.
Dále je vytvořena hašovací funkce pomocí metody opakovaného výpočtu. Každý blok je zpracován postupně kompresní funkcí podle vzorce , .
, ,…, je tzv. řetězený vstup.
Počáteční hodnota = .
Po zpracování posledního bloku je hodnota -bit vložena do transformační funkce Ω , která vrací zprávu o délce , tedy ≤ .
Tedy výsledek hašovací funkce Ω
Počáteční hodnotě funkce Grøstl-n je přiřazena -bitová reprezentace čísla n. Tabulka ukazuje počáteční hodnoty pro různé hashovací funkce.
224 | 00…00 00 e0 |
256 | 00…00 01 00 |
384 | 00…00 01 80 |
512 | 00…00 02 00 |
Pro práci se zprávami libovolné délky použijte funkci . Převede zprávu libovolné délky na zprávu s délkou, která je násobkem . K tomu se do zprávy nejprve přidá bit s hodnotou 1. Poté se přidají nulové bity, kde . A nakonec je přidána 64bitová reprezentace čísla . Stejné číslo určuje počet bloků, do kterých bude zpráva rozdělena.
Kompresní funkce nebo kompresní funkce se skládá z dvoubitových permutací a je definována jako .
Výstupní transformační funkce je definována jako Ω , kde je funkce, která vrací poslední bity vstupní hodnoty .
Kompresní funkce Grøstl umí pracovat s krátkými zprávami (512 bitů) a dlouhými zprávami (1024 bitů). V souladu s tím existují 4 permutace , a , .
Každá permutace se provádí v kolech, v každém z nich se provádějí 4 kolové transformace:
Tyto transformace řídí stav, který je reprezentován maticí A obsahující 1 bajt informace v každé buňce. Pro práci s krátkými výtahy zpráv má matice velikost 8X8, pro dlouhé výtahy - 8X16.
Nejprve je matice A vyplněna posloupností bajtů. Například pro posloupnost 00 01 02 … 3f matice A vypadá takto.
Matice 8 X 16 je vyplněna stejným způsobem.
Dále se na matici A provedou kulaté transformace.
AddRoundConstantTato transformace provádí operaci XOR mezi stavovou maticí a konstantou specifickou pro kolo: A←A , kde je konstanta specifická pro kolo. Tyto konstanty jsou různé pro každou permutaci P a Q:
512
1024
512
1024
kde je zaokrouhlené číslo reprezentované 8bitovou hodnotou.
SubbytesTato transformace nahradí každý bajt stavové matice hodnotou převzatou z S-boxu. Hashovací funkce Grøstl používá stejný S-box jako šifra AES. Transformace tedy vypadá takto: ← , kde je prvek matice A. A S-box vypadá takto:
00 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 0a | 0b | 0c | 0d | 0e | 0f | |
00 | 63 | 7c | 77 | 7b | f2 | 6b | 6f | c5 | třicet | 01 | 67 | 2b | např | d7 | ab | 76 |
deset | ca | 82 | c9 | 7d | fa | 59 | 47 | f0 | inzerát | d4 | a2 | af | 9c | a4 | 72 | c0 |
dvacet | b7 | fd | 93 | 26 | 36 | 3f | f7 | cc | 34 | a5 | e5 | f1 | 71 | d8 | 31 | patnáct |
třicet | 04 | c7 | 23 | c3 | osmnáct | 96 | 05 | 9a | 07 | 12 | 80 | e2 | eb | 27 | b2 | 75 |
40 | 09 | 83 | 2c | 1a | 1b | 6e | 5a | a0 | 52 | 3b | d6 | b3 | 29 | e3 | 2f | 84 |
padesáti | 53 | d1 | 00 | vyd | dvacet | fc | b1 | 5b | 6a | cb | být | 39 | 4a | 4c | 58 | srov |
60 | d0 | ef | aa | fb | 43 | 4d | 33 | 85 | 45 | f9 | 02 | 7f | padesáti | 3c | 9f | a8 |
70 | 51 | a3 | 40 | 8f | 92 | 9d | 38 | f5 | před naším letopočtem | b6 | da | 21 | deset | ff | f3 | d2 |
80 | CD | 0c | 13 | ec | 5f | 97 | 44 | 17 | c4 | a7 | 7e | 3d | 64 | 5 d | 19 | 73 |
90 | 60 | 81 | 4f | DC | 22 | 2a | 90 | 88 | 46 | ee | b8 | čtrnáct | de | 5e | 0b | db |
a0 | e0 | 32 | 3a | 0a | 49 | 06 | 24 | 5c | c2 | d3 | ac | 62 | 91 | 95 | e4 | 79 |
b0 | e7 | c8 | 37 | 6d | 8d | d5 | 4e | a9 | 6c | 56 | f4 | ea | 65 | 7a | ae | 08 |
c0 | ba | 78 | 25 | 2e | 1c | a6 | b4 | c6 | e8 | dd | 74 | lf | 4b | bd | 8b | 8a |
d0 | 70 | 3e | b5 | 66 | 48 | 03 | f6 | 0e | 61 | 35 | 57 | b9 | 86 | c1 | 1d | 9e |
e0 | e1 | f8 | 98 | jedenáct | 69 | d9 | 8e | 94 | 9b | 1e | 87 | e9 | ce | 55 | 28 | df |
f0 | 8c | a1 | 89 | 0d | bf | e6 | 42 | 68 | 41 | 99 | 2d | 0f | b0 | 54 | bb | 16 |
Transformace hledá prvky v prvním sloupci a prvek v prvním řádku.( je logické "nebo"). Výstupem je prvek umístěný v jejich průsečíku.
Nechť α=[α 1 , α 2 ,…, α 7 ] je množina celých čísel od 1 do 7. Transformace ShiftBytes otočí všechny bajty v řádku i stavové matice A o α i pozic doleva. Pro permutace P a Q jsou tyto sady čísel různé:
V souladu s tím pro funkci ShiftBytesWide:
Při této transformaci je každý sloupec matice A vynásoben konstantní maticí B v konečném poli . Matice B je definována jako
Transformaci MixBytes lze označit jako: A←B A.
Spolehlivost hashovací funkce přímo závisí na počtu kol. V důsledku kryptoanalýzy bylo možné vyrobit pouze první 3 náboje. Tabulka ukazuje některé výsledky kryptoanalýzy provedené během posledního kola soutěže o hashovací funkce SHA-3:
Cíl útoku | Typ útoku | Počet výstupních bitů | počet kol | Počet operací |
---|---|---|---|---|
hashovací funkce | hledání kolizí | 224, 256 | 3 | 264 _ |
hashovací funkce | hledání kolizí | 512 | 3 | 2192 _ |
Kompresní funkce | nalezení dílčích kolizí | 256 | 6 | 2 120 |
Kompresní funkce | nalezení dílčích kolizí | 384 | 6 | 2 180 |
Kompresní funkce | nalezení dílčích kolizí | 512 | 6 | 2 180 |
permutace | diferenciální vlastnost | 256 | 9 | 2368 _ |
permutace | diferenciální vlastnost | 512 | osm | 2280 _ |
permutace | diferenciální vlastnost | 512 | 9 | 2328 _ |
permutace | diferenciální vlastnost | 512 | deset | 2392 _ |
výstupní transformace | Hledání prototypu | 256 | 6 | 2251 _ |
výstupní transformace | Hledání prototypu | 256 | 5 | 2206 _ |
výstupní transformace | Hledání prototypu | 512 | osm | 2495 _ |
hashovací funkce | nalezení pseudopředobrazu | 256 | 5 | 2245 _ |
hashovací funkce | nalezení pseudopředobrazu | 512 | osm | 2507 _ |
Softwarová implementace Grøstl je určena především pro 64bitový procesor, ale je možné pracovat i na 32bitových procesorech. Během testů provedených ve finále soutěže NIST byl výkon hashovací funkce nejnižší ve srovnání s ostatními účastníky soutěže. Při provádění algoritmu na mikrokontroléru se však rychlost jeho provozu ukázala být mnohem vyšší než u konkurentů. Tabulka ukazuje rychlost softwarových implementací různých verzí funkce.
procesor | Varianta funkce | Rychlost (cyklus/bajt) |
---|---|---|
Intel Core i7 M620 | Grøstl-224/256 | 12:45 |
Intel Core i7 M620 | Grøstl-384/512 | 17,85 |
Následující tabulka ukazuje 8bitovou implementaci na mikrokontroléru ATmega 163.
hashovací funkce | procesor | Paměť | Rychlost (cyklus/bajt) |
---|---|---|---|
Grøstl-256 | ATmega163 | 994 | 469 |
Grøstl-256 | ATmega163 | 226 | 531 |
Grøstl-256 | ATmega163 | 164 | 760 |
Hodnoty různých variant hash z prázdného řetězce.
Grøstl-224("") 0x f2e180fb5947be964cd584e22e496242c6a329c577fc4ce8c36d34c3 Grøstl-256("") 0x 1a52d11d550039be16107f9c58db9ebcc417f16f736adb2502567119f0083467 Grøstl-384("") 0x ac353c1095ace21439251007862d6c62f829ddbe6de4f78e68d310a9205a736d8b11d99bffe448f57a1cfa2934f044a5 Grøstl 0x 6d3ad29d279110eef3adbd66de2a0345a77baede1557f5d099fce0c03d6dc2ba8e6d4a6633dfbd66053c20faa87d1a11f439a8080Malá 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:
Grøstl-256 („Rychlá hnědá liška skáče přes líného psa“) 0x 8c7ad62eb26a21297bc39c2d7293b4bd4d3399fa8afab29e970471739e28b301 Grøstl-256("Rychlá hnědá liška skáče přes líného psa.") 0x f48290b1bcacee406a0429b993adb8fb3d065f4b09cbcdb464a631d4a0080aaf Grøstl-512 („Rychlá hnědá liška skáče přes líného psa“) 0x badc1f70ccd69e0cf3760c3f93884289da84ec13c70b3d12a53a7a8a4a513f99715d46288f55e1dbf926e6d084a0538e714eeb912921714eebf 0x 518a55cc274fc887d8dcbd0bb24000395f6d3be62445d84cc9e85d419161a968268e490f7537e475e57d8c009b08852009b08852bce20Hashovací funkce | |
---|---|
obecný účel | |
Kryptografický | |
Funkce generování klíčů | |
Kontrolní číslo ( srovnání ) | |
Hashe |
|