GOST (hash funkce) - GOST (hash function)
Všeobecné | |
---|---|
Návrháři | FAPSI a VNIIstandart (SSSR ) |
Nejprve publikováno | 1994-05-23 (odtajněno) |
Odvozený od | Bloková šifra GOST |
Nástupci | Streebog |
Osvědčení | Norma GOST |
Detail | |
Velikosti trávení | 256 bitů |
Kola | 32 |
Nejlepší veřejnost dešifrování | |
Útok z roku 2008 rozbíjí funkci hash celého kola. Příspěvek představuje a kolizní útok ve 2105 čas a preimage útoky ve 2192 čas.[1] |
The Funkce hash GOST, definované v normách GOST R 34.11-94 a GOST 34.311-95 je 256 bitů kryptografická hashovací funkce. To bylo původně definováno v ruském národním standardu GOST R 34,11-94 Informační technologie - kryptografická bezpečnost informací - hashovací funkce. Ekvivalentní standard používaný jinými členskými státy EU SNS je GOST 34.311-95.
Tuto funkci nelze zaměňovat s jinou Streebog hashovací funkce, která je definována v nové revizi normy GOST R 34.11-2012.[2]
Funkce hash GOST je založena na Bloková šifra GOST.
Algoritmus
GOST zpracovává zprávy s proměnnou délkou do výstupu s pevnou délkou 256 bitů. Vstupní zpráva je rozdělena na bloky 256bitových bloků (osm 32bitových) malý Endian celá čísla); zpráva je polstrovaný připojením k ní tolik nul, kolik je potřeba, aby se délka zprávy zvýšila až na 256 bitů. Zbývající bity jsou vyplněny 256bitovým celočíselným aritmetickým součtem všech dříve hašovaných bloků a poté 256bitovým celým číslem představujícím délku původní zprávy v bitech.
Základní notace
Popisy algoritmů používají následující notace:
- - j-bitový blok naplněný nulami.
- - délka M bloku v bitech modulo 2256.
- - zřetězení dvou bloků.
- - aritmetický součet dvou bloků modulo 2256
- - logický xor dvou bloků
Dále uvažujeme, že bit malého řádu je umístěn nalevo od bloku a bit vysokého řádu napravo.
Popis
Vstupní zpráva je rozdělena na 256bitové bloky V případě posledního bloku obsahuje méně než 256 bitů, je doplněn o nula bitů, aby se dosáhlo požadované délky.
Každý blok je zpracován funkcí hash kroku ,kde , , jsou 256bitové bloky.
Každý blok zpráv, počínaje prvním, je zpracován funkcí hash kroku , pro výpočet mezilehlé hodnoty hash
The hodnota může být libovolně zvolena a obvykle je .
Po je vypočtena, výsledná hodnota hash se získá následujícím způsobem
- , kde L - je délka zprávy M v bitech modulo
- , kde K - je 256bitový kontrolní součet M:
The je požadovaná hodnota hashovací funkce zprávy M.
Algoritmus tedy funguje následovně.
- Inicializace:
- - Počáteční 256bitová hodnota hashovací funkce určená uživatelem.
- - Kontrolní součet
- - Délka zprávy
- Funkce komprese interních iterací: pro i = 1… n - 1 proveďte následující (zatímco ):
- - použít funkci hash kroku
- - přepočítat délku zprávy
- - vypočítat kontrolní součet
- Funkce komprese finální iterace:
- - vypočítat celou délku zprávy v bitech
- - vložte poslední zprávu nulami
- - aktualizovat kontrolní součet
- - zpracovat poslední blok zpráv
- - MD - posílení hashováním délky zprávy
- - kontrolní hash součet
- Výstupní hodnota je .
Krokovací hash funkce
Funkce hash kroku mapuje dva 256bitové bloky do jednoho: Skládá se ze tří částí:

- Generování klíčů
- Šifrování transformace pomocí kláves
- Náhodné proměny
Generování klíčů
Algoritmus generující klíče používá:
- Dvě transformace 256bitových bloků:
- Proměna , kde jsou 64bitové dílčí bloky Y.
- Proměna , kde , a jsou 8bitové dílčí bloky Y.
- Tři konstanty:
- C2 = 0
- C3 = 0xff00ffff000000ffff0000ff00ffff0000ff00ff00ff00ffff00ff00ff00ff00
- C4 = 0
Algoritmus:
- Pro j = 2,3,4 proveďte následující:
Šifrování transformace
Po generování klíčů, šifrování se provádí pomocí GOST 28147-89 v režimu jednoduchého nahrazování klíčů Označme šifrovací transformaci jako E (Poznámka: E transformace šifruje 64bitová data pomocí 256bitového klíče). Pro zašifrování je rozdělena do čtyř 64bitových bloků: a každý z těchto bloků je šifrován jako:
Poté jsou výsledné bloky zřetězeny do jednoho 256bitového bloku: .
Náhodné proměny
V posledním kroku se použije náhodná transformace , S a m pomocí a Posuvný registr lineární zpětné vazby. Ve výsledku je střední hodnota hash je získáno.
Nejprve definujeme funkci, LFSR na 256bitovém bloku: , kde jsou 16bitové dílčí bloky Y.
Shuffle transformace je , kde označuje i-tou sílu funkce.
Počáteční hodnoty
Pro GOST R 34.11 94 existují dvě běžně používané sady počátečních parametrů. Výchozí vektor pro obě sady je
= 0x00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000.
Ačkoli samotná norma GOST R 34.11 94 neurčuje počáteční hodnotu algoritmu a S-box šifrovací transformace , ale v sekcích ukázek používá následující „testovací parametry“.[3]
"Testovací parametry" S-box
RFC 5831 určuje pouze tyto parametry, ale RFC 4357 pojmenuje je jako „testovací parametry“ a nedoporučuje je pro použití v produkčních aplikacích.
Číslo S-boxu | Hodnota | |||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
1 | 4 | 10 | 9 | 2 | 13 | 8 | 0 | 14 | 6 | 11 | 1 | 12 | 7 | 15 | 5 | 3 |
2 | 14 | 11 | 4 | 12 | 6 | 13 | 15 | 10 | 2 | 3 | 8 | 1 | 0 | 7 | 5 | 9 |
3 | 5 | 8 | 1 | 13 | 10 | 3 | 4 | 2 | 14 | 15 | 12 | 7 | 6 | 0 | 9 | 11 |
4 | 7 | 13 | 10 | 1 | 0 | 8 | 9 | 15 | 14 | 4 | 6 | 12 | 11 | 2 | 5 | 3 |
5 | 6 | 12 | 7 | 1 | 5 | 15 | 13 | 8 | 4 | 10 | 9 | 14 | 0 | 3 | 11 | 2 |
6 | 4 | 11 | 10 | 0 | 7 | 2 | 1 | 13 | 3 | 6 | 8 | 5 | 9 | 12 | 15 | 14 |
7 | 13 | 11 | 4 | 1 | 3 | 15 | 5 | 9 | 0 | 10 | 14 | 7 | 6 | 8 | 2 | 12 |
8 | 1 | 15 | 13 | 0 | 5 | 7 | 10 | 4 | 9 | 2 | 3 | 14 | 6 | 11 | 8 | 12 |
S-box CryptoPro
CryptoPro S-box pochází ze sady parametrů "připraveno k výrobě" vyvinuté společností CryptoPro, je také specifikováno jako součást RFC 4357, oddíl 11.2.
Číslo S-boxu | Hodnota | |||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
1 | 10 | 4 | 5 | 6 | 8 | 1 | 3 | 7 | 13 | 12 | 14 | 0 | 9 | 2 | 11 | 15 |
2 | 5 | 15 | 4 | 0 | 2 | 13 | 11 | 9 | 1 | 7 | 6 | 3 | 12 | 14 | 10 | 8 |
3 | 7 | 15 | 12 | 14 | 9 | 4 | 1 | 0 | 3 | 11 | 5 | 2 | 6 | 10 | 8 | 13 |
4 | 4 | 10 | 7 | 12 | 0 | 15 | 2 | 8 | 14 | 1 | 6 | 5 | 13 | 11 | 9 | 3 |
5 | 7 | 6 | 4 | 11 | 9 | 12 | 2 | 10 | 1 | 8 | 0 | 14 | 15 | 13 | 3 | 5 |
6 | 7 | 6 | 2 | 4 | 13 | 9 | 15 | 0 | 10 | 1 | 5 | 11 | 8 | 14 | 12 | 3 |
7 | 13 | 14 | 4 | 1 | 7 | 0 | 5 | 10 | 3 | 12 | 8 | 15 | 6 | 2 | 9 | 11 |
8 | 1 | 3 | 10 | 9 | 5 | 11 | 4 | 15 | 8 | 6 | 7 | 14 | 13 | 0 | 2 | 12 |
Kryptoanalýza
V roce 2008 byl zveřejněn útok, který narušuje komplexní hashovací funkci GOST. Příspěvek představuje a kolizní útok ve 2105 čas a první a druhý preimage útoky ve 2192 čas (2n čas označuje přibližný počet, kolikrát byl algoritmus vypočítán při útoku).[1]
Vektory hash testu GOST
Mřížky pro „testovací parametry“
256bitový (32bajtový) hash GOST je obvykle reprezentován jako 64místná hexadecimální čísla. Zde jsou testovací vektory pro hash GOST s „testovacími parametry“
GOST („Rychlá hnědá liška skáče přes líné dog ") = 77b7fa410c9ac58a25f49bca7d0468c9296529315eaca76bd1a10f376d1f4294
I malá změna ve zprávě bude s naprostou pravděpodobností mít za následek úplně jiný hash kvůli lavinový efekt. Například změna d na C:
GOST („Rychlá hnědá liška skáče přes líné Cog ") = a3ebc4daaab78b0be131dab5737a7f67e602670d543521319150d2e14eeec445
Dva vzorky pocházející z normy GOST R 34.11-94:[3]
GOST ("This is message, length = 32 bytes") = b1c466d37519b82e8319819ff32595e047a28cb6f83eff1c6916a815a637fffaGOST ("Předpokládejme, že původní zpráva má délku = 50 bajtů") = 471aba57a60a770d3a761306354
Další testovací vektory:
GOST ( "") = ce85b99cc46752fffee35cab9a7b0278abb4c2d2055cff685af4912c49490f8dGOST ( "A") = d42c539e367c66e9c88a801f6649349c21871b4344c6a573f849fdce62f314ddGOST ( "výtah ze zprávy") = ad4434ecb18f2c99b60cbe59ec3d2469582b65273f48de72db2fde16a4889a4dGOST (128 znaků 'U') = 53a3a3ed25180cef0c1d85a074273e551c25660a87062a52d926a9e8fe5733a4GOST (1000000 znaky 'a') = 5c00ccc2734cdd3332d3d4749576e3c1a7dbaf0e7ea74e9fa602413c90a129fa
Hash pro parametry CryptoPro
Algoritmus GOST s CryptoPro S-boxem generuje různé sady hodnot hash.
= 981e5f3ca30c841487830f84fb433e13ac1101569b9c13584ac483234cd656c0
GOST ( "A") = e74c52dd282183bf37af0079c9f78055715a103f17e3133ceff1aacf2f403011GOST ( "abc") = b285056dbf18d7392d7677369524dd14747459ed8143997e163b2986f92fd42cGOST ( "výtah ze zprávy") = bc6041dd2aa401ebfa6e9886734174febdb4729aa972d60f549ac39b29721ba0GOST ( "Rychle hnědé liščí skoky přes líný") = 9004294a361a508c586fe53d1f1b02746765e71b765472786e4770d565830a76GOST ( "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789") = 73b70a39497de53a6e08c67b6d4db853540f03e9389299d9b0156ef7e85d0f61GOST ( "12345678901234567890123456789012345678901234567890123456789012345678901234567890") = 6bc7b38989b28cf93ae8842bf9d752905910a7528a61e5bce0782de43e610c90GOST ( "Toto je zpráva, délka = 32 bajtů") = 2cefc2f7b7bdc514e18ea57fa74ff357e7fa17d652c75f69cb1be7893ede48ebGOST ( "Předpokládejme, že původní zpráva má délka = 50 bajtů") = c3730c5cbccacf915ac292676f21e8bd4ef75331d9405e5f1a61dc3130a65011GOST (128 z "U") = 1c4ac7614691bbf427fa2316216be8f10d92edfd37cd1027514c1008f649c4e8GOST (1000000 "A") = 869 3287aa62f9478f7cb312ec0866b6c4e4a0f11160441e8f4ffcd2715dd554f
Viz také
Reference
- ^ A b Mendel, Florian; Pramstaller, Norbert; Rechberger, Christian; Kontak, Marcin; Szmidt, Janusz (2008). "Kryptoanalýza hašovací funkce GOST". Ve Wagner, David (ed.). Pokroky v kryptologii - CRYPTO 2008. Přednášky z informatiky. 5157. Německo: Springer Berlin Heidelberg. 162–178. doi:10.1007/978-3-540-85174-5_10. ISBN 978-3-540-85173-8.
- ^ GOST R 34.11-2012: Funkce Streebog Hash
- ^ A b "Norma GOST R 34.11-94. Informační technologie. Zabezpečení kryptografických dat. Hašovací funkce. Dodatek A." 1994. Citovat deník vyžaduje
| deník =
(Pomoc)
Další čtení
- "GOST R 34.11-94: Algoritmus hashovací funkce". IETF. Březen 2010.
- "Informační technologie. Zabezpečení kryptografických dat. Hašovací funkce". 2010-02-20. Plné znění normy GOST R 34.11-94 (v ruštině).
externí odkazy
- C implementační a testovací vektory pro hashovací funkci GOST od Markku-Juhani Saarinen, obsahuje také návrhy překladů norem GOST 28147-89 a GOST R 34.11-94 do angličtiny. Opravená verze, viz [1].
- Implementace C ++ s proudy STL[trvalý mrtvý odkaz ].
- RHash, an otevřený zdroj nástroj příkazového řádku, který dokáže vypočítat a ověřit hash GOST (podporuje obě sady parametrů).
- Implementace GOST R 34.11-94 v JavaScript (Parametry CryptoPro )
- Stránka šifrování funkce hash GOST
- Online kalkulačka GOST