GOST R 34.11-94 | |
---|---|
Létrehozva | 1994 |
közzétett | 1994. május 23 |
Lemondás dátuma | 2013. január 1. [1] [2] |
Utód | GOST R 34.11-2012 "Stribog", DSTU 7564:2014 "Kupyna" |
Hash méret | 256 bites |
A körök száma | egy |
Típusú | hash függvény |
GOST R 34.11-94 „ Informatika. Az információk kriptográfiai védelme. A hash függvény "egy elavult orosz kriptográfiai szabvány a hash függvény kiszámításához , a GOST R 34.10-94 alapján. A FÁK -országokban újra kiadták és a GOST 34.311-95 államközi szabványként használták .
A szabvány meghatároz egy algoritmust és eljárást egy karaktersorozat hash függvényének kiszámításához. Ez a szabvány kötelező kivonatolási algoritmusként az Orosz Föderáció állami szervezeteiben és számos kereskedelmi szervezetben.
2013-ig az Orosz Föderáció Központi Bankja megkövetelte a GOST R 34.11-94 használatát a rendelkezésére bocsátott dokumentumok elektronikus aláírásához [3] .
2013. január 1-jétől az Orosz Föderációt a GOST R 34.11-2012 "Stribog" [4] , 2019. június 1- től pedig a FÁK-országokban a GOST 34.11-2018 [5] váltotta fel .
2022. január 1- ig Ukrajnában a DSTU 4145-2002 - vel együtt használják elektronikus digitális aláírás céljából [6] .
A kivonatolási algoritmus leírásához a következő jelölést használjuk:
Továbbá feltételezzük, hogy a blokk legkevésbé jelentős (nulla) bitje a jobb oldalon, a legjelentősebb - a bal oldalon található.
A leírt hash függvény alapja a kivonatoló lépésfüggvény , ahol , , 256 bites blokkok.
A bemeneti üzenet 256 bites blokkokra van felosztva . Ha az utolsó blokk mérete kisebb, mint 256 bit, akkor balra nullákat adunk hozzá a megadott blokkhossz eléréséhez.
Minden üzenetblokk az elsőtől kezdve egy lépésfüggvénybe kerül a közbenső hash érték kiszámításához:
Az érték tetszőlegesen választható.
A számítás után a végső hash értéket a következőképpen kapjuk meg:
h az M üzenet hash értéke
Algoritmus
Megjegyzés: mivel az üzenet hossza részt vesz a kivonatolásban, nem kell feltüntetni a blokkhoz hozzáadott nullák számát az elküldött üzenetben .
A step hash függvény két 256 bites blokkot képez le egy 256 bites blokkra , és három részből áll:
A kulcsgeneráló algoritmus a következőket használja:
Algoritmus:
A kulcsok előállítása után a titkosítás a GOST 28147–89 szerint történik egyszerű kulcscsere módban (for ), a titkosítási eljárást E jelöli (Megjegyzés: a GOST 28147 szerinti E titkosítási funkció 64 bites adatokat titkosít egy 256 bites kulcs). A titkosításhoz négy, egyenként 64 bites blokkra vannak osztva: és mindegyik blokk titkosított:
Ezt követően a blokkokat egy 256 bites blokkba állítják össze:
Az utolsó lépés a , S és m megkeverése egy shift regiszter segítségével, ami a következőt eredményezi: .
Az átalakítási folyamat leírásához először definiálni kell egy ψ függvényt, amely egy 256 bites blokkot elemi transzformációt hajt végre azonos hosszúságú blokkká: , ahol az Y blokk 16 bites részblokkjai vannak.
A keverési transzformáció alakja , ahol az i hossz szuperpozícióját jelöli . Más szavakkal, a transzformáció egy lineáris visszacsatolású eltolási regiszter , és az i index a körök számát jelzi.
A titkosítási transzformációként használt GOST 28147-89 algoritmus paramétere nyolc cserecsomópont (S-box) táblázata. A GOST R 34.11-94 nem rögzíti az S-boxok és a H 1 kezdővektor értékeit , ami a hash függvény inkompatibilis megvalósítását eredményezte.
Két széles körben használt paraméterkészlet létezik, amelyek feltételezik, hogy a kezdővektor nullával egyenlő:
H 1 =0x00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000,de az alább megadott S-box értékekkel.
OID: 1.2.643.2.2.30.0
S-blokk szám | Jelentése | |||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | egy | 2 | 3 | négy | 5 | 6 | 7 | nyolc | 9 | A | B | C | D | E | F | |
egy | négy | A | 9 | 2 | D | nyolc | 0 | E | 6 | B | egy | C | 7 | F | 5 | 3 |
2 | E | B | négy | C | 6 | D | F | A | 2 | 3 | nyolc | egy | 0 | 7 | 5 | 9 |
3 | 5 | nyolc | egy | D | A | 3 | négy | 2 | E | F | C | 7 | 6 | 0 | 9 | B |
négy | 7 | D | A | egy | 0 | nyolc | 9 | F | E | négy | 6 | C | B | 2 | 5 | 3 |
5 | 6 | C | 7 | egy | 5 | F | D | nyolc | négy | A | 9 | E | 0 | 3 | B | 2 |
6 | négy | B | A | 0 | 7 | 2 | egy | D | 3 | 6 | nyolc | 5 | 9 | C | F | E |
7 | D | B | négy | egy | 3 | F | 5 | 9 | 0 | A | E | 7 | 6 | nyolc | 2 | C |
nyolc | egy | F | D | 0 | 5 | 7 | A | négy | 9 | 2 | 3 | E | 6 | B | nyolc | C |
Ezeket a cserecsomópontokat a GOST R 34.11-94 "A függeléke" határozza meg tesztelési célból [7] , azzal az ajánlással, hogy csak tesztesetekben használják őket. Ezek azonban széles körben elterjedtek. Például ezeket az RFC 5831 írja le, és az Orosz Föderáció Központi Bankja használja őket alkalmazásaikban . [nyolc]
Azonosító: id-GostR3411-94-CryptoProParamSetOID: 1.2.643.2.2.30.1
S-blokk szám | Jelentése | |||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | egy | 2 | 3 | négy | 5 | 6 | 7 | nyolc | 9 | A | B | C | D | E | F | |
egy | A | négy | 5 | 6 | nyolc | egy | 3 | 7 | D | C | E | 0 | 9 | 2 | B | F |
2 | 5 | F | négy | 0 | 2 | D | B | 9 | egy | 7 | 6 | 3 | C | E | A | nyolc |
3 | 7 | F | C | E | 9 | négy | egy | 0 | 3 | B | 5 | 2 | 6 | A | nyolc | D |
négy | négy | A | 7 | C | 0 | F | 2 | nyolc | E | egy | 6 | 5 | D | B | 9 | 3 |
5 | 7 | 6 | négy | B | 9 | C | 2 | A | egy | nyolc | 0 | E | F | D | 3 | 5 |
6 | 7 | 6 | 2 | négy | D | 9 | F | 0 | A | egy | 5 | B | nyolc | E | C | 3 |
7 | D | E | négy | egy | 7 | 0 | 5 | A | 3 | C | nyolc | F | 6 | 2 | 9 | B |
nyolc | egy | 3 | A | 9 | 5 | B | négy | F | nyolc | 6 | 7 | E | D | 0 | 2 | C |
Az orosz CryptoPro cég megírta saját "információs" RFC 4357 -ét . Eszerint a GOST R 34.11-94 megvalósításához az e cég által kifejlesztett S-box készletet kell használni. A jól ismert OpenSSL nyílt könyvtárban az 1.0.0-s verziótól kezdve a GOST R 34.11-94 hash függvény ezekkel a paraméterekkel plug-inként jelent meg. Ezeket a helyettesítő csomópontokat a Verba-O szoftver is használja [9]
A GOST szabvány szerint a hash függvény eredménye egy 256 bites szám. A szabvány nem határozza meg, hogyan kell kiadni. A különböző megvalósítások eltérő kimeneti formátumokat használnak, ami a két közös S-boxhoz társulva tovább növeli a zavart.
A GOST R 34.11-94 az "A függelékben" [7] Little-endian számokkal működik . Sok implementáció (nevezetesen rhash , mhash könyvtár, openssl konzol segédprogram ) a kapott hash 32 bájtját hexadecimális jelöléssel adja ki, a memóriában való tárolás sorrendjében – először alacsony bájtok. Ezt az ábrázolást az indokolja, hogy olyan széles körben elterjedt algoritmusok hash összegeinek származtatására használják, mint: MD5 , SHA-1 , Tiger , Whirlpool stb.
GOST("Ez az üzenet, hossza = 32 bájt") = B1C466D37519B82E8319819FF32595E047A28CB6F83EFF1C6916A815A637FFFAA [7] szabványban megadott példákban az eredményül kapott hash egy 256 bites Little-endian szám hexadecimális reprezentációjaként van felírva. Ez fordított bájtsorrendet eredményez (a legjelentősebb bitek először). Ugyanezt a sorrendet használja különösen az OpenSSL könyvtár forrásaihoz tartozó gostsum program.
H=FAFF37A6 15A81669 1CFF3EF8 B68CA247 E09525F3 9F811983 2EB81975 D366C4B1Számítsuk ki az "Ez üzenet, hossza=32 bájt" üzenet hash-ét egy "teszt" paraméterkészlettel.
Mivel az üzenet hossza 256 bit, nincs szükség nullák hozzáadására. Hexadecimális formában ezt az üzenetet bájtok sorozata képviseli
54 68 69 73 20 69 73 20 6D 65 73 73 61 67 65 2C 20 6C 65 6E 67 74 68 3D 33 32 20 62 79 74 65 73Ezt a sorozatot Little-endian 256 bites számként kezeljük
M = 0x73657479622032333D6874676E656C202C6567617373656D2073692073696854Kiszámoljuk :
Kiszámoljuk :
L = 0x00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000100Kiszámoljuk :
= 0x73657479622032333D6874676E656C202C6567617373656D2073692073696854Egy adott Little-endian szám a gép memóriájában bájtok sorozataként jelenik meg:
B1 C4 66 D3 75 19 B8 2E 83 19 81 9F F3 25 95 E0 47 A2 8C B6 F8 3E FF 1C 69 16 A8 15 A6 37 FF FAAz "alsó bájtok először" rekordban van
GOST("Ez az üzenet, hossza = 32 bájt") = B1C466D37519B82E8319819FF32595E047A28CB6F83EFF1C6916A815A637FFFABig - endian ábrázolásban
M = 0x7365747962203035203D206874676E656C20736168206567617373656D206C616E696769726F2065687420657075577 H=0x0852F5623B89DD57AEB4781FE54DF14EEAFBC1350613763A0D770AA657BA1A47Ugyanez a példa a Little-endianban
GOST("Tegyük fel, hogy az eredeti üzenet hossza = 50 bájt") = 471ABA57A60A770D3A76130635C1FBEA4EF14DE51F78B4AE57DD893B62F55208Példák [10] ebben a részben az mhash , RHash , ReHash által használt little-endian reprezentációban adják meg .
Az üzenet legkisebb változása az esetek túlnyomó többségében egészen más hash-hez vezet a lavinahatás miatt . Például, ha a következő kifejezésben a kutyát fogaskerékre változtatja, a következőt kapja:
GOST(" A gyors barna róka átugrik a lusta kutyán ") = 77B7FA410C9AC58A25F49BCA7D0468C9296529315EACA76BD1A10F376D1F4294 GOST("A gyors barna róka átugrik a lusta fogaskeréken") = A3EBC4DAAAB78B0BE131DAB5737A7F67E602670D543521319150D2E14EEEC4452008- ban Ausztriából és Lengyelországból álló szakértőkből álló csapat olyan technikai sebezhetőséget fedezett fel, amely 223 -szorosára csökkentette az ütközések észlelését . [11] [12] Az ütközés megtalálásához szükséges műveletek száma tehát 2 105 , ami azonban jelenleg gyakorlatilag nem valósítható meg. Ütközéses támadás végrehajtásának a gyakorlatban csak a dokumentumok digitális aláírása esetén van értelme, sőt, ha a hacker az aláíratlan eredetit módosítani tudja.
A funkciót a GOST R 34.10-2001 szabvány szerinti aszimmetrikus titkosítási algoritmuson alapuló digitális aláírási rendszerek implementálásakor használják . Az orosz CIPF fejlesztők közössége megállapodott az interneten használt paraméterekről a GOST R 34.11-94-ben, lásd az RFC 4357 -et .
Hash függvények | |
---|---|
Általános rendeltetésű | |
Kriptográfia | |
Kulcsgenerálási funkciók | |
Csekkszám ( összehasonlítás ) | |
Hashes |
|