Алгоритъм за криптографско преобразуване съгласно ГОСТ 28147 89. Стандарт за криптиране на вътрешни данни

Алгоритъм за криптиране GOST 28147-89. Прост метод на подмяна. - Архив WASM.RU

„Докато си жив, не умирай, погледни този свят.
Много тук имат мъртва душа - те са мъртви вътре.
Но те ходят и се смеят, без да знаят, че не са,
Не бързай със смъртния си час “, каза ми тя.

Ария, „Високо там“

2.1 Мрежи на Feistel.
2.2 Блоков шифър GOST 28147-89

3.1 Ключова информация
3.2 Основната стъпка от крипто трансформацията

3.3 Основни цикли:32-Z, 32-R.

4.1 Изпълнение на основната стъпка от крипто трансформацията
4.2 Увеличаване на скоростта на алгоритъма
5. Изисквания за ключова информация
6. Списък на използваната литература
7. Благодарности.

Въведение.

Този документ е моят опит да опиша метод за просто заместване на алгоритъма за криптиране на GOST 28147-89 с най-простия, но въпреки това технически компетентен език. След като прочете първите шест точки, читателят ще даде своето мнение колко добре съм го направил.

За да има по -голяма полза от моята работа, препоръчвам ви да се въоръжите с произведенията на авторите, посочени в списъка на използваната литература. Препоръчва се също така калкулаторът да има функция за изчисляване на операцията. XORот четенето на статията предполага, че читателят е възнамерявал да изучи този алгоритъм за криптиране. Въпреки че е подходящ и за справка, но написах тази статия точно като тренировъчна.

Предварителна информация за блокови шифри.

Преди да започнем да разглеждаме алгоритъма, трябва да се запознаем с историята на създаването на този вид шифри. Алгоритъмът принадлежи към категорията блокови шифри, в чиято архитектура информацията е разделена на краен брой блокове, крайният естествено може да не е пълен. Процесът на криптиране се осъществява върху цели блокове, които образуват шифъра. Крайният блок, ако е непълен, се допълва с нещо (ще кажа за нюансите на попълването му по -долу) и се шифрова по същия начин като пълните блокове. Под шифър имам предвид резултата от функцията за криптиране, действаща върху определено количество данни, които потребителят е предоставил за криптиране. С други думи, шифърът е крайният резултат от криптирането.

Историята на развитието на блокови шифри е свързана с началото на 70 -те години, когато IBM, осъзнавайки необходимостта от защита на информацията при предаване на данни по компютърни комуникационни канали, се зае със собствена изследователска програма, посветена на защитата на информацията в електронните мрежи, включително криптография.

Група изследователи - разработчици от IBM, които започнаха да изследват системи за шифроване със симетрична схема за използване на ключ, се ръководи от д -р. Хорст Фейстел.

2.1 Мрежи на Feistel

Архитектурата на новия метод за криптиране, предложен от Фейстел в класическата литература, се нарича „Архитектурата на Фейстел“, но в момента в руската и чуждестранната литература се използва по -утвърден термин - „мрежата на Фейстел“ или NetWork на Фейстел. Впоследствие върху тази архитектура е изграден шифърът „Луцифер“ - който по -късно е публикуван и предизвиква нова вълна от интерес към криптографията като цяло.

Идеята за архитектурата на "мрежата на Feistel" е следната: входният поток от информация е разделен на блокове с размер n бита, където n е четно число. Всеки блок е разделен на две части-L и R, след това тези части се подават в итеративен блоков шифър, в който резултатът от j-тия етап се определя от резултата от предишния етап j-1! Това може да се илюстрира с пример:

Ориз. 1

Където функция А е основното действие на блоковия шифър. Това може да бъде просто действие, например операция XOR, или може да има по -сложна форма като поредица от поредица прости действия - добавяне по модул, смяна наляво, подмяна на елемент и т.н., взети заедно, тези прости действия образуват т. нар. - основната стъпка от крипто трансформацията.

Трябва да се отбележи, че ключовите елементи на операцията на функцията са доставката на ключови елементи и операцията XOR и от това колко добре е обмислена работата на тези операции, това говори за криптографската сила на шифъра като цяло.

За да бъде окончателно ясна идеята за мрежите на Feistel, помислете за най -простия случай, показан в ориз. 1, където във функция А - ще има операции „mod 2“ („xor“), но това най -простислучай, в по -сериозна ситуация, например скриване на информация от държавно значение, функция А може да е по -сложна (доколкото видях, функция А наистина е много сложна):

Първоначални данни:

L = 1110b, R = 0101, K = 1111b

Вземете шифър

1. (R + K) mod 2 4 = Smod, Smod = 0100b

2. (Smod + L) mod 2 = Sxor, Sxor = 1010b

3. L = R, R = Sxor

L = 0101b, R = 1010b

Нека обясним действията си:

1. Тази операция е допълнителен режим 2 4. На практика такава операция се свежда до просто събиране, където трябва да добавим две числа и да пренебрегнем прехвърлянето към 5 -тата цифра. Тъй като, ако поставим показатели над цифрите на двоичното представяне на число, ще има показател четири над петата цифра, нека да разгледаме фигурата по -долу, която показва действията на нашата операция:

Ориз. 2

Тук посочих експонентите със стрелка, както можете да видите, резултатът трябваше да бъде 10100, но тъй като прехвърлянето се игнорира по време на операцията mod 2 4, получаваме 0100.

2. Тази операция в литературата се нарича mod 2, на асемблерния език се изпълнява от командата XOR... Но по -правилното му име е mod 21. Без тази уникална операция едва ли е възможно да се изгради бърз, лесно приложим алгоритъм за криптиране и в същото време, така че той да е все още доста криптографски силен. Уникалността на тази операция се крие във факта, че тя самата е обратното! Например, ако числото A е XOR със числото B, в резултат на това ще получим B, в бъдеще е достатъчно да пререгистрираме числата B и C помежду си, за да получим предишната стойност на A!

В тази операция имаме 1010 с номера 1110 и 0100, за да се върнем 1110, достатъчно е да преувеличим числата 0100 и 1010! Повече подробности за тази операция можете да намерите в статията, която е приложена към сайта. www.wasm.ru, « Елементарно ръководство заCRC_ алгоритми за откриване на грешки»Авторът, който Рос Н. Уилямс... В тази работа има смисъл - „ 5. Двоична аритметика без дефис". В тази статия е описана операцията. xor!Възкликвам, защото в тази статия тази операция е така планирана, че читателят не само разбира как работи тази операция, той дори я стартира. вижте, чуйте и почувствайте!

3. Това действие е необходимо, за да могат първоначалните стойности да бъдат получени от криптирането по време на декриптирането.

2.2 Блоков шифър GOST 28147-89

Алгоритъмът за криптиране GOST 28147 - 89 принадлежи към категорията блокови шифри, работещи според архитектурата на балансирани мрежи на Feistel, където две части от избрания блок информация са с еднакъв размер. Алгоритъмът е разработен в дълбините на осмия отдел на КГБ, сега трансформиран във FAPSI и е закрепен като стандарт за криптиране на Руската федерация през 1989 г. при СССР.

За да работи този метод на алгоритъма, е необходимо информацията да се раздели на блокове с размер 64 бита. Генерирайте или въведете в системата за криптиране следната ключова информация: ключ и таблица за заместване. Изборът на ключ и таблица за заместване за криптиране трябва да се вземе много сериозно, т.к това е основата на сигурността на вашата информация. За информация относно това какви изисквания се налагат на ключа и таблицата със замествания вижте точка „Изисквания за ключова информация“.

При разглеждане на метода няма да се фокусираме върху това, защото Тази статия, както казах по -горе, е написана с цел да научи читателя как да криптира данни по метода на простата подмяна на този алгоритъм за криптиране, но определено ще засегнем този въпрос в края на статията.

Теоретичен минимум.

3.1 Ключова информация

Както казах по -горе, в криптирането на данни активно участват следните:

3.1.1. Ключът е последователност от осем елемента, всеки по 32 бита. По -нататък ще обозначаваме със символа K, а елементите, от които се състои, са k1, k2, k3, k4, k5, k6, k7, k8.

3.1.2 Таблица за заместване - матрица от осем реда и шестнадесет колони, по -долу - Hij. Всеки елемент в пресечната точка на ред i и колона j заема 4 бита.

3.2 Основна стъпка на крипто трансформацията

Основната стъпка в процеса на криптиране е - основната стъпка от крипто трансформацията. Това не е нищо повече от действие за криптиране на данни според определен алгоритъм, само разработчиците са въвели името твърде тромаво.

Преди да започне криптирането, блокът се разделя на две части L и R, по 32 бита всяка. Ключовият елемент се избира и едва след това тези две части от блока, ключовият елемент, таблицата за заместване, се въвеждат във функцията main step, резултатът от основната стъпка е една итерация на базовия цикъл, която ще бъде обсъдена в следващия параграф. Основната стъпка се състои от следното:

  1. Допълнителната част на блок R се сумира с ключовия елемент K mod 2 32. Описах подобна операция по -горе, тук същото нещо само показателят не е "4", а "32" - резултатът от тази операция ще бъде означен като Smod в бъдеще.
  2. Разделете получения по-рано резултат Smod на четири-битови елементи s7, s6, s5, s4, s3, s2, s1, s0 и го подайте към функцията за замяна. Замяната е следната: избира се елементът Smod - si, от самото начало започваме с най -ниския елемент и заместваме със стойността от таблицата на заместванията с i - реда и колоната, посочени от стойността на елемента s i. Преминаваме към елемента s i +1 и продължаваме по същия начин и продължаваме така, докато не променим стойността на последния елемент Smod - резултатът от тази операция ще бъде означен като, Ssimple.
  3. В тази операция изместваме циклично стойността на Ssimple наляво с 11 бита и получаваме Srol.
  4. Избираме втората част на L блока и го добавяме mod 2 със Srol, в крайна сметка имаме Sxor.
  5. На този етап частта от L блока става равна на стойността на R частта, а R частта от своя страна се инициализира с резултата от Sxor и на това функцията на основната стъпка е завършена!

3.3 Основни цикли: "32-З", "32-Р".

За да се шифрова информация, е необходимо да се раздели на блокове с размер 64 бита, разбира се, последният блок може да бъде по -малък от 64 бита. Този факт е ахилесовата пета на този метод за „лесна подмяна“. Тъй като добавянето му към 64 бита е много важна задача за увеличаване на криптографската сила на програмата за шифроване и до това чувствително място, ако тя присъства в информационния масив, но може и да не съществува (например файл от 512 байта! ), Човек трябва да се отнася с голяма отговорност!

След като разделите информацията на блокове, трябва да разделите ключа на елементи:

K = k1, k2, k3, k4, k5, k6, k7, k8

Самото криптиране се състои в използването на така наречените основни цикли. Които от своя страна включват n-тия брой основни стъпки на крипто-трансформацията.

Основните цикли са обозначени, как да го кажем: n - m. Където n е броят на основните стъпки на крипто трансформацията в базовия цикъл, а m е "типът" на базовия цикъл, т.е. за какво говорим, за "Z" криптиране или "R" криптиране на данни.

Основният цикъл на криптиране 32-З се състои от 32 основни стъпки на крипто-трансформация. Блок N и елемент от ключа K се подават във функцията, която изпълнява действията на стъпката, а първата стъпка се случва с k1, втората над резултата, получен с елемента k2 и т.н. по следната схема:

k1, k2, k3, k4, k5, k6, k7, k8, k1, k2, k3, k4, k5, k6, k7, k8, k1, k2, k3, k4, k5, k6, k7, k8k8, k7, k6, k5, k4, k3, k2, k1

Процесът на декриптиране за 32-P протича по подобен начин, но ключовите елементи са дадени в обратен ред:

k1, k2, k3, k4, k5, k6, k7, k8, k8, k7, k6, k5, k4, k3, k2, k1, k8, k7, k6, k5, k4, k3, k2, k1, k8, k7, k6, k5, k4, k3, k2, k1

Практикувайте.

4.1 Прилагане на основната стъпка от крипто трансформацията

След като се запознахме с теорията за това как да шифроваме информация, беше време да видим как шифроването работи на практика.

Първоначални данни:

Вземете блок информация N = 0102030405060708h, тук частите L и R са равни:

L = 01020304h, R = 05060708h, нека вземем ключа:

К = ‘ като28 zw37 q839 7342ui23 8e2t wqm2 ewp1 '(това са ASCII - кодове, за да видите шестнадесетичното представяне, можете да отворите този файл в режим на изглед в Total Commander, като натиснете клавиша F3"И тогава ключът" 3 "). В този ключ стойностите на елементите ще бъдат:

k1 = „as28“, k2 = „zw37“, k3 = „q839“, k4 = „7342“

k5 = „ui23“, k6 = „8e2t“, k7 = „wqm2“, k8 = „ewp1“

Вземете и следната таблица за заместване:

Ориз. 3

Тук редовете са номерирани от 0 до 7, колоните от 0 до F.

Предупреждение:Цялата информация, включително ключът с таблицата за заместване, се взема като пример за разглеждане на алгоритъма!

Използвайки "Първоначални данни", е необходимо да се получи резултатът от действието на основната стъпка на крипто трансформацията.

1. Изберете частта R = 05060708h и ключовия елемент k1 = ‘as28’, в шестнадесетична форма ключовият елемент ще изглежда така: 61733238h. Сега правим операцията за сумиране mod 2 32:

Ориз. 4

Както можете да видите на фигурата, нямахме трансфер в 33 бита, маркирани в червено и с експонента „ 32 ". И ако имахме други стойности на R и ключовия елемент, това можеше да се случи и тогава щяхме да го игнорираме и допълнително да използваме само битовете, маркирани в жълто.

Изпълнявам тази операция с командата на асемблера добавете:

; eax = R, ebx = 'as28'

Резултатът от тази операция Smod = 66793940h

2. Сега най -сложната операция, но ако се вгледате внимателно, тя вече не е толкова ужасна, колкото изглежда в началото. Нека си представим Smod, както следва:

Ориз. 5

Опитах се да визуализирам Smod елементите на фигурата, но така или иначе ще обясня:

s0 = 0, s1 = 4, s2 = 9 и т.н.

Сега, започвайки от най -ниския елемент s0, правим подмяната. Спомняйки си абзаца „ 3.2 Основна стъпка на крипто трансформацията»I - ред, s i - колона, потърсете стойността в нулевия ред и нулевата колона:

Фиг. 6

Така че текущата стойност на Smod не е 6679394 0 h и 6679394 5 з.

Пристъпваме към подмяна на s1, т.е. четири. Използвайки първия ред и четвъртата колона (s1 = 4!). Гледаме снимката:

Ориз. 7

Сега вече стойността на Smod, а не 667939 4 5h, 667939 2 5ч. Предполагам, че сега алгоритъмът за подмяна е ясен за читателя и мога да кажа, че след крайния резултат на Ssimple ще има следната стойност - 11e10325h.

Ще говоря за това как това е най -лесно да се приложи под формата на команди на асемблер по -късно в следващия параграф, след като говоря за разширената таблица.

  1. Трябва да изместим получената Ssimple стойност 11 бита наляво.

Ориз. осем

Както можете да видите, това действие е доста просто и се изпълнява от една команда на асемблерния език - роли резултатът от тази операция Srol е 0819288Fh.

4. Сега част L от нашия блок информация трябва да бъде XORed със стойността Srol. Взимам калкулатор от w2k sp4 и получавам Sxor = 091b2b8bh.

5. Това действие е окончателно и ние просто присвояваме, почистваме R, стойността на L частта и инициализираме L частта със стойността Sxor.

Краен резултат:

L = 091b2b8bh, R = 01020304h

4.2 Увеличаване на скоростта на алгоритъма

Сега нека поговорим за оптимизиране на алгоритъма за скорост. В процеса на реализиране на проект трябва да се има предвид, че програма, която работи с регистри по -често, отколкото с памет, работи най -бързо и тук тази преценка също е много важна, тъй като над един блок информация до 32 действия за криптиране!

Когато внедрих алгоритъма за криптиране в моята програма, направих следното:

1. Избрана част от блок L към регистъра eax и R към edx.

2. В регистъра esi, инициализиран с адреса на разширения ключ, повече за това по -долу.

3. В регистър ebx е присвоена стойността на адреса на разширената таблица на заместванията, повече за това по -долу

4. Прехвърли информацията по точки 1, 2, 3 към функцията на основния цикъл 32 - З или 32 - Р, в зависимост от ситуацията.

Ако погледнете блок -схемата на ключовите елементи в абзаца " Основни цикли: "32-З", "32-Р"", Тогава нашият ключ за базовия цикъл 32 - 3 може да бъде представен, както следва:

K 32-Z =

„As28“, „zw37“, „q839“, „7342“, „ui23“, „8e2t“, „wqm2“, „ewp1“,

„As28“, „zw37“, „q839“, „7342“, „ui23“, „8e2t“, „wqm2“, „ewp1“,

„Ewp1“, „wqm2“, „8e2t“, „ui23“, „7342“, „q839“, „zw37“, „as28“

Тези. от началото има k1, k2, k3, k4, k5, k6, k7, k8 - as28 ','zw37 ','q839 ',' 7342 ','ui23 ',' 8e2T ','wqm2 ','ewp1 'тази последователност се повтаря три пъти. Тогава елементите отиват в обратен ред, т.е.: k8, k7, k6, k5, k4, k3, k2, k1 - „Ewp1“, „wqm2“, „8e2t“, „ui23“, „7342“, „q839“, „zw37“, „as28“.

Предварително подредих елементите в масива в реда, в който трябва да бъдат въведени в 32 - Z. По този начин увеличих необходимата памет на ключ, но се спасих от някои процеси на мислене, от които нямах нужда, и увеличих скоростта на алгоритъм, за чрез намаляване на времето за достъп до паметта! Тук описах само ключа за 32 - З, за цикъл 32 - Р направих същото, но използвайки различна схема на подаване на елементи, която също описах в параграфа " Основни цикли: “32-Z”, “32-P».

Сега е моментът да опиша изпълнението на функцията за замяна, както обещах по -горе. Не бих могъл да опиша по -рано, защото това изисква въвеждането на нова концепция - разширена таблица за заместване. Не мога да ви обясня какво е. Вместо това ще ви го покажа, а вие сами формулирайте какво е това - разширена таблица със замествания?

Така че, за да разберем какво е разширена таблица за заместване, се нуждаем от таблица за заместване, например ще взема тази, показана на фиг. 3.

Например, трябваше да заменим номера 66793940h. Ще го представя така:

Ориз. девет

Сега, ако вземем елементите s1, s0, т.е. най -малко значителен байт, резултатът от функцията за замяна ще бъде 25h! След като прочетох статията на Андрей Винокуров, която цитирах в абзаца " Списък на използваната литература", Всъщност откривате, че ако вземете два реда, можете да получите масив, който ви позволява бързо да намерите заместващите елементи с помощта на командата на асемблера xlat.Казват, че може да се направи по друг начин по -бързо, но Андрей Винокуров е прекарал около четири години в проучване на бързи алгоритми за внедряване на ГОСТ! Не мисля, че трябва да преоткривате колелото, когато вече имате такова.

И така, за масива:

Нека вземем първите два реда нула и първия, да създадем масив от 256 байта. Сега наблюдаваме една особеност, че ако е необходимо да се трансформира 00h, тогава резултатът ще бъде 75h (въз основа на фиг. 3) - поставяме тази стойност в масива при отместване 00h. Взимаме стойността 01h, резултат от функцията за заместване 79h, поставяме я в масива при отместване 01 и така нататък до 0FFh, което ще ни даде 0FCh, което ще поставим в масива при отместване 0FFh. Така че получихме разширена таблица за заместване за първата група редове: първата и нулата. Но все още има три групи: втора страница 2, страница 3, трета страница 4, страница 5, четвърта страница 6, страница 7. Ние се справяме с тези три групи по същия начин, както с първата. Резултатът е разширена таблица за заместване!

Сега можем да внедрим алгоритъм, който ще извърши подмяната. За да направим това, ние вземаме изходните кодове, които Андрей Винокуров публикува на своята страница, вижте " Библиография».

lea ebx, extented_table_simple

mov eax, [поставете номера, който да бъде заменен]

добавете ebx, 100h; преминете към следващите два възела

под ебх, 300h; така че в бъдеще ebx сочи към таблицата

Сега още една функция, с предишните действия ние не само сменихме, но и изместихме числото с 8 бита наляво! Просто трябва да изместим числото с още 3 бита наляво:

и получаваме резултата от операцията rol eax, 11!

Не мога да добавя нищо повече към оптимизацията, единственото, което мога да подчертая, е това, което казах по -горе - използвайте регистрите по -често от достъпа до паметта. Мисля, че тези думи са само за начинаещи, опитни и без моите думи го разбират перфектно.

Изисквания за ключова информация.

Както е посочено в статията на Андрей Винокуров, ключът е избран според два критерия:

Критерият за равновероятното разпределение на битовете между стойностите 1 и 0. Обикновено критерият за равновероятното разпределение на битовете е критерият на Пирсън ("хи-квадрат").

Това означава ключ, по принцип всяко число може. Тоест, когато се формира следващият бит на ключа, вероятността за неговото инициализиране с единица или нула е 50/50!

Моля, обърнете внимание, че ключът се състои от осем елемента, всеки от 32 бита, така че има 32 * 8 = 256 бита в ключа и броят на възможните ключове е 2 256! Това не ви ли прави впечатление?

Критерий за серия.

Ако погледнем нашия ключ, който дадох в абзаца " 4.1 Прилагане на основната стъпка от крипто трансформацията», Тогава ще забележите, че следната нотация е валидна:

Ориз. десет

С една фраза, стойността на k 1 не трябва да се повтаря не в k 2, нито в друг елемент на ключа.

Тоест ключът, който сме избрали за разглеждане на алгоритъма за криптиране, напълно отговаря на двата горни критерия.

Сега за избора на таблицата със замествания:

Сега нека поговорим как да изберем правилната таблица за заместване. Основното изискване за избор на таблици за подмяна е явлението „неповторяемост“ на елементи, всеки от които е с размер 4 бита. Както видяхте по -горе, всеки ред от таблицата за заместване се състои от стойностите 0h, 1h, 2h, 3h,…, 0fh. Така че основното изискване е всеки ред да съдържа стойностите 0h, 1h, 2h, ..., 0fh и всяка такава стойност в едно копие. Например последователността:

1 2 3 4 5 6 7 8 9 A B C D E F

Той напълно отговаря на това изискване, но все пак! Не се препоръчва да избирате тази последователност като низ. Тъй като ако въведете стойност към входа на функция, която разчита на такъв низ, тогава ще получите същата стойност на изхода! Не ми вярвате? След това вземете числото 332DA43Fh и осем такива реда като таблица за заместване. Извършете операцията по подмяна и уверявам ви, изходът ще бъде номер 332DA43Fh! Тоест същото, което подадохте на входа на операцията! И това не е признак на добра форма в криптирането, нали?

Това беше едно изискване, следващият критерий казва, че - всеки бит от изходния блок трябва да бъде статистически независим от всеки бит от входния блок!

Как изглежда по -просто? И ето как например избрахме от горното число елемента s0 = 0Fh, 01111b. Вероятността сега да заменим първия бит с единица или нула е 0,5! Вероятността да заменим втория, третия и четвъртия бит, всеки бит, ние разглеждаме отделно, с единици или нули също е 0, 5. При избора на s1 = 0Eh, вероятността, че сме нулев бит, а това е "0" , ще бъде заменен с нула или единица също е равна на 0,5! По този начин, според този критерий, няма закономерност между подмяната на нулеви битове на елементи s0, s1! Да, можете да замените такива, но можете да замените и нули.

За да оцените таблицата по този критерий, можете да изградите таблица с коефициенти на корелация, изчислена по формулата:

Ако p = 1, тогава стойността на бита j на изхода е равна на стойността на бита i на входа за всякакви комбинации от битове на входа;

Ако p = -1, тогава стойността на бита j на изхода винаги е обратна на входния бит i;

Ако p = 0, тогава изходният бит j с еднаква вероятност приема стойностите 0 и 1 за всяка фиксирана стойност на входния бит i.

Да вземем един ред пример:

Нека го разделим на „компоненти“:

Нека изчислим един коефициент съгласно горната формула. За по -лесно разбиране как се прави това, ще обясня по -подробно:

Взимаме 0 -ия бит на 0 -то число (0) на входа и 0 -ия бит на 0 -то число на изхода (1), изпълняваме операцията 0 XOR 1 = 1.

Взимаме 0 -ия бит на 1 -во число (1) на входа и 0 -ия бит на 1 -во число на изхода (1), извършваме операцията 1 XOR 1 = 0.

Взимаме 0 -ия бит на 2 -ро число (0) на входа и 0 -ия бит на 2 -ри номер на изхода (0), изпълняваме операцията 0 XOR 0 = 0.

Взимаме 0 -ия бит на 3 -то число (1) на входа и 0 -ия бит на 3 -то число на изхода (1), извършваме операцията 1 XOR 1 = 0.

Провеждайки последователно XOR операции в тази последователност, преброяваме броя на всички ненулеви стойности, получаваме стойността 6. Следователно P 00 = 1- (6/2 4-1) = 0,25. Така се оказа, че стойността на бит 0 на изхода е равна на стойността на бит 0 на входа в 4 случая от 16;

Крайна таблица на коефициентите:

Както може да се види от таблицата на коефициентите на корелация, бит 3 на входа се инвертира спрямо бит 0 на изхода в 14 случая от 16, което е 87,5%.Това вече не е приемливо за нормалните системи за криптиране. Нека вземем друг пример за промяна:

Таблицата с коефициенти ще бъде следната (на кого не е мързеливо да се преизчислят)

Е, в тази таблица нещата са още по -лоши - битове 1 и 2 от групата остават непроменени! Cryptanalyst има къде да се обърне Вземайки предвид всички тези изисквания, беше намерено просто търсене ("челно") таблици за пермутации, съответстващи на посочената теория (днес - 1276 комбинации) Ето някои от тях:

09 0D 03 0E-06 02 05 08-0A 07 00 04-0C 01 0F 0B

00 05 0A 07-03 08 0F 0C-0E 0B 04 09-0D 06 01 02

06 0B 0F 00-0C 01 02 0D-08 07 09 04-05 0A 03 0E

04 0E 00 09-0B 01 0F 06-03 0D 07 0A-0C 02 08 05

04 02 08 0E-05 0F 03 09-0B 01 0D 07-0A 0C 06 00

07 03 09 0C-08 00 06 0F-0E 04 01 0A-0D 0B 02 05

06 0F 03 08-0D 04 0A 01-09 02 05 0C-00 0B 0E 07

0C 06 08 01-03 09 07 0E-0B 05 0F 02-04 0A 00 0D

04 0B 09 06-0E 01 00 0F-0A 05 03 0C-0D 02 07 08

00 0E 0F 01-07 08 09 06-04 0B 0A 05-03 0D 0C 02

0F 09 01 07-04 0A 08 06-0E 00 02 0C-05 03 0B 0D

0A 03 04 01-05 0C 0B 0E-08 06 0F 0D-07 09 00 02

0B 06 0F 01-04 0A 08 05-00 0D 0C 02-07 09 03 0E

0C 03 02 08-0D 06 0B 05-07 09 04 0F-0A 00 01 0E

02 0B 0F 04-09 00 06 0D-05 0E 01 08-0C 07 0A 03

Списък на използваната литература.

  1. Статия от Андрей Винокуров:

Алгоритъм за криптиране GOST 28147-89, неговото използване и изпълнение

за компютри на платформата Intel x86.

Съществуват и изходните кодове за внедряване на алгоритъма за криптиране.

  1. Статията на Хорст Фейстел:

Криптография и компютърна сигурност.

(може да се намери на същия адрес като предишната статия)

  1. Рос Н. Уилямс:

Елементарно ръководство за алгоритмите за откриване на грешки на CRC

Публикувано на сайта www.wasm.ru.

Благодарности.

Бих искал да изразя своята благодарност към всички посетители на форума www.wasm.ru. Но бих искал специално да благодаря на ChS, който понастоящем е известен като SteelRat, той ми помогна да разбера неща, които вероятно никога нямаше да разбера, както и помощ при писането на абзаца: „ Изисквания за ключова информация”, Основната част на този параграф е написана от него. Също така съм дълбоко благодарен на служителя на KSTU на името A.N. Туполев Аникин Игор Вячеславович и би било грех да не споменем Крис Касперски за факта, че той е и Володя / wasm.ru за неговите инструкции. О, и го получавам от него. Искам също да отбележа Sega-Zero / Callipso, но това ми донесе някаква математическа джунгла в съзнанието.

Може би това е всичко, което бих искал да ви кажа.

Ще бъда благодарен за критики или въпроси, свързани с тази статия или просто съвет. Моите данни за контакт: [защитен имейл], ICQ - 337310594.

С най -добри пожелания, Evil`s Interrupt.

P.S .: С тази статия не се опитах да надмина никого. Написано е с намерение, за да се улесни изучаването на ГОСТ и ако имате затруднения, това не означава, че съм виновен за това. Бъдете разумни и имайте търпение, всичко най -добро за вас!

„Докато си жив, не умирай, погледни този свят.
Много тук имат мъртва душа - те са мъртви вътре.
Но те ходят и се смеят, без да знаят, че не са,
Не бързай със смъртния си час “, каза ми тя.

Ария, „Високо там“

  1. Въведение
  1. Предварителна информация за блокови шифри

2.1 Мрежи на Feistel.
2.2 Блоков шифър GOST 28147-89

  1. Теоретичен минимум

3.1 Ключова информация
3.2 Основната стъпка от крипто трансформацията

3.3 Основни цикли:32-Z, 32-R.

  1. Практикувайте

4.1 Изпълнение на основната стъпка от крипто трансформацията
4.2 Увеличаване на скоростта на алгоритъма
5.
6. Списък на използваната литература
7. Благодарности.

Въведение.

Този документ е моят опит да опиша метод за просто заместване на алгоритъма за криптиране на GOST 28147-89 с най-простия, но въпреки това технически компетентен език. След като прочете първите шест точки, читателят ще даде своето мнение колко добре съм го направил.

За да има по -голяма полза от моята работа, препоръчвам ви да се въоръжите с произведенията на авторите, посочени в списъка на използваната литература. Препоръчва се също така калкулаторът да има функция за изчисляване на операцията. XORот четенето на статията предполага, че читателят е възнамерявал да изучи този алгоритъм за криптиране. Въпреки че е подходящ и за справка, но написах тази статия точно като тренировъчна.

Предварителна информация за блокови шифри.

Преди да започнем да разглеждаме алгоритъма, трябва да се запознаем с историята на създаването на този вид шифри. Алгоритъмът принадлежи към категорията блокови шифри, в чиято архитектура информацията е разделена на краен брой блокове, крайният естествено може да не е пълен. Процесът на криптиране се осъществява върху цели блокове, които образуват шифъра. Крайният блок, ако е непълен, се допълва с нещо (ще кажа за нюансите на попълването му по -долу) и се шифрова по същия начин като пълните блокове. Под шифър имам предвид резултата от функцията за криптиране, действаща върху определено количество данни, които потребителят е предоставил за криптиране. С други думи, шифърът е крайният резултат от криптирането.

Историята на развитието на блокови шифри е свързана с началото на 70 -те години, когато IBM, осъзнавайки необходимостта от защита на информацията при предаване на данни по компютърни комуникационни канали, се зае със собствена изследователска програма, посветена на защитата на информацията в електронните мрежи, включително криптография.

Група изследователи - разработчици от IBM, които започнаха да изследват системи за шифроване със симетрична схема за използване на ключ, се ръководи от д -р. Хорст Фейстел.

2.1 Мрежи на Feistel

Архитектурата на новия метод за шифроване, предложен от Фейстел в класическата литература, се нарича „Архитектурата на Фейстел“, но в момента в руската и чуждестранната литература се използва по -утвърден термин - „мрежата на Фейстел“ или NetWork на Фейстел. Впоследствие върху тази архитектура е изграден шифърът „Луцифер“ - който по -късно е публикуван и предизвиква нова вълна от интерес към криптографията като цяло.

Идеята за архитектурата на "мрежата на Feistel" е следната: входният поток от информация е разделен на блокове с размер n бита, където n е четно число. Всеки блок е разделен на две части-L и R, след това тези части се подават в итеративен блоков шифър, в който резултатът от j-тия етап се определя от резултата от предишния етап j-1! Това може да се илюстрира с пример:

Ориз. 1

Където функция А е основното действие на блоковия шифър. Това може да бъде просто действие, например операция XOR, или може да има по -сложна форма като поредица от поредица прости действия - добавяне по модул, смяна наляво, подмяна на елемент и т.н., взети заедно, тези прости действия образуват т. нар. - основната стъпка от крипто трансформацията.

Трябва да се отбележи, че ключовите елементи на операцията на функцията са доставката на ключови елементи и операцията XOR и от това колко добре е обмислена работата на тези операции, това говори за криптографската сила на шифъра като цяло.

За да бъде окончателно ясна идеята за мрежите на Feistel, помислете за най -простия случай, показан в ориз. 1, където във функция А - ще има операции „mod 2“ („xor“), но това най -простислучай, в по -сериозна ситуация, например скриване на информация от държавно значение, функция А може да е по -сложна (доколкото видях, функция А наистина е много сложна):

Първоначални данни:

L = 1110b, R = 0101, K = 1111b

Вземете шифър

  1. (R + K) mod 2 4 = Smod, Smod = 0100b
  2. (Smod + L) mod 2 = Sxor, Sxor = 1010b
  3. L = R, R = Sxor

L = 0101b, R = 1010b

Нека обясним действията си:

  1. Тази операция е добавяне на mod 2 4. На практика такава операция се свежда до просто събиране, където трябва да добавим две числа и да пренебрегнем прехвърлянето към 5 -тата цифра. Тъй като, ако поставим показатели над цифрите на двоичното представяне на число, ще има показател четири над петата цифра, нека да разгледаме фигурата по -долу, която показва действията на нашата операция:

Ориз. 2

Тук посочих експонентите със стрелка, както можете да видите, резултатът трябваше да бъде 10100, но тъй като прехвърлянето се игнорира по време на операцията mod 2 4, получаваме 0100.

  1. Тази операция в литературата се нарича mod 2, на асемблерния език се изпълнява от командата XOR... Но по -правилното му име е mod 21. Без тази уникална операция едва ли е възможно да се изгради бърз, лесно приложим алгоритъм за криптиране и в същото време, така че той да е все още доста криптографски силен. Уникалността на тази операция се крие във факта, че тя самата е обратното! Например, ако числото A е XOR със числото B, в резултат на това ще получим B, в бъдеще е достатъчно да пререгистрираме числата B и C помежду си, за да получим предишната стойност на A!

В тази операция имаме 1010 с номера 1110 и 0100, за да се върнем 1110, достатъчно е да преувеличим числата 0100 и 1010! Повече подробности за тази операция можете да намерите в статията, която е приложена към сайта. www.wasm.ru, « Елементарно ръководство заCRC_ алгоритми за откриване на грешки»Авторът, който Рос Н. Уилямс... В тази работа има смисъл - „ 5. Двоична аритметика без дефис". В тази статия е описана операцията. xor!Възкликвам, защото в тази статия тази операция е така планирана, че читателят не само разбира как работи тази операция, той дори я стартира. вижте, чуйте и почувствайте!

  1. Това действие е необходимо, за да може по време на декриптирането първоначалните стойности да бъдат получени от шифъра.

2.2 Блоков шифър GOST 28147-89

Алгоритъмът за криптиране GOST 28147 - 89 принадлежи към категорията блокови шифри, работещи според архитектурата на балансирани мрежи на Feistel, където две части от избрания блок информация са с еднакъв размер. Алгоритъмът е разработен в дълбините на осмия отдел на КГБ, сега трансформиран във FAPSI и е закрепен като стандарт за криптиране на Руската федерация през 1989 г. при СССР.

За да работи този метод на алгоритъма, е необходимо информацията да се раздели на блокове с размер 64 бита. Генерирайте или въведете в системата за криптиране следната ключова информация: ключ и таблица за заместване. Изборът на ключ и таблица за заместване за криптиране трябва да се вземе много сериозно, т.к това е основата на сигурността на вашата информация. За информация относно това какви изисквания се налагат на ключа и таблицата със замествания вижте точка „Изисквания за ключова информация“.

При разглеждане на метода няма да се фокусираме върху това, защото Тази статия, както казах по -горе, е написана с цел да научи читателя как да криптира данни по метода на простата подмяна на този алгоритъм за криптиране, но определено ще засегнем този въпрос в края на статията.

Теоретичен минимум.

3.1 Ключова информация

Както казах по -горе, в криптирането на данни активно участват следните:

3.1.1. Ключът е последователност от осем елемента, всеки по 32 бита. По -нататък ще обозначаваме със символа K, а елементите, от които се състои, са k1, k2, k3, k4, k5, k6, k7, k8.

3.1.2 Таблица за заместване - матрица от осем реда и шестнадесет колони, по -долу - Hij. Всеки елемент в пресечната точка на ред i и колона j заема 4 бита.

Основната стъпка в процеса на криптиране е - основната стъпка от крипто трансформацията. Това не е нищо повече от действие за криптиране на данни според определен алгоритъм, само разработчиците са въвели твърде тромавото име :).

Преди да започне криптирането, блокът се разделя на две части L и R, по 32 бита всяка. Ключовият елемент се избира и едва след това тези две части от блока, ключовият елемент, таблицата за заместване, се въвеждат във функцията main step, резултатът от основната стъпка е една итерация на базовия цикъл, която ще бъде обсъдена в следващия параграф. Основната стъпка се състои от следното:

  1. Допълнителната част на блок R се сумира с ключовия елемент K mod 2 32. Описах подобна операция по -горе, тук същото нещо само показателят не е "4", а "32" - резултатът от тази операция ще бъде означен като Smod в бъдеще.
  2. Разделете получения по-рано резултат Smod на четири-битови елементи s7, s6, s5, s4, s3, s2, s1, s0 и го подайте към функцията за замяна. Замяната е следната: избира се елементът Smod - si, започваме от началото с най -ниския елемент и заместваме със стойността от таблицата на заместванията с i - реда и колоната, посочени от стойността на елемента s i. Преминаваме към елемента s i +1 и продължаваме по същия начин и продължаваме така, докато не променим стойността на последния елемент Smod - резултатът от тази операция ще бъде означен като, Ssimple.
  3. В тази операция изместваме циклично стойността на Ssimple наляво с 11 бита и получаваме Srol.
  4. Избираме втората част на L блока и го добавяме mod 2 със Srol, в крайна сметка имаме Sxor.
  5. На този етап частта от L блока става равна на стойността на R частта, а R частта от своя страна се инициализира с резултата от Sxor и на това функцията на основната стъпка е завършена!

3.3 Основни цикли: "32-З", "32-Р".

За да се шифрова информация, е необходимо да се раздели на блокове с размер 64 бита, разбира се, последният блок може да бъде по -малък от 64 бита. Този факт е ахилесовата пета на този метод за „лесна подмяна“. Тъй като добавянето му към 64 бита е много важна задача за увеличаване на криптографската сила на програмата за шифроване и до това чувствително място, ако тя присъства в информационния масив, но може и да не съществува (например файл от 512 байта! ), Човек трябва да се отнася с голяма отговорност!

След като разделите информацията на блокове, трябва да разделите ключа на елементи:

K = k1, k2, k3, k4, k5, k6, k7, k8

Самото криптиране се състои в използването на така наречените основни цикли. Които от своя страна включват n-тия брой основни стъпки на крипто-трансформацията.

Основните цикли са обозначени, как да го кажем: n - m. Където n е броят на основните стъпки на крипто трансформацията в базовия цикъл, а m е "типът" на базовия цикъл, т.е. за какво говорим, за "Z" криптиране или "R" криптиране на данни.

Основният цикъл на криптиране 32-З се състои от 32 основни стъпки на крипто-трансформация. Блок N и елемент от ключа K се подават във функцията, която изпълнява действията на стъпката, а първата стъпка се случва с k1, втората над резултата, получен с елемента k2 и т.н. по следната схема:

k1, k2, k3, k4, k5, k6, k7, k8, k1, k2, k3, k4, k5, k6, k7, k8, k1, k2, k3, k4, k5, k6, k7, k8k8, k7, k6, k5, k4, k3, k2, k1

Процесът на декриптиране за 32-P протича по подобен начин, но ключовите елементи са дадени в обратен ред:

k1, k2, k3, k4, k5, k6, k7, k8, k8, k7, k6, k5, k4, k3, k2, k1, k8, k7, k6, k5, k4, k3, k2, k1, k8, k7, k6, k5, k4, k3, k2, k1

Практикувайте.

След като се запознахме с теорията за това как да шифроваме информация, беше време да видим как шифроването работи на практика.

Първоначални данни:

Вземете блок информация N = 0102030405060708h, тук частите L и R са равни:

L = 01020304h, R = 05060708h, нека вземем ключа:

К = ‘ като28 zw37 q839 7342ui23 8e2t wqm2 ewp1 '(това са ASCII - кодове, за да видите шестнадесетичното представяне, можете да отворите този файл в режим на изглед в Total Commander, като натиснете клавиша F3"И тогава ключът" 3 "). В този ключ стойностите на елементите ще бъдат:

k1 = „as28“, k2 = „zw37“, k3 = „q839“, k4 = „7342“

k5 = „ui23“, k6 = „8e2t“, k7 = „wqm2“, k8 = „ewp1“

Вземете и следната таблица за заместване:

Ориз. 3

Тук редовете са номерирани от 0 до 7, колоните от 0 до F.

Предупреждение:Цялата информация, включително ключът с таблицата за заместване, се взема като пример за разглеждане на алгоритъма!

Използвайки "Първоначални данни", е необходимо да се получи резултатът от действието на основната стъпка на крипто трансформацията.

  1. Избираме частта R = 05060708h и ключовия елемент k1 = 'as28', в шестнадесетична форма ключовият елемент ще изглежда така: 61733238h. Сега правим операцията за сумиране mod 2 32:

Ориз. 4

Както можете да видите на фигурата, нямахме трансфер в 33 бита, маркирани в червено и с експонента „ 32 ". И ако имахме други стойности на R и ключовия елемент, това можеше да се случи и тогава щяхме да го игнорираме и допълнително да използваме само битовете, маркирани в жълто.

Изпълнявам тази операция с командата на асемблера добавете:

; eax = R, ebx = 'as28'

Резултатът от тази операция Smod = 66793940h

  1. Сега най -сложната операция, но ако се вгледате внимателно, тя вече не е толкова ужасна, колкото изглежда в началото. Нека си представим Smod, както следва:

ФИГУРА НЕ ЗАПАЗЕН

Ориз. 5

Опитах се да визуализирам Smod елементите на фигурата, но така или иначе ще обясня:

s0 = 0, s1 = 4, s2 = 9 и т.н.

Сега, започвайки от най -ниския елемент s0, правим подмяната. Спомняйки си абзаца „ 3.2 Основна стъпка на крипто трансформацията»I - ред, s i - колона, потърсете стойността в нулевия ред и нулевата колона:

Фиг. 6

Така че текущата стойност на Smod не е 6679394 0 h и 6679394 5 з.

Пристъпваме към подмяна на s1, т.е. четири. Използвайки първия ред и четвъртата колона (s1 = 4!). Гледаме снимката:

Ориз. 7

Сега вече стойността на Smod, а не 667939 4 5h, 667939 2 5ч. Предполагам, че сега алгоритъмът за подмяна е ясен за читателя и мога да кажа, че след крайния резултат на Ssimple ще има следната стойност - 11e10325h.

Ще говоря за това как това е най -лесно да се приложи под формата на команди на асемблер по -късно в следващия параграф, след като говоря за разширената таблица.

  1. Трябва да изместим получената Ssimple стойност 11 бита наляво.

Ориз. осем

Както можете да видите, това действие е доста просто и се изпълнява от една команда на асемблерния език - роли резултатът от тази операция Srol е 0819288Fh.

  1. Сега остава L частта от нашия блок информация да бъде XORed със стойността Srol. Взимам калкулатор от w2k sp4 и получавам Sxor = 091b2b8bh.
  2. Това действие е окончателно и ние просто присвояваме, изчистваме R, стойността на L частта и инициализираме L частта със стойността Sxor.

Краен резултат:

L = 091b2b8bh, R = 01020304h

4.2 Увеличаване на скоростта на алгоритъма

Сега нека поговорим за оптимизиране на алгоритъма за скорост. В процеса на реализиране на проект трябва да се има предвид, че програма, която работи с регистри по -често, отколкото с памет, работи най -бързо и тук тази преценка също е много важна, тъй като над един блок информация до 32 действия за криптиране!

Когато внедрих алгоритъма за криптиране в моята програма, направих следното:

  1. Избрана част от блок L към регистъра eax и R към edx.
  2. В регистъра esi, инициализиран с адреса на разширения ключ, повече за това по -долу.
  3. В регистър ebx е присвоена стойността на адреса на разширената таблица със замествания, повече за това по -долу
  4. Прехвърли информацията от точки 1, 2, 3 към функцията на основния цикъл 32 - З или 32 - Р, в зависимост от ситуацията.

Ако погледнете блок -схемата на ключовите елементи в абзаца " Основни цикли: "32-З", "32-Р"", Тогава нашият ключ за базовия цикъл 32 - 3 може да бъде представен, както следва:

K 32-Z =

„As28“, „zw37“, „q839“, „7342“, „ui23“, „8e2t“, „wqm2“, „ewp1“,

„As28“, „zw37“, „q839“, „7342“, „ui23“, „8e2t“, „wqm2“, „ewp1“,

„Ewp1“, „wqm2“, „8e2t“, „ui23“, „7342“, „q839“, „zw37“, „as28“

Тези. от началото има k1, k2, k3, k4, k5, k6, k7, k8 - as28 ','zw37 ','q839 ',' 7342 ','ui23 ',' 8e2T ','wqm2 ','ewp1 'тази последователност се повтаря три пъти. Тогава елементите отиват в обратен ред, т.е.: k8, k7, k6, k5, k4, k3, k2, k1 - „Ewp1“, „wqm2“, „8e2t“, „ui23“, „7342“, „q839“, „zw37“, „as28“.

Предварително подредих елементите в масива в реда, в който трябва да бъдат въведени в 32 - Z. По този начин увеличих необходимата памет на ключ, но се спасих от някои процеси на мислене, от които нямах нужда, и увеличих скоростта на алгоритъм, за чрез намаляване на времето за достъп до паметта! Тук описах само ключа за 32 - З, за цикъл 32 - Р направих същото, но използвайки различна схема на подаване на елементи, която също описах в параграфа " Основни цикли: “32-Z”, “32-P».

Сега е моментът да опиша изпълнението на функцията за замяна, както обещах по -горе. Не бих могъл да опиша по -рано, защото това изисква въвеждането на нова концепция - разширена таблица за заместване. Не мога да ви обясня какво е. Вместо това ще ви го покажа, а вие сами формулирайте какво е това - разширена таблица със замествания?

Така че, за да разберем какво е разширена таблица за заместване, се нуждаем от таблица за заместване, например ще взема тази, показана на фиг. 3.

Например, трябваше да заменим номера 66793940h. Ще го представя така:

ФИГУРА НЕ ЗАПАЗЕН

Ориз. девет

Сега, ако вземем елементите s1, s0, т.е. най -малко значителен байт, резултатът от функцията за замяна ще бъде 25h! След като прочетох статията на Андрей Винокуров, която цитирах в абзаца " Списък на използваната литература", Всъщност откривате, че ако вземете два реда, можете да получите масив, който ви позволява бързо да намерите заместващите елементи с помощта на командата на асемблера xlat.Казват, че може да се направи по друг начин по -бързо, но Андрей Винокуров е прекарал около четири години в проучване на бързи алгоритми за внедряване на ГОСТ! Не мисля, че трябва да преоткривате колелото, когато вече имате такова.

И така, за масива:

Нека вземем първите два реда нула и първия, да създадем масив от 256 байта. Сега наблюдаваме една особеност, че ако е необходимо да се трансформира 00h, тогава резултатът ще бъде 75h (въз основа на фиг. 3) - поставяме тази стойност в масива при отместване 00h. Взимаме стойността 01h, резултат от функцията за заместване 79h, поставяме я в масива при отместване 01 и така нататък до 0FFh, което ще ни даде 0FCh, което ще поставим в масива при отместване 0FFh. Така че получихме разширена таблица за заместване за първата група редове: първата и нулата. Но все още има три групи: втора страница 2, страница 3, трета страница 4, страница 5, четвърта страница 6, страница 7. Ние се справяме с тези три групи по същия начин, както с първата. Резултатът е разширена таблица за заместване!

Сега можем да внедрим алгоритъм, който ще извърши подмяната. За да направим това, ние вземаме изходните кодове, които Андрей Винокуров публикува на своята страница, вижте " Библиография».

lea ebx, extented_table_simple

mov eax, [поставете номера, който да бъде заменен]

добавете ebx, 100h; преминете към следващите два възела

под ебх, 300h; така че в бъдеще ebx сочи към таблицата

Сега още една функция, с предишните действия ние не само сменихме, но и изместихме числото с 8 бита наляво! Просто трябва да изместим числото с още 3 бита наляво:

и получаваме резултата от операцията rol eax, 11!

Не мога да добавя нищо повече към оптимизацията, единственото, което мога да подчертая, е това, което казах по -горе - използвайте регистрите по -често от достъпа до паметта. Мисля, че тези думи са само за начинаещи, опитни и без моите думи разбират това перфектно :).

Изисквания за ключова информация.

Както е посочено в статията на Андрей Винокуров, ключът е избран според два критерия:

- критерий за равновероятно разпределение на битовете между стойности 1 и 0. Обикновено като критерий за равновероятно разпределение на битовете се използва критерият на Пирсън ("хи-квадрат").

Това означава ключ, по принцип всяко число може. Тоест, когато се формира следващият бит на ключа, вероятността за неговото инициализиране с единица или нула е 50/50!

Моля, обърнете внимание, че ключът се състои от осем елемента, всеки от 32 бита, така че има 32 * 8 = 256 бита в ключа и броят на възможните ключове е 2 256! Това не ви ли прави впечатление? 🙂

- сериен критерий.

Ако погледнем нашия ключ, който дадох в абзаца " 4.1 Прилагане на основната стъпка от крипто трансформацията», Тогава ще забележите, че следната нотация е валидна:

Ориз. десет

С една фраза, стойността на k 1 не трябва да се повтаря не в k 2, нито в друг елемент на ключа.

Тоест ключът, който сме избрали за разглеждане на алгоритъма за криптиране, напълно отговаря на двата горни критерия.

Сега за избора на таблицата със замествания:

Сега нека поговорим как да изберем правилната таблица за заместване. Основното изискване за избор на таблици за подмяна е явлението „неповторяемост“ на елементи, всеки от които е с размер 4 бита. Както видяхте по -горе, всеки ред от таблицата за заместване се състои от стойностите 0h, 1h, 2h, 3h,…, 0fh. Така че основното изискване е всеки ред да съдържа стойностите 0h, 1h, 2h, ..., 0fh и всяка такава стойност в едно копие. Например последователността:

1 2 3 4 5 6 7 8 9 A B C D E F

Той напълно отговаря на това изискване, но все пак! Не се препоръчва да избирате тази последователност като низ. Тъй като ако въведете стойност към входа на функция, която разчита на такъв низ, тогава ще получите същата стойност на изхода! Не ми вярвате? След това вземете числото 332DA43Fh и осем такива реда като таблица за заместване. Извършете операцията по подмяна и уверявам ви, изходът ще бъде номер 332DA43Fh! Тоест същото, което подадохте на входа на операцията! И това не е признак на добра форма в криптирането, нали? 🙂

Това беше едно изискване, следващият критерий казва, че - всеки бит от изходния блок трябва да бъде статистически независим от всеки бит от входния блок!

Как изглежда по -просто? И ето как например избрахме от горното число елемента s0 = 0Fh, 01111b. Вероятността сега да заменим първия бит с единица или нула е 0,5! Вероятността да заменим втория, третия и четвъртия бит, всеки бит, ние разглеждаме отделно, с единици или нули също е 0, 5. При избора на s1 = 0Eh, вероятността, че сме нулев бит, а това е "0" , ще бъде заменен с нула или единица също е равна на 0,5! По този начин, според този критерий, няма закономерност между подмяната на нулеви битове на елементи s0, s1! Да, можете да замените такива, но можете да замените и нули. 🙂

За да оцените таблицата по този критерий, можете да изградите таблица с коефициенти на корелация, изчислена по формулата:

- ако p = 1, тогава стойността на бита j на изхода е равна на стойността на бита i на входа за всякакви комбинации от битове на входа;

- ако p = -1, тогава стойността на бита j на изхода винаги е обратна на входния бит i;

- ако p = 0, тогава изходният бит j с еднаква вероятност приема стойностите 0 и 1 за всяка фиксирана стойност на входния бит i.

Да вземем един ред пример:

д Б 4 1 3 F 5 9 0 А E 7 6 8 2 ° С

Нека го разделим на „компоненти“:

Нека изчислим един коефициент съгласно горната формула. За по -лесно разбиране как се прави това, ще обясня по -подробно:

- вземаме 0 -ия бит на 0 -то число (0) на входа и 0 -ия бит на 0 -то число на изхода (1) извършваме операцията 0 XOR 1 = 1.

- взимаме 0 -ия бит на 1 -во число (1) на входа и 0 -ия бит на 1 -во число на изхода (1) извършваме операцията 1 XOR 1 = 0.

- приемаме 0 -ия бит на 2 -ро число (0) на входа и 0 -ия бит на 2 -ро число на изхода (0), извършваме операцията 0 XOR 0 = 0.

- взимаме 0 -ия бит на 3 -то число (1) на входа и 0 -ия бит на 3 -то число на изхода (1) извършваме операцията 1 XOR 1 = 0.

Провеждайки последователно XOR операции в тази последователност, преброяваме броя на всички ненулеви стойности, получаваме стойността 6. Следователно P 00 = 1- (6/2 4-1) = 0,25. Така се оказа, че стойността на бит 0 на изхода е равна на стойността на бит 0 на входа в 4 случая от 16;

Крайна таблица на коефициентите:

Таблицата с коефициенти ще бъде следната (на кого не е мързеливо да се преизчислят)

вход
Изход 0 1 2 3
0 -0,25 0,00 0,00 0,00
1 0,00 1,00 0,00 0,00
2 0,00 0,00 1,00 0,00
3 0,00 0,00 0,00 -0,50

Е, в тази таблица нещата са още по -лоши - битове 1 и 2 от групата остават непроменени! Криптоанализаторът има къде да се обърне 🙂 Като се вземат предвид всички тези изисквания, просто търсене („челно“) намери таблици за пермутации, съответстващи на посочената теория (днес - 1276 комбинации) Ето някои от тях:

09 0D 03 0E-06 02 05 08-0A 07 00 04-0C 01 0F 0B
00 05 0A 07-03 08 0F 0C-0E 0B 04 09-0D 06 01 02
06 0B 0F 00-0C 01 02 0D-08 07 09 04-05 0A 03 0E
04 0E 00 09-0B 01 0F 06-03 0D 07 0A-0C 02 08 05
04 02 08 0E-05 0F 03 09-0B 01 0D 07-0A 0C 06 00
07 03 09 0C-08 00 06 0F-0E 04 01 0A-0D 0B 02 05
06 0F 03 08-0D 04 0A 01-09 02 05 0C-00 0B 0E 07
0C 06 08 01-03 09 07 0E-0B 05 0F 02-04 0A 00 0D
04 0B 09 06-0E 01 00 0F-0A 05 03 0C-0D 02 07 08
00 0E 0F 01-07 08 09 06-04 0B 0A 05-03 0D 0C 02
0F 09 01 07-04 0A 08 06-0E 00 02 0C-05 03 0B 0D
0A 03 04 01-05 0C 0B 0E-08 06 0F 0D-07 09 00 02
0B 06 0F 01-04 0A 08 05-00 0D 0C 02-07 09 03 0E
0C 03 02 08-0D 06 0B 05-07 09 04 0F-0A 00 01 0E
02 0B 0F 04-09 00 06 0D-05 0E 01 08-0C 07 0A 03

Списък на използваната литература.

  1. Статия от Андрей Винокуров:

Алгоритъм за криптиране GOST 28147-89, неговото използване и изпълнение

за компютри на платформата Intel x86.

(може да се намери на: http://www.enlight.ru/crypto/frame.htm).

Съществуват и изходните кодове за внедряване на алгоритъма за криптиране.

  1. Статията на Хорст Фейстел:

Криптография и компютърна сигурност.

(може да се намери на същия адрес като предишната статия)

  1. Рос Н. Уилямс:

Елементарно ръководство за алгоритмите за откриване на грешки на CRC

Публикувано на сайта www.wasm.ru.

Благодарности.

Бих искал да изразя своята благодарност към всички посетители на форума www.wasm.ru. Но бих искал специално да благодаря на ChS, който понастоящем е известен като SteelRat, той ми помогна да разбера неща, които вероятно никога нямаше да разбера, както и помощ при писането на абзаца: „ Изисквания за ключова информация”, Основната част на този параграф е написана от него. Също така съм дълбоко благодарен на служителя на KSTU на името A.N. Туполев Аникин Игор Вячеславович и би било грех да не споменем Крис Касперски за факта, че той е и Володя / wasm.ru за неговите инструкции. О, и го получавам от него :). Искам също да отбележа Sega-Zero / Callipso, но това ми донесе някаква математическа джунгла в съзнанието.

Може би това е всичко, което бих искал да ви кажа.

Ще бъда благодарен за критики или въпроси, свързани с тази статия или просто съвет. Моите данни за контакт: [защитен имейл], ICQ - 337310594.

С най -добри пожелания, Evil`s Interrupt.

P.S .: С тази статия не се опитах да надмина никого. Написано е с намерение, за да се улесни изучаването на ГОСТ и ако имате затруднения, това не означава, че съм виновен за това. Бъдете разумни и имайте търпение, всичко най -добро за вас!

Този алгоритъм е задължителен за използване като алгоритъм за криптиране в държавни организации на Руската федерация и редица търговски такива.

Описание на алгоритъма

Диаграмата на алгоритъма е показана на фиг. 3.1. Както можете да видите, схемата на този алгоритъм е доста проста, което недвусмислено опростява неговата софтуерна или хардуерна реализация.

Алгоритъмът GOST 28147-89 криптира информация в блокове от 64 бита, които са разделени на два подблока по 32 бита (N1 и N2). Подблока N1 се обработва по определен начин, след което стойността му се добавя

със стойността на подблока N2 (добавянето се извършва по модул 2), след това подблоковете се разменят. Такава трансформация се извършва за определен брой кръгове: 16 или 32, в зависимост от начина на работа на алгоритъма (описан по -долу). Във всеки кръг се извършват следните операции:

1. Клавишно наслагване. Съдържанието на подблока / VI се добавя по модул 2 32 с част от ключа Kx.

Ключът за шифроване на алгоритъма GOST 28147-89 има размер 256 бита, а Kx е неговата 32-битова част, тоест 256-битовият ключ за шифроване е представен като конкатенация на 32-битови подключове (фиг. 3.2) :

SH ATI, AG2, YU, AG4, K5, KB, K7.

В процеса на криптиране се използва един от тези подключове, в зависимост от кръглия номер и режима на работа на алгоритъма.

Ориз. 3.1. Алгоритмична схема GOST 28147-

Ориз. 3.2. Ключ за криптиране на алгоритъм GOST 28147-89

2. Таблична подмяна. След налагане на ключа, подблокът / VI се разделя на 8 части по 4 бита, стойността на всеки от които се заменя индивидуално в съответствие с таблицата за подмяна за тази част от подблока. Кутиите за заместване (S-кутии) често се използват в съвременните алгоритми за криптиране, така че си струва да ги разгледаме по-подробно.

Табличната подмяна се използва по този начин: блок от данни с определено измерение (в този случай 4-битов) се подава към входа, чието числово представяне определя броя на изходната стойност. Например, имаме S-box със следната форма:

4, 11, 2, 14, 15, 0, 8, 13, 3, 12, 9, 7, 5, 10, 6, 1.

Нека 4-битов блок "0100" дойде на входа, тоест стойността 4. Според таблицата изходната стойност ще бъде 15, т.е. "1111" (0 се заменя с 4, 1 се заменя с 11, стойността на 2 не се променя и т.н.).

Както можете да видите, схемата на алгоритъма е много проста, което означава, че най -големият товар за криптиране на данни пада върху подменящите таблици. За съжаление алгоритъмът има свойството, че има „слаби“ таблици за заместване, при използване на които алгоритъмът може да бъде разкрит чрез криптоаналитични методи. Слабите включват например таблица, в която изходът е равен на входа:

0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15.

3. Побитово циклично ляво изместване с 11 бита.

Режими на работа с алгоритъм

Алгоритъмът GOST 28147-89 има 4 режима на работа:

□ прост режим на подмяна;

Mode гама режим;

P гама режим с обратна връзка;

□ начин на производство на симулатори.

Тези режими са малко по -различни от общоприетите (описани в раздел 1.4), така че си струва да ги разгледаме по -подробно.

Тези режими имат различни цели, но използват същата трансформация на криптиране, описана по -горе.

Лесен режим на подмяна

В режима на проста замяна, 32-те кръга, описани по-горе, се изпълняват просто за криптиране на всеки 64-битов блок информация. 32-битовите подключове се използват в следната последователност:

□ KO, Kl, K2, KZ, K4, K5, Kb, AG7, KO, ATI и др. - в кръгове от 1 до 24;

□ K1, Kb, K5, K4, KZ, K2, K \, KO - в кръгове от 25 -ти до 32 -и.

Декриптирането в режима на проста замяна се извършва по абсолютно същия начин, но с малко различна последователност от подключове:

□ KO, K \, K2, KZ, K4, K5, Kb, KP - в кръгове от 1 до 8;

□ KP, Kb, K5, K4, KZ, K2, K \, KO, K1, Kb и др. - в кръгове от 9 -ти до 32 -и.

Подобно на стандартния режим на ЕЦБ, поради отделното шифроване на блокове, простият режим на замяна е силно обезкуражен да криптира самите данни; трябва да се използва само за криптиране на други ключове за криптиране в схеми с много ключове.

Гама режим

В гама режим (фиг. 3.3) всеки блок от открит текст се добавя по битове по модул 2 с 64-битов шифров гама блок. Гама на шифър е специална последователност, която се генерира с помощта на описаните по -горе трансформации, както следва:

1. В регистрите N1 и N2 се изписва първоначалното им запълване-64-битова стойност, наречена "синхро-пакет" (синхро-пакетът на практика е аналог на вектора за инициализация в режимите CBC, CFB и OFB).

2. Криптирането на съдържанието на регистри / VI и N2 (в случая - синхронизиране на съобщения) се извършва в прост режим на подмяна.

3. Съдържанието на N1 се добавя по модул (2 32 - 1) с константата CI = 2 24 + 2 16 + 2 8 + 4, резултатът от добавянето се записва в / VI регистъра.

4. Съдържанието на N2 се добавя по модул 2 с константата C2 = 2 24 + 2 16 + 2 8 +1, резултатът от добавянето се записва в регистър N2.

5. Съдържанието на регистрите / VI и N2 се извежда като 64-битов шифров гама блок (т.е. в този случай / VI и N2 образуват първия гама блок).

6. Ако е необходим следващият гама блок (т.е. трябва да продължите криптирането или декриптирането), се връщате към стъпка 2.

За декриптиране гамата се генерира по подобен начин, след което операцията XOR отново се прилага към шифрования текст и гама битовете.

За да генерира една и съща гама от шифър, потребителят, който декриптира криптограмата, трябва да има същия ключ и същата стойност на синхронно съобщение, които са били използвани за криптиране на информацията. В противен случай няма да е възможно да получите оригиналния текст от шифрования.

В повечето реализации на алгоритъма GOST 28147-89 съобщението за синхронизиране не е таен елемент, но съобщението за синхронизиране може да бъде също толкова тайно, колкото и ключът за шифроване. В този случай можем да приемем, че ефективната дължина на ключа на алгоритъма (256 бита) се увеличава с още 64 бита на съобщението за синхронизиране, което може да се разглежда като допълнителен ключов елемент.

Гама режим с обратна връзка

В гама режим с обратна връзка, като запълването на регистрите / VI и L / 2, започвайки от 2 -ри блок, не се използва предишният гама блок, а резултатът от криптиране на предишния блок от обикновен текст (фиг. 3.4) . Първият блок в този режим се генерира напълно подобно на предишния.

Ориз. 3.4. Генериране на шифрова гама в гама режим с обратна връзка

Начин на производство на симулатор

Префиксът е криптографска контролна сума, изчислена с помощта на ключ за шифроване, за да се провери целостта на съобщенията. За да го изчислите, има специален режим на алгоритъма GOST 28147-89.

Генерирането на симулатор се извършва, както следва:

1. Първият 64-битов блок информация, за който се изчислява префиксът, се записва в регистрите N1 и N2 и се шифрова в намален режим на проста замяна, при който се извършват първите 16 кръга от 32.

2. Полученият резултат се сумира по модул 2 със следващия блок информация, като резултатът се съхранява в N1 и N2.

3. M и N2 се криптират отново в намален режим на проста подмяна и така до последния блок информация.

Имитатор е 64-битовото получено съдържание на регистри N1 и N2 или част от тях. Използва се най-често използваният 32-битов префикс, тоест половината от съдържанието на регистъра. Това е достатъчно, тъй като, както всяка контролна сума, симулаторът е предназначен основно за защита срещу случайно изкривяване на информацията. За да се предпазят от умишлена промяна на данните, се използват други криптографски методи - преди всичко електронен цифров подпис (виж раздел 1.1).

Имитаторът се използва, както следва:

1. При криптиране на всяка информация се изчислява и изпраща префикс на открит текст заедно с шифровия текст.

2. След декриптиране префиксът се изчислява отново и се сравнява с изпратения.

3. Ако изчислените и изпратените префикси не съвпадат - шифровият текст е изкривен по време на предаването или са използвани неправилни ключове по време на декриптирането.

Префиксът е особено полезен за проверка на правилното декриптиране на ключова информация при използване на схеми с много ключове.

Имитатор е някакъв аналог на кода за удостоверяване на MAC съобщение, изчислен в режим CBC; разликата е, че съобщението за синхронизиране не се използва при изчисляването на префикса, докато векторът за инициализация се използва при изчисляването на MAC.

Криптографска сила на алгоритъма

През 1994 г. описанието на алгоритъма GOST 28147-89 е преведено на английски и публикувано; след това започнаха да се появяват резултатите от неговия анализ, извършен от чуждестранни експерти; обаче за дълъг период от време не са установени приближения към осъществими.

Length голяма дължина на ключа - 256 бита; заедно със съобщението за секретна синхронизация, ефективната дължина на ключа се увеличава до 320 бита;

□ 32 кръга трансформации; след 8 кръга се постига пълният ефект на разпръскване на входните данни: промяната в един бит от блока с открит текст ще засегне всички битове на блока с шифровия текст и обратно, тоест има многократна граница на сигурност.

Помислете за резултатите от криптоанализа на алгоритъма GOST 28147-89.

Анализ на заместващи таблици

Тъй като таблиците за заместване не са дадени в стандарта, редица произведения (например в) предполагат, че "компетентна организация" може да изготви както "добри", така и "лоши" таблици за заместване. Известният експерт Брус Шнайер обаче нарича подобни предположения „слухове“. Ясно е, че криптографската сила на алгоритъма до голяма степен зависи от свойствата на използваните заместващи таблици; съответно има слаби заместващи таблици (вижте пример по -горе), чието използване може да опрости атаката срещу алгоритъма. Независимо от това, възможността за използване на различни таблици за заместване изглежда като много достойна идея, в полза на която могат да бъдат цитирани два факта от историята на стандарта за шифроване DES (вижте раздел 3.15 за подробности):

□ атаките, използващи както линейна, така и диференциална криптоанализа на алгоритъма DES, използват специфични характеристики на заместващи таблици; когато се използват други таблици, криптоанализът ще трябва да започне отначало;

□ са направени опити за укрепване на DES срещу линейна и диференциална криптоанализа чрез използване на по -стабилни таблици за заместване; такива таблици, които наистина са по -стабилни, бяха предложени например в алгоритъма s 5 DES; но, уви, беше невъзможно да се замени DES с s 5 DES, тъй като заменящите таблици са строго определени в стандарта, съответно, изпълнението на алгоритъма вероятно не поддържа възможността за промяна на таблици на други.

В редица произведения (например и и) погрешно се заключава, че тайните таблици на заместванията на алгоритъма GOST 28147-89 могат да бъдат част от ключа и да увеличат неговата ефективна дължина (което е незначително, тъй като алгоритъмът има много голям 256-битов ключ). Работата обаче доказа, че тайните таблици за заместване могат да бъдат изчислени чрез следната атака, която може да се приложи на практика:

1. Нулевият ключ е зададен и се извършва търсенето на „нулевия вектор“, тоест стойностите z = / (0), където / () е функцията на кръга на алгоритъма. Този етап отнема около 2 операции за шифроване.

2. Използвайки нулевия вектор, се изчисляват стойностите на заместващите таблици, което отнема не повече от 2 11 операции.

Промени на алгоритъма и техния анализ

Работата извърши криптоанализ на модификации на алгоритъма GOST 28147-89:

Algorith алгоритъмът GOST-H, при който по отношение на оригиналния алгоритъм се променя редът на използване на подключовете, а именно в кръгове 25 до 32 подключовете се използват в директен ред, тоест по същия начин, както в предишните кръгове на алгоритъма;

□ 20-кръгъл алгоритъм GOST®, който използва XOR за въвеждане вместо добавяне по модул 32.

Въз основа на резултатите от анализа беше заключено, че GOST-H и GOST © са по-слаби от оригиналния алгоритъм GOST 28147-89, тъй като и двата имат класове слаби ключове. Заслужава да се отбележи, че в частта на криптоанализата на GOST © работата повтаря дума по дума раздела, посветен на криптоанализа на алгоритъма GOST 28147-89, публикуван през 2000 г. от добре позната работа (без препратки към оригинала) . Това поставя под съмнение професионализма на авторите на произведението и останалите резултати от него.

В работата е предложена много интересна модификация на алгоритъма: таблиците S \ ... Ss трябва да са различни; във всеки кръг на алгоритъма те трябва да бъдат пренаредени според определен закон. Тази пермутация може да зависи от ключа за шифроване, или може да бъде тайна (т.е. може да бъде част от ключа за шифроване, по-голям от оригиналния 256-битов ключ). И двата варианта, според техните автори, значително увеличават устойчивостта на алгоритъма срещу линейна и диференциална криптоанализа.

И още една модификация, свързана с таблици за заместване, е дадена в работата, която анализира един от възможните методи за изчисляване на таблици за заместване въз основа на ключа за шифроване. Авторите на работата стигат до извода, че такава зависимост отслабва алгоритъма, тъй като води до наличието на слаби ключове и до някои потенциални уязвимости на алгоритъма.

Пълен анализ на алгоритъма

Има атаки срещу пълния GOST 28147-89 без никакви модификации. Една от първите отворени статии, анализиращи алгоритъма, добре позната статия, е посветена на атаки, които използват слабостите на ключовата процедура за разширяване на редица добре познати алгоритми за криптиране. По-специално, пълният алгоритъм на GOST 28147-89 може да бъде нарушен с помощта на диференциална криптоанализа върху свързани ключове, но само ако се използват слаби заместителни таблици. Вариантът от 24 кръга на алгоритъма (при който липсват първите 8 кръга) се отваря по същия начин за всякакви таблици за заместване, но силните таблици за заместване (например показани в в) правят такава атака напълно непрактична.

Вътрешните учени А. Г. Ростовцев и Е. Б. Маховенко през 2001 г. в своята работа предлагат фундаментално нов метод за криптоанализ (според авторите той е много по -ефективен от линейния и диференциалния криптоанализ) чрез формиране на обективна функция от известен обикновен текст, съответстващ на него шифротекст и желаната ключова стойност и намирането на нейния екстремум, съответстващ на истинската ключова стойност. Те също така откриха голям клас слаби ключове на алгоритъма GOST 28147-89, които позволяват отваряне на алгоритъма, като се използват само 4 избрани обикновени текста и съответните шифровани текстове с доста ниска сложност. Криптоанализът на алгоритъма е продължен в работата.

През 2004 г. група специалисти от Корея предложи атака, с която чрез диференциална криптоанализа на свързани ключове е възможно да се получат с вероятност от 91.7% 12 бита от секретния ключ. Атаката изисква 2 35 избрани открити текста и 2 36 операции за шифроване. Както можете да видите, тази атака е практически безполезна за истинска атака на алгоритъма.

Алгоритъм GOST 28147-89 и шифър "Magma" (GOST R 34.12-2015)

Обща схема на алгоритъма. Алгоритъмът, описан от ГОСТ 28147-89 „Системи за обработка на информация. Криптографска защита. Алгоритъм за криптографско преобразуване “, е вътрешен стандарт за симетрично криптиране (преди 1 януари 2016 г.) и е задължителен за внедряване в сертифицирани инструменти за защита на криптографската информация, използвани в държавни информационни системи, а в някои случаи и в търговски системи. Сертифицирането на средства за криптографска защита на информацията се изисква за защита на информацията, съставляваща държавна тайна на Руската федерация, и информация, чиято поверителност се изисква да се гарантира в съответствие с действащото законодателство. Също така в Руската федерация се препоръчва използването на алгоритъма GOST 28147-89 за защита на банковите информационни системи.

Алгоритъмът GOST 28147-89 (фиг. 2.21) се основава на схемата на Feistel и криптира информацията в блокове от 64 бита, които са разделени на два подблока по 32 бита (I, и R).Подблокиране R,се обработва от функцията за кръгла трансформация, след което нейната стойност се добавя към стойността на подблока Lj, след което подблоковете се разменят. Алгоритъмът има 16 или 32 кръга, в зависимост от режима на криптиране (изчисляване на вмъкването на имитация или други режими на криптиране).

Ориз. 2.21.

Във всеки кръг на алгоритъма се извършват следните трансформации.

1. Наслояване на ключове.Съдържание на субблока R iдобавен модул 2 32 с кръгъл ключ K. Kjе 32-битовата част на оригиналния ключ, използвана като кръгла. Алгоритъмът GOST 28147-89 ns използва процедура за разширяване на ключ, оригиналният 256-битов ключ за шифроване е представен като конкатенация (конкатенация) на осем 32-битови подключета (фиг. 2.22): K 0, K (, K t K, K A, K 5, K 6, K 7.

Процесът на криптиране използва един от тези подключове. ДА СЕ

От 1 до 24 кръг - в директен ред:

От 25 -ия до 32 -ия кръг - в обратен ред:

Ориз. 2.22. Структурата на ключа за криптиране на алгоритъма GOST 28147-89

2. Таблична подмяна.След като ключът е приложен, подблокът R iе разделен на осем части, но 4 бита, стойността на всяка от които се заменя индивидуално в съответствие с таблицата за подмяна (S-box). Използват се общо осем S -кутии - S 0, S, S 2, S 3, S 4, S 5, S 6, S 7. Всеки S-блок на алгоритъма GOST 28147-89 е вектор (едноизмерен масив) с ^ елементи номерирани от 0 до 15. Стойностите на S-блока са 4-битови числа; цели числа от 0 до 15.

Елемент се взема от таблицата S-box, чийто пореден номер съвпада със стойността, която е дошла до входа за заместване.

Пример 2.6.

Нека има S-блок със следната форма:

Нека на входа на тази S-кутия бъде дадена стойност 0100 2 = 4. Изходът на S-кутията ще бъде 4-тият елемент от таблицата за заместване, т.е. 15 = 1111 2 (елементите са номерирани, започвайки от нула).

заместващите лица не са дефинирани от стандарта, както се прави например в DES шифъра. Сменяемите стойности на таблиците за заместване правят криптоанализа на алгоритъма много по -труден. В същото време здравината на алгоритъма значително зависи от правилния им избор.

За съжаление, алгоритъмът GOST 28147-89 има „слаби“ таблици за заместване, при използване на които алгоритъмът може да бъде доста лесно разкрит чрез криптоаналитични методи. Сред "слабите" е например тривиална таблица със замествания, в която входът е равен на изхода (таблица 2.16).

Таблица 2.16

Пример за слаба S-кутия

Смята се, че специфичните стойности на заместващите таблици трябва да се пазят в тайна и са дългосрочен ключов елемент, т.е. са валидни за много по -дълъг период от отделните ключове. Тайните стойности на подменящите таблици обаче не са част от ключа и не могат да увеличат ефективната му дължина.

Всъщност тайните таблици за заместване могат да бъдат изчислени чрез следната атака, която може да се приложи на практика:

  • се задава нулев ключ и се извършва търсене на "нулев вектор", т.е. смисъл z = F ( 0), където F -функция на кръгла трансформация на алгоритъма. Това изисква около 2 32 тестови операции за криптиране;
  • използвайки нулевия вектор, се изчисляват стойностите на заместващите таблици, което отнема не повече от 2 11 операции.

Въпреки това, дори ако поверителността на таблиците за заместване е нарушена, силата на шифъра остава изключително висока и не пада под допустимата граница.

Предполага се също, че заместващите таблици са общи за всички възли за криптиране в една и съща криптографска система за защита.

Подобряването на структурата на S-кутиите е един от най-интензивно изследваните проблеми в областта на симетричните блокови шифри. По принцип се изисква всички промени във входовете на S-кутиите да се разпръснат случаенпривидно промяна на изхода. От една страна, колкото по-големи са S-кутиите, толкова по-устойчив е алгоритъмът към методите на линейна и диференциална криптоанализа. От друга страна, голяма маса за подмяна е по -трудна за проектиране.

В съвременните алгоритми S-кутиите обикновено са вектор (едноизмерен масив), съдържащ 2 "t-битови елементи. Блоковият вход дефинира номера на елемента, чиято стойност служи като изход на S-блока.

За проектирането на S-кутии са изложени редица критерии. Таблицата за заместване трябва да отговаря на:

  • строг лавинен критерий;
  • критерий за независимост на бита;
  • изискване за нелинейност от входните стойности.

За да се изпълни последното изискване, беше предложено да се посочи линейна комбинация iбитове ( i = 1, ..., T)стойности на таблицата за заместване огънати функции(eng, огънат -отклоняващи се, в случая - от линейни функции). Наклонените функции образуват специален клас булеви функции, характеризиращи се с най -високия клас на нелинейност и съответствие със строгия лавинен критерий.

В някои произведения за S-кутии се предлага да се провери изпълнението на гарантирания лавинен ефект от ред y-когато се промени един входен бит, се променят поне изходните битове на S-кутията. Свойството на гарантиран лавинен ефект от порядъка на y от 2 до 5 осигурява достатъчно добри дифузионни характеристики на S-кутии за всеки алгоритъм за криптиране.

При проектирането на достатъчно големи заместващи таблици могат да се използват следните подходи:

  • случаен подбор (за малки S-кутии това може да доведе до създаване на слаби таблици за заместване);
  • случаен подбор, последван от проверка за съответствие с различни критерии и отхвърляне на слаби S-кутии;
  • ръчен подбор (твърде трудоемък за големи S-блокове);
  • математически подход, например генериране с помощта на огънати функции (този подход се използва в алгоритъма CAST).

Може да се предложи следната процедура за проектиране на отделни S-блокове по алгоритъма GOST 28147-89:

  • всяка S-кутия може да бъде описана с четири логически функции, всяка от функциите трябва да има четири логически аргумента;
  • тези функции трябва да бъдат достатъчно сложни. Това изискване за сложност не може да бъде официално изразено, но като необходимо условие може да се изисква съответните логически функции, написани в минималната форма (т.е. с минимално възможна дължина на израза), използващи основни логически операции, да не бъдат по -къси от определена необходима стойност;
  • отделни функции, дори използвани в различни таблици за заместване, трябва да са достатъчно различни една от друга.

През 2011 г. беше предложена нова атака „рефлексивна среща в средата“, която леко намалява съпротивлението на GOST 28147-89 (от 2256 на 2225). Най-добрият резултат от криптоанализа на алгоритъма от 2012 г. намалява силата му до 2 192, което изисква сравнително голям размер на шифротекст и обем предварително формирани данни. Въпреки предложените атаки, GOST 28147-89 остава практически стабилен на сегашното ниво на развитие на компютърните технологии.

Код "Магма" (ГОСТ R 34.12-2015).Стандартът GOST 28147-89 е в сила в Русия повече от 25 години. През това време той показа достатъчна издръжливост и добра ефективност на софтуерни и хардуерни реализации, включително тези на устройства с ниски ресурси. Въпреки че са предложени криптоаналитични атаки, които намаляват оценките за неговата устойчивост (най -добрата е до 2 192), те далеч не са осъществими. Затова беше решено да се включи алгоритъм GOST 28147-89 в новоразработения стандарт за симетрично криптиране.

В магазина за 2015 г. бяха приети два нови национални криптографски стандарта: GOST R 34.12-2015 „Информационни технологии. Защита на криптографска информация. Блокови шифри "и ГОСТ R 34.13-2015" Информационни технологии. Защита на криптографска информация. Режими на работа на блокови шифри “, които влизат в сила от 1 януари 2016 г.

Стандартът GOST R 34.12-2015 съдържа описание на две блокови шифри с дължина на блока 128 и 64 бита. Шифрът GOST 28147-89 с фиксирани нелинейни заместващи блокове е включен в новия GOST R 34.12-2015 като 64-битов шифър, наречен "Magma".

По -долу са подменените блокове, фиксирани в стандарта:

Наборът от S-кутии, даден в стандарта, осигурява най-добрите характеристики, които определят устойчивостта на криптоалгоритъма към диференциален и линеен криптоанализ.

Според техническия комитет по стандартизация "Криптографска защита на информацията" (TC 26), фиксирането на блокове за нелинейно заместване ще направи алгоритъма на GOST 28147-89 по-унифициран и ще помогне да се премахне използването на "слаби" блокове за нелинейно заместване. Освен това фиксирането в стандарта на всички дългосрочни параметри на шифъра отговаря на приетата международна практика. Новият стандарт GOST R 34.12-2015 е терминологически и концептуално свързан с международните стандарти ISO / IEC 10116 „Информационни технологии. Методи за сигурност. Режими на работа за "-битни блокови шифри" (ISO / IEC 10116: 2006 Информационни технологии - Техники за сигурност - Режими на работа за n -битов блоков шифър) и серия ISO / IEC 18033 "Информационни технологии. Методи и средства за осигуряване на безопасност. Алгоритми за шифроване ": ISO / IEC 18033-1: 2005" Част 1. Общи "(ISO / IEC 18033-1: 2005 Информационни технологии - Техники за сигурност - Алгоритми за шифроване - Част 1: Общи) и ISO / IEC 18033-3: 2010 „Част 3. Блокови шифри“ (ISO / IEC 18033-3: 2010 (Информационни технологии - Техники за сигурност - Алгоритми за шифроване - Част 3: Блокови шифри)).

Стандартът GOST P 34.12-2015 включва и нов блоков шифър ("Скакалец") с размер на блока 128 бита. Очаква се този шифър да бъде стабилен срещу всички известни днес блокови атаки.

Режимите на работа на блокови шифри (проста подмяна, гама, гама с обратна връзка на изхода, гама с обратна връзка с шифров текст, проста подмяна с ангажиране и разработване на имитационна вложка) са включени в отделен стандарт GOST R 34.13-2015, който съответства на приетата международна практика. Тези режими са приложими както за шифъра Magma, така и за новия шифър Grasshopper.

  • Извършва се побитово кръгово ляво изместване с 11 бита. Дешифрирането се извършва по същата схема, но с различен график на използване на ключовете: от 1 -ви до 8 -ми кръг на декриптиране - в директен ред: от 9 -ти до 32 -и кръг на декриптиране - в обратен ред: В сравнение с DES шифърът в GOST 28147-89 има следните предимства: значително по-дълъг ключ (256 бита срещу 56 за DES шифъра), атака, при която чрез изброяване с груба сила на набора ключове изглежда невъзможно в момента; прост график за използване на ключа, който опростява изпълнението на алгоритъма и увеличава скоростта на изчисленията. Проектиране на S-блокове GOST 28147-89. Очевидно е, че схемата на алгоритъма GOST 28147-89 е много проста. Това означава, че най -голямото натоварване за криптиране пада върху таблиците за заместване. Стойности на разделите
  • Панасепко С. П. Алгоритми за криптиране: специален справочник. SPb.: BHV-Peter-burg, 2009.
  • Кара О. Отразяващи атаки върху шифрите на продуктите. URL адрес: http://eprint.iacr.org/2007/043.pdf
  • Руски стандарт за криптиране: намалена сила. URL: http://cryptofaq.ru/index.php/2010-12-23-18-20-21/2010-12-23-18-22-09/90-2011-02-01-07-47- 27
  • Achekseev E. K., Smyshlyaev S. V. GOST 28147-89: "Не бързайте да го погребете."

Известният изследовател, основателят на алгебричната криптоанализа, Никола Куртоа, твърди, че блоковият шифър GOST, който трябваше да стане международен стандарт в близко бъдеще, всъщност е счупен и очаква много публикации в бъдеще, които трябва да развият идеите му относно нестабилността на този алгоритъм.

По -долу са кратки откъси от тази работа, която може да се разглежда като тревожна атака в разгара на международната стандартизация (авторът е известен с подобни преувеличения по отношение на AES, но работата му тогава има голямо теоретично влияние върху криптоанализата, но не е довело до практически атаки срещу самия AES). Но може би това също е истинско предупреждение за началото на етапа на „самолет, който се гмурка в опашка“, който може да завърши с рухването на националния стандарт за криптиране, както беше в случая с алгоритъма за хеширане SHA-1 и де факто MD5 алгоритъм за хеширане.

ГОСТ 28147-89 беше стандартизиран през 1989 г. и за първи път стана официален стандарт за защита на поверителна информация, но спецификацията на шифрите остана затворена. През 1994 г. стандартът беше разсекретен, публикуван и преведен на английски. По аналогия с AES (и за разлика от DES), на GOST е разрешено да защитава класифицирана информация без ограничения, в съответствие с начина, по който е посочен в руския стандарт. Че. GOST не е аналог на DES, а конкурент на 3-DES с три независими клавиша или AES-256. Очевидно GOST е доста сериозен шифър, който отговаря на военните критерии, създаден с очакване на най -сериозните приложения. Най-малко два комплекта GOST S-кутии са идентифицирани въз основа на приложения, използвани от руските банки. Тези банки трябва да провеждат тайни комуникации със стотици клонове и да защитават милиарди долари от измамни кражби.

GOST е блоков шифър с проста структура на Feistel, с размер на блока от 64 бита, 256-битов ключ и 32 кръга. Всеки кръг съдържа модулно добавяне на 2 ^ 32 клавиша, набор от осем 4-битови S-кутии и просто 11-битово циклично изместване. Характеристика на GOST е възможността за съхраняване на S-блокове в тайна, които могат да бъдат представени като втори ключ, който увеличава ефективния материал на ключа до 610 бита. Един комплект S-кутии е публикуван през 1994 г. като част от спецификацията на хеш функцията GOST-R 34.11-94 и, както пише Schneier, е бил използван от Централната банка на Руската федерация. Той също е включен в стандарта RFC4357 в частта "id-GostR3411-94-CryptoProParamSet". Имаше грешка в изходния код в края на книгата на Schneier (в ред на S-box). Най -точната референтна реализация с местен руски произход вече може да се намери в библиотеката на OpenSSL. Ако някъде се използват тайни S-кутии, те могат да бъдат извлечени от софтуерни реализации и от микросхеми, всъщност съответните произведения са публикувани.

ГОСТ е сериозен конкурент

В допълнение към много големия размер на ключа, GOST има значително по -ниски разходи за изпълнение в сравнение с AES и други подобни системи за криптиране. Всъщност това струва много по -малко от AES, което изисква четири пъти повече хардуерни логически порти за много по -ниското рекламирано ниво на сигурност.

Не е изненадващо, че GOST се превърна в интернет стандарт, по -специално, той е включен в много крипто библиотеки като OpenSSL и Crypto ++ и става все по -популярен извън страната си на произход. През 2010 г. ГОСТ е обявен за ISO стандартизация като световен стандарт за криптиране. Изключително малък брой алгоритми са успели да се превърнат в международни стандарти. ISO / IEC 18033-3: 2010 описва следните алгоритми: четири 64-битови шифри-TDEA, MISTY1, CAST-128, HIGHT-и три 128-битови шифри-AES, Camellia, SEED. Предлага се GOST да бъде добавен към същия стандарт ISO / IEC 18033-3.

За първи път в историята на индустриалната стандартизация се сблъскваме с такъв конкурентен алгоритъм по отношение на оптималността между цена и ниво на сигурност. GOST има 20-годишни усилия за криптоанализ и доскоро сигурността му от военно ниво не е била поставяна под въпрос.

Както авторът наскоро научи от частната кореспонденция, повечето държави се противопоставиха на GOST при гласуването на ISO в Сингапур, но резултатите от това гласуване все още ще бъдат разгледани на пленарното заседание на ISO SC27, така че GOST все още е в процес на стандартизация по време на публикуване на това произведение.

Мнения на експерти по GOST

Нищо от наличната информация и литература относно ГОСТ не дава основание да се смята, че шифърът може да е опасен. Напротив, големият размер на ключа и големият брой кръгове правят GOST на пръв поглед подходящ за десетилетия употреба.

Всеки, запознат със закона на Мур, осъзнава, че на теория 256-битовите ключове ще останат защитени поне 200 години. ГОСТ е широко проучен от водещи експерти в областта на криптографията, известни в областта на блоковия шифров анализ, като Шнайер, Бирюков, Данкелман, Вагнер, много австралийски, японски и руски учени, криптографски експерти от ISO и всички изследователи са изрази, че всичко изглежда така, че той може да бъде или трябва да бъде в безопасност. Въпреки че становището достигна до широко разбиране, че самата структура на GOST е изключително слаба, например, в сравнение с DES, по -специално дифузията не е толкова добра, обаче, това винаги се дължи на факта, че това трябва да се компенсира от голям брой кръгове (32), както и допълнителна нелинейност и дифузия, осигурени чрез добавяне на модули.

Бирюков и Вагнер писаха: „Големият брой кръгове (32) и добре проучената конструкция на Фейстел, съчетани с последователните пермутации на Шанън, осигуряват солидна основа за сигурността на ГОСТ.“ В същото произведение четем: „след значителна инвестиция на време и усилия не е постигнат напредък в криптоанализа на стандарта в отворената литература“. По този начин няма значителни атаки, които биха позволили декриптиране или възстановяване на ключ в реалистичен сценарий, при който GOST се използва при криптиране с много различни случайни ключове. За разлика от това, известни са много произведения за атаки срещу слаби ключове в GOST, атаки със свързани ключове, атаки за възстановяване на секретни S-кутии. На Crypto-2008 беше представено хакване на хеш функция, базирана на този шифър. При всички атаки нападателят има значително по -голямо ниво на свобода, отколкото обикновено се допуска. В традиционните приложения за криптиране, използващи произволно избрани ключове, досега не са открити сериозни криптографски атаки срещу GOST, което през 2010 г. се изразява с последната фраза: „въпреки значителните усилия на криптоаналитиците през последните 20 години, GOST все още не е напукани "(Axel Poschmann, San Ling и Huaxiong Wang: 256-битова стандартизирана криптовалута за 650 GE GOST Преразгледано, В CHES 2010, LNCS 6225, стр. 219-233, 2010).

Линеен и диференциален анализ GOST

В добре познатата книга на Шнайер четем: „Срещу диференциална и линейна криптоанализа, GOST вероятно е по-стабилен от DES.“ Основната оценка на сигурността на GOST е дадена през 2000 г. от Gabidulin et al. Резултатите им са много впечатляващи: с ниво на сигурност 2 ^ 256, пет кръга са достатъчни, за да защитят GOST от линейна криптоанализа. Нещо повече, дори след замяна на S -кутии с идентични и единствената нелинейна операция с шифър - добавяне mod 2 ^ 32 - шифърът все още е устойчив на линейна криптоанализа след 6 кръга от 32. ГОСТ диференциалният криптоанализ изглежда сравнително по -лесен и привлича повече внимание. За ниво на сигурност 2 ^ 128 изследователите (Виталий В. Шорин, Вадим В. Железняков и Ернст М. Габидулин: Линеен и диференциален криптоанализ на руския ГОСТ, Предпечат, представен на Elsevier Preprint, 4 април 2001 г.) приеха достатъчна трайност в 7 кръга . Според тях нарушаването на GOST в повече от пет кръга е „изключително трудно“. Освен това двама японски изследователи са показали, че класическата директна диференциална атака с една диференциална характеристика има изключително ниска вероятност да премине през голям брой кръгове. Въз основа на факта, че се изучава достатъчно "добра" итеративна диференциална характеристика за ограничен брой кръгове (която сама има вероятност да премине не по-добре от 2-11,4 на кръг), стойността на набора от подходящи ключове е по-малка от половината . За цялостен GOST такава атака с една характеристика ще работи само с незначителна част от ключове от порядъка на 2-62 (и дори в тази малка част тя ще има вероятност да премине не повече от 2-360 ).

По-сложните атаки включват множество диференциали, които следват определени модели, като например използване на отделни S-кутии, които имат нулеви диференциали, докато други битове имат нулеви. Говорим за дискриминиращи атаки въз основа на лошите дифузионни свойства на GOST. Най -доброто от тези атаки работи срещу 17 кръга на GOST, зависи от ключа и има изключително слаб дискриминатор от случайни данни на самия изход, така че може по някакъв начин да се използва за получаване на информация за ключа.

Плъзнете и отклонете атаките

Според Бирюков и Вагнер структурата на GOST, която включва обратния ред на подключевете в последните кръгове, я прави устойчива на плъзгащи атаки (т.нар. "Слайд атаки"). Въпреки това, поради наличието на голямо самоподобство в шифъра, това позволява атаки на инверсия на ключове върху комбинации от фиксирани точки и свойства на „отражение“ (така наречените „отразяващи атаки“) за определени слаби ключове. Сложността на тази атака е 2 ^ 192 и 2 ^ 32 съвпадащи открити текста.

Последни резултати

Новите атаки също използват отражение и всъщност нарушиха GOST, който беше представен на конференцията на FSE 2011. Тези атаки също бяха открити независимо от автора на тази статия. Атаката изисква 2 ^ 132 байта памет, което всъщност е по -лошо от по -бавните атаки с по -малко изисквания за памет.

Разнообразие от нови атаки за самоподобност работят срещу всички ключове на GOST и ви позволяват да нарушите пълния GOST с 256-битов ключ, не само за слаби ключове, както беше преди. Всички тези атаки изискват значително по -малко памет и са значително по -бързи.

Тези нови атаки могат да се разглеждат като примери за нова обща парадигма за криптоанализ на блокови шифри, наречена "алгебрично намаляване на сложността", с обобщение на тези атаки в много специални случаи на атаки с известни фиксирани точки, слайдове, инволюции и цикли. Важно е, че сред семейството на всички тези атаки има такива, които позволяват криптоанализ на GOST без никакви отражения и без никакви симетрични точки, които се появяват по време на изчисленията. Един пример е проста хакерска атака GOST без отражение в тази работа.

Алгебрична криптоанализа и атаки с ниска сложност на данните върху редуцирани кръгове

Алгебричните атаки срещу блокови и поточни шифри могат да бъдат представени като проблем за решаване на голяма система от булеви алгебрични уравнения, която следва геометрията и структурата на определена криптографска схема. Самата идея се връща към Шанън. На практика той беше представен за DES (за първи път представен от автора на тази работа) като официален метод за кодиране и може да пробие 6 кръга само в един известен открит текст. Манипулирането на уравнения се основава на алгоритми XL, бази на Грьобнер, метод ElimLin, решения за SAT.

На практика алгебричните атаки са приложени срещу много малък брой кръгове блокови шифри, но вече са довели до напукване на поточните шифри, а също така има успехи при разбиването на свръхлеки шифри за микрооборудване. Поради трудностите в размера на паметта и изчислителните разходи, те се комбинират с други атаки.

Как да хакна GOST?

Алгебрична атака срещу пълен GOST е представена по-подробно в тази публикация. В предишна работа авторът вече е очертал 20 алгебрични атаки срещу GOST и очаква голям брой от тях в близко бъдеще. Атаката, предложена в тази работа, не е най -добрата от тях, но отваря лесен (поне за разбирането на криптографите) път за последващи разработки за създаване на специфична методология за разбиване на GOST.

Практическият резултат все още е скромен: 2 ^ 64 известни открит текст и 2 ^ 64 памет за съхраняване на двойки открит текст / шифрован текст правят възможно разбиването на GOST 2 ^ 8 по -бързо от обикновената груба сила. Но по отношение на криптоанализа това прави напълно справедливо да се каже, че „GOST е разбит“.

изводи

GOST е проектиран да осигури военно ниво на сигурност за 200 години напред. Повечето от водещите експерти, които са изучавали ГОСТ, са се съгласили, че „въпреки значителните криптоаналитични усилия в продължение на 20 години, ГОСТ все още не е пробит“. През 2010 г. GOST беше повишен до ISO 18033 като глобален стандарт за криптиране.

Основата на идеите за алгебрична криптоанализа се появи преди повече от 60 години. Но само през последните 10 години са разработени ефективни софтуерни инструменти за (частично) решаване на много NP-пълни проблеми. Редица поточни шифри са пробити. Само един блок шифър е разбит по този метод - самият слаб KeeLoq. В тази работа авторът нарушава важен, действително използван шифър GOST. Той отбелязва, че това е първият път в историята, в който стандартизиран държавен шифър е нарушен чрез алгебрична криптоанализа.

Една проста атака „MITM с размисъл“ към GOST вече беше представена на конференцията на FSE 2011. В работата, разгледана в тази статия, друга атака е представена само за да илюстрира факта колко атаки срещу GOST вече са се появили сега, много от които са по -бързи и алгебричната атака изисква много по -малко памет и отваря почти неизчерпаемо пространство от възможности на противника да атакува шифъра по различни начини. Също така в тази статия е показано, че няма нужда да се използва свойството отражение за хакерство.

Авторът твърди, че е очевидно, че ГОСТ има сериозни недостатъци и сега не осигурява нивото на издръжливост, изисквано от ISO. Много атаки срещу GOST са представени в рамките на потвърждаването на парадигмата за намаляване на алгебричната сложност.

И накрая, изследователят особено отбелязва някои факти, които все още не са достъпни за читателя, но са известни на изследователя, които са важни в хода на процеса на стандартизация на ISO. Тази атака не е просто „сертификационна“ атака срещу GOST, която е по -бърза от атаката с груба сила. Всъщност стандартизирането на GOST сега би било изключително опасно и безотговорно. Това е така, защото някои от атаките са осъществими на практика. На практика някои ключове на GOST могат дори да бъдат декриптирани, независимо дали са слаби ключове или ключове от частни реални приложения на GOST. В предишната работа авторът дава подробно разглеждане на случаите на възможност за практически атаки. Важно е, че „това е първият път в историята, че сериозна стандартизирана блокова шифрова система, предназначена да защитава военни тайни и предназначена да защитава държавни тайни за правителства, големи банки и други организации, е компрометирана от математическа атака“.