ДЕРЖСТАНДАРТ 28147 89 розмір блоку шифрування.




Алгоритм шифрування ГОСТ 28147-89, його використання та програмна реалізація для комп'ютерів платформи Intel x86.


Андрій Винокуров

Опис алгоритму.

Терміни та позначення.

Опис стандарту шифрування Російської Федераціїміститься в дуже цікавому документі, під назвою «Алгоритм криптографічного перетворення ГОСТ 28147-89» . Те, що в його назві замість терміна «шифрування» фігурує загальне поняття « криптографічне перетворення », Зовсім не випадково. Крім кількох тісно пов'язаних між собою процедур шифрування, в документі описаний один побудований на загальних принципахз ними алгоритм виробітку імітівставки . Остання є нічим іншим, як криптографічною контрольною комбінацією, тобто кодом, що виробляється з вихідних даних з використанням секретного ключа з метою імітозахисту , або захисту даних від внесення до них несанкціонованих змін.

На різних кроках алгоритмів ГОСТу дані, якими вони оперують, інтерпретуються та використовуються по-різному. У деяких випадках елементи даних обробляються як масиви незалежних бітів, в інших випадках – як ціле число без знака, у третіх – як складний елемент, що має структуру, що складається з декількох більш простих елементів. Тому, щоб уникнути плутанини, слід домовитися про позначення, що використовуються.

Елементи даних у цій статті позначаються великими латинськими літерами з похилим зображенням (наприклад, X). Через | X| позначається розмір елемента даних Xу бітах. Таким чином, якщо інтерпретувати елемент даних Xяк ціле невід'ємне число, можна записати таку нерівність:.

Якщо елемент даних складається з кількох елементів меншого розміру, цей факт позначається так: X=(X 0 ,X 1 ,…,X n –1)=X 0 ||X 1 ||…||X n-1. Процедура об'єднання кількох елементів даних один називається конкатенацією даних та позначається символом «||». Звісно, ​​для розмірів елементів даних має виконуватися таке співвідношення: | X|=|X 0 |+|X 1 |+…+|X n-1 |. При заданні складних елементів даних та операції конкатенації складові елементи даних перераховуються у порядку зростання старшинства. Іншими словами, якщо інтерпретувати складовий елемент і всі елементи даних, що входять до нього, як цілі числа без знака, то можна записати таку рівність:

В алгоритмі елемент даних може інтерпретуватися як масив окремих бітів, у цьому випадку біти позначаємо тією ж літерою, що і масив, але в рядковому варіанті, як показано на наступному прикладі:

X=(x 0 ,x 1 ,…,x n –1)=x 0 +2 1 · x 1 +…+2 n-1 · x n –1 .

Таким чином, якщо ви звернули увагу, для ГОСТу прийнято т.зв. "little-endian" нумерація розрядів, тобто. всередині багаторозрядних слів даних окремі двійкові розряди та їх групи з меншими номерами менш значущі. Про це прямо йдеться у пункті 1.3 стандарту: «При складанні та циклічному зрушенні двійкових векторів старшими розрядами вважаються розряди накопичувачів з великими номерами». Далі, пункти стандарту 1.4, 2.1.1 та інші наказують починати заповнення даними регістрів-накопичувачів віртуального пристрою шифрування з молодших, тобто. менш значних розрядів. Такий самий порядок нумерації прийнятий в мікропроцесорній архітектурі Intel x86, саме тому при програмній реалізації шифру на цій архітектурі ніяких додаткових перестановок розрядів усередині слів даних не потрібно.

Якщо над елементами даних виконується деяка операція, має логічний сенс, то передбачається, що операція виконується над відповідними бітами елементів. Іншими словами A B=(a 0 b 0 ,a 1 b 1 ,…,a n –1 b n-1), де n=|A|=|B|, а символом «» позначається довільна бінарна логічна операція; як правило, мається на увазі операція виключає або , вона ж - операція підсумовування за модулем 2:

Логіка побудови шифру та структура ключової інформації ГОСТу.

Якщо уважно вивчити оригінал ГОСТ 28147-89, можна побачити, що він містить опис алгоритмів кількох рівнів. На верхньому знаходяться практичні алгоритми, призначені для шифрування масивів даних і вироблення для них імітівставки. Усі вони спираються на три алгоритми нижчого рівня, які називаються в тексті ГОСТу циклами . Ці фундаментальні алгоритми згадуються у цій статті як базові цикли , щоб відрізняти їх від інших циклів. Вони мають такі назви та позначення, останні наведені у дужках і зміст їх буде пояснений пізніше:

  • цикл зашифрування (32-З);
  • цикл розшифрування (32-Р);
  • цикл вироблення імітівставки (16-З).

У свою чергу, кожен з базових циклів є багаторазовим повторенням однієї єдиної процедури, званої для визначеності далі в цій роботі основним кроком криптоперетворення .

Таким чином, щоб розібратися у ГОСТі, треба зрозуміти три наступні речі:

  • що таке основний крок криптоперетворення;
  • як із основних кроків складаються базові цикли;
  • як із трьох базових циклів складаються всі практичні алгоритми ДСТУ.

Перш ніж перейти до вивчення цих питань, слід поговорити про ключову інформацію, яку використовують алгоритми ГОСТу. Відповідно до принципу Кірхгофа, якому задовольняють усі сучасні відомі широкому загалу шифри, саме її секретність забезпечує секретність зашифрованого повідомлення. У ГОСТі ключова інформація складається із двох структур даних. Крім власне ключа , необхідного для всіх шифрів, вона містить ще й таблицю замін . Нижче наведено основні характеристики ключових структур Держстандарту.

Основний крок криптоперетворення.

Основний крок криптоперетворення за своєю суттю є оператором, що визначає перетворення 64-бітового блоку даних. Додатковим параметромцього оператора є 32-бітовий блок, в якості якого використовується будь-який елемент ключа. Схема алгоритму основного кроку наведено малюнку 1.


Малюнок 1. Схема основного кроку криптоперетворення алгоритму ГОСТ 28147-89.

Нижче наведено пояснення до алгоритму основного кроку:

Крок 0

  • N- 64-бітовий блок даних, що перетворюється, в ході виконання кроку його молодша ( N 1) та старша ( N 2) частини обробляються окремі 32-битовые цілі числа без знака. Таким чином, можна записати N=(N 1 ,N 2).
  • X- 32-бітовий елемент ключа;

Крок 1

Додавання з ключем. Молодша половина блоку, що перетворюється складається по модулю 2 32 з використовуваним на кроці елементом ключа, результат передається на наступний крок;

Крок 2

Побічна заміна. 32-бітове значення, отримане на попередньому кроці, інтерпретується як масив із восьми 4-бітових блоків коду: S=(S 0 , S 1 , S 2 , S 3 , S 4 , S 5 , S 6 , S 7), причому S 0 містить 4 наймолодших, а S 7 – 4 найстарші біти S.

Далі значення кожного з восьми блоків замінюється новим, яке вибирається за таблицею замін наступним чином: значення блоку S iзмінюється на S i-Тий по порядку елемент (нумерація з нуля) i-того вузла заміни (тобто. i-того рядка таблиці замін, нумерація також з нуля). Іншими словами, як заміна для значення блоку вибирається елемент з таблиці замін з номером рядка, рівним номеру блоку, що замінюється, і номером стовпця, рівним значенню замінного блоку як 4-бітового цілого неотрицательного числа. Звідси стає зрозумілим розмір таблиці замін: число рядків у ній дорівнює числу 4-бітових елементів у 32-бітовому блоці даних, тобто восьми, а число стовпців дорівнює кількості різних значень 4-бітового блоку даних, що дорівнює як відомо 2 4 , шістнадцяти.

Крок 3

Циклічне зрушення на 11 біт ліворуч. Результат попереднього кроку зсувається циклічно на 11 біт у бік старших розрядів і передається наступний крок. На схемі алгоритму символом позначено функцію циклічного зсуву свого аргументу на 11 біт вліво, тобто. у бік старших розрядів.

Крок 4

Побітове додавання: значення, отримане на кроці 3, побітно складається по модулю 2 зі старшою половиною блоку, що перетворюється.

Крок 5

Зсув по ланцюжку: молодша частина блоку, що перетворюється, зрушується на місце старшої, а на її місце поміщається результат виконання попереднього кроку.

Крок 6

Отримане значення блоку, що перетворюється, повертається як результат виконання алгоритму основного кроку криптоперетворення.

Основні цикли криптографічних перетворень.

Як зазначено на початку цієї статті, ДЕРЖСТАНДАРТ відноситься до класу блокових шифрів, тобто одиницею обробки інформації в ньому є блок даних. Отже, цілком логічно очікувати, що в ньому будуть визначені алгоритми для криптографічних перетворень, тобто для зашифрування, розшифрування та обліку в контрольній комбінації одного блоку даних. Саме ці алгоритми і називаються базовими циклами ГОСТу, що підкреслює їхнє фундаментальне значення для побудови цього шифру.

Базові цикли побудовані з основних кроків криптографічного перетворення, розглянутого у попередньому розділі. У процесі виконання основного кроку використовується лише один 32-бітовий елемент ключа, тоді як ключ ДСТУ містить вісім таких елементів. Отже, щоб ключ був використаний повністю, кожен із базових циклів повинен багаторазово виконувати основний крок із різними його елементами. Разом з тим здається цілком природним, що в кожному базовому циклі всі елементи ключа повинні бути використані однакове число разів, з міркувань стійкості шифру це число має бути більше одного.

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

Цикл зашифрування 32-З:

K 0 ,K 1 ,K 2 ,K 3 ,K 4 ,K 5 ,K 6 ,K 7 ,K 0 ,K 1 ,K 2 ,K 3 ,K 4 ,K 5 ,K 6 ,K 7 ,K 0 ,K 1 ,K 2 ,K 3 ,K 4 ,K 5 ,K 6 ,K 7 ,K 7 ,K 6 ,K 5 ,K 4 ,K 3 ,K 2 ,K 1 ,K 0 .


Малюнок 2а. Схема циклу зашифрування 32-З

Цикл розшифрування 32-Р:

K 0 ,K 1 ,K 2 ,K 3 ,K 4 ,K 5 ,K 6 ,K 7 ,K 7 ,K 6 ,K 5 ,K 4 ,K 3 ,K 2 ,K 1 ,K 0 ,K 7 ,K 6 ,K 5 ,K 4 ,K 3 ,K 2 ,K 1 ,K 0 ,K 7 ,K 6 ,K 5 ,K 4 ,K 3 ,K 2 ,K 1 ,K 0 .


Малюнок 2б. Схема циклу розшифрування 32-Р

Цикл вироблення імітівставки 16-З:

K 0 ,K 1 ,K 2 ,K 3 ,K 4 ,K 5 ,K 6 ,K 7 ,K 0 ,K 1 ,K 2 ,K 3 ,K 4 ,K 5 ,K 6 ,K 7 .


Малюнок 2в. Схема циклу вироблення імітівставки 16-З.

Кожен із циклів має власне буквено-цифрове позначення, що відповідає шаблону « n-X», де перший елемент позначення ( n), задає число повторень основного кроку в циклі, а другий елемент позначення ( X), літера, визначає порядок зашифрування («З») або розшифрування («Р») у використанні ключових елементів. Цей порядок потребує додаткового пояснення:

Цикл розшифрування має бути зворотним циклу зашифрування, тобто послідовне застосування цих двох циклів до довільного блоку має дати в результаті вихідний блок, що відображається таким співвідношенням: Ц 32-Р ( Ц 32-З ( T))=T, де T- Довільний 64-бітовий блок даних, Ц X ( T) – результат виконання циклу Xнад блоком даних T. Для виконання цієї умови для алгоритмів, подібних до ГОСТу, необхідно і достатньо, щоб порядок використання ключових елементів відповідними циклами був взаємно зворотним. У справедливості записаної умови для даного випадку легко переконатися, порівнявши наведені вище послідовності для циклів 32-З і 32-Р. Зі сказаного випливає одне цікаве наслідок: властивість циклу бути зворотним іншому циклу є взаємним, тобто цикл 32-З є зворотним по відношенню до циклу 32-Р. Іншими словами, зашифрування блоку даних теоретично може бути виконане за допомогою циклу розшифрування, у цьому випадку розшифрування блоку даних має бути виконане циклом зашифрування. З двох взаємно зворотних циклів будь-який може бути використаний для зашифрування, тоді другий повинен бути використаний для розшифрування даних, проте стандарт ГОСТ28147-89 закріплює ролі за циклами і не надає користувачеві права вибору цього питання.

Цикл вироблення імітівставки вдвічі коротший за цикли шифрування, порядок використання ключових елементів у ньому такий же, як у перших 16 кроках циклу зашифрування, в чому неважко переконатися, розглянувши наведені вище послідовності, тому цей порядок в позначенні циклу кодується тією ж літерою «З».

Схеми базових циклів наведені малюнки 2а-в. Кожен з них приймає як аргумент і повертає як результат 64-бітовий блок даних, позначений на схемах N. Символ Крок( N,X) означає виконання основного кроку криптоперетворення для блоку даних Nз використанням ключового елемента X. Між циклами шифрування та обчислення імітівставки є ще одна відмінність, не згадана вище: наприкінці базових циклів шифрування старша та молодша частина блоку результату змінюються місцями, це необхідно для їхньої взаємної оборотності.

Основні режими шифрування.

ГОСТ 28147-89 передбачає три наступні режими шифрування даних:

  • проста заміна,
  • гамування,
  • гамування зі зворотним зв'язком,

і один додатковий режим вироблення імітівставки.

У будь-якому з цих режимів дані обробляються блоками по 64 біти, на які розбивається масив, що піддається криптографічного перетворення, саме тому ГОСТ відноситься до блокових шифрів. Однак у двох режимах гамування є можливість обробки неповного блоку даних розміром менше 8 байт, що істотно при шифруванні масивів даних з довільним розміром, який може бути кратним 8 байтам.

Перш ніж перейти до розгляду конкретних алгоритмів криптографічних перетворень, необхідно пояснити позначення, що використовуються на схемах у наступних розділах:

Tо, Tш – масиви відповідно відкритих та зашифрованих даних;

, – i- ті по порядку 64-бітові блоки відповідно відкритих та зашифрованих даних: , , Останній блок може бути неповним: ;

n- Число 64-бітових блоків в масиві даних;

Ц X – функція перетворення 64-бітового блоку даних алгоритму базового циклу «X».

Тепер опишемо основні режими шифрування:

Проста заміна.

Зашифрування у цьому режимі полягає у застосуванні циклу 32-З до блоків відкритих даних, розшифрування – циклу 32-Р до блоків зашифрованих даних. Це найбільш простий режими, 64-бітові блоки даних обробляються в ньому незалежно один від одного. Схеми алгоритмів зашифрування та розшифрування в режимі простої заміни наведені на рисунках 3а і б відповідно, вони тривіальні і не потребують коментарів.


Малюнок. 3а. Алгоритм зашифрування даних у режимі простої заміни


Малюнок. 3б. Алгоритм розшифрування даних у режимі простої заміни

Розмір масиву відкритих або зашифрованих даних, що піддається відповідно до зашифрування або розшифрування, повинен бути кратний 64 бітам: | T про |=| T ш | = 64 · n після виконання операції розмір отриманого масиву даних не змінюється.

Режим шифрування простою заміною має такі особливості:

  • Так як блоки даних шифруються незалежно один від одного і від їхньої позиції в масиві даних, при зашифруванні двох однакових блоків відкритого тексту виходять однакові блоки шифртексту і навпаки. Зазначене властивість дозволить криптоаналитику зробити висновок про тотожність блоків вихідних даних, якщо масиві зашифрованих даних йому зустрілися ідентичні блоки, що є неприпустимим для серйозного шифру.
  • Якщо довжина масиву даних, що шифрується, не кратна 8 байтам або 64 бітам, виникає проблема, чим і як доповнювати останній неповний блок даних масиву до повних 64 біт. Це завдання не таке просте, як здається на перший погляд. Очевидні рішення типу «доповнити неповний блок нульовими бітами» або, більш загально, «доповнити неповний блок фіксованою комбінацією нульових і одиничних бітів» можуть за певних умов дати в руки криптоаналітика можливість методами перебору визначити вміст цього неповного блоку, і цей факт означає зниження стійкості шифру. Крім того, довжина шифртексту при цьому зміниться, збільшившись до найближчого цілого, кратного 64 біт, що часто буває небажаним.

На перший погляд, перелічені вище особливості роблять практично неможливим використання режиму простої заміни, адже він може застосовуватися тільки для шифрування масивів даних з розміром кратним 64 біт, що не містить 64-бітових блоків, що повторюються. Здається, що з будь-яких реальних даних гарантувати виконання зазначених умов неможливо. Це майже так, але є один дуже важливий виняток: згадайте, що розмір ключа становить 32 байти, а розмір таблиці замін – 64 байти. Крім того, наявність 8-байтових блоків, що повторюються, в ключі або таблиці замін буде говорити про їх дуже погану якість, тому в реальних ключових елементах такого повторення бути не може. Таким чином, ми з'ясували, що режим простої заміни цілком підходить для шифрування ключової інформації, тим більше що інші режими для цієї мети менш зручні, оскільки вимагають наявності додаткового синхронізуючого елемента даних – синхропосилання (див. наступний розділ). Наша здогад вірна, ГОСТ пропонує використовувати режим простої заміни виключно для шифрування ключових даних.

Гамування.

Як можна позбутися недоліків режиму простої заміни? Для цього необхідно уможливити шифрування блоків з розміром менше 64 біт і забезпечити залежність блоку шифртексту від його номера, іншими словами, рандомізувати процес шифрування. У ГОСТі це досягається двома різними способами у двох режимах шифрування, що передбачають гамування . Гамування - це накладення (зняття) на відкриті (зашифровані) дані криптографічної гами, тобто послідовності елементів даних, що виробляються за допомогою деякого криптографічного алгоритму для отримання зашифрованих (відкритих) даних. Для накладання гами при зашифруванні та її зняття при розшифруванні повинні використовуватися взаємно зворотні бінарні операції, наприклад, додавання та віднімання за модулем 2 64 для 64-бітових блоків даних. У ГОСТі для цієї мети використовується операція побітового додавання по модулю 2, оскільки вона є зворотною собі і, до того ж, найбільш просто реалізується апаратно. Гамування вирішує обидві згадані проблеми: по-перше, всі елементи гами різні для реальних масивів, що шифруються, і, отже, результат зашифрування навіть двох однакових блоків в одному масиві даних буде різним. По-друге, хоча елементи гами і виробляються однаковими порціями в 64 біта, може використовуватися і частина такого блоку з розміром, рівним розміру блоку, що шифрується.

Тепер перейдемо безпосередньо до опису режиму гамування. Гамма для цього режиму виходить наступним чином: за допомогою деякого алгоритмічного рекурентного генератора послідовності чисел (РГПЧ) виробляються 64-бітові блоки даних, які піддаються перетворенню по циклу 32-З, тобто зашифрування в режимі простої заміни, в результаті виходять блоки гами. Завдяки тому, що накладання і зняття гами здійснюється за допомогою однієї і тієї ж операції побитового виключає або алгоритми зашифрування і розшифрування в режимі гамування ідентичні, їх загальна схема наведена на малюнку 4.

РГПЛ, що використовується для вироблення гами, є рекурентною функцією: – елементи рекурентної послідовності, f- Функція перетворення. Отже, неминуче виникає питання про його ініціалізацію, тобто про елемент Насправді цей елемент даних є параметром алгоритму для режимів гамування, на схемах він позначений як S, і називається у криптографії синхропосилкою , а в нашому ГОСТі – початковим заповненням одного з регістрів шифрувача. З певних міркувань розробники ДСТУ вирішили використовувати для ініціалізації РГПЛ не безпосередньо синхропосилку, а результат її перетворення за циклом 32-З: . Послідовність елементів, що виробляються РГПЛ, повністю залежить від початкового заповнення, тобто елементи цієї послідовності є функцією свого номера і початкового заповнення РГПЧ: де f i(X)=f(f i –1 (X)), f 0 (X)=X. З урахуванням перетворення за алгоритмом простої заміни додається ще й залежність від ключа:

де Г ii-Тий елемент гами, K- Ключ.

Таким чином, послідовність елементів гами для використання в режимі гамування однозначно визначається ключовими даними та синхропосиланням. Природно, для оборотності процедури шифрування в процесах за- та розшифрування повинна використовуватися та сама синхропосилання. З вимоги унікальності гами, невиконання якого призводить до катастрофічного зниження стійкості шифру, випливає, що для шифрування двох різних масивів даних на одному ключі необхідно забезпечити використання різних синхропосилок. Це призводить до необхідності зберігати або передавати синхропосилання каналами зв'язку разом із зашифрованими даними, хоча в окремих особливих випадках вона може бути зумовлена ​​або обчислюватися особливим чином, якщо виключається шифрування двох масивів на одному ключі.

Тепер докладно розглянемо РГПЛ, що використовується у ГОСТі для створення елементів гами. Насамперед, слід зазначити, що до нього не пред'являються вимоги забезпечення будь-яких статистичних характеристик послідовності чисел, що виробляється. РГПЛ спроектований розробниками ГОСТу, виходячи з необхідності виконання наступних умов:

  • період повторення послідовності чисел, що виробляється РГПЛ, не повинен сильно (у відсотковому відношенні) відрізнятися від максимально можливого при заданому розмірі блоку значення 264;
  • сусідні значення, що виробляються РГПЛ, повинні відрізнятися один від одного в кожному байті, інакше завдання криптоаналітика буде спрощено;
  • РГПЧ має бути досить просто реалізований як апаратно, так і програмно на найбільш поширених типах процесорів, більшість з яких, як відомо, мають розрядність 32 біти.

З перелічених принципів, творці ГОСТу спроектували дуже зручний РГПЛ, має такі характеристики:

Де C 0 =1010101 16 ;

Де C 1 =1010104 16 ;

Нижній індекс у записі числа означає його систему числення, таким чином, константи, що використовуються на цьому кроці, записані в 16-річній системі числення.

Друге вираження потребує коментарів, оскільки у тексті ГОСТу наведено щось інше: , з тим самим значенням константи C 1 . Але далі у тексті стандарту дається коментар, що, виявляється, під операцією взяття залишку за модулем 2 32 -1 тамрозуміється не те саме, що і в математиці. Відмінність полягає в тому, що згідно з ДСТУ (2 32 -1) mod(2 32 –1)=(2 32 –1), а чи не 0. Насправді, це спрощує реалізацію формули, а математично коректне вираз неї наведено вище.

  • період повторення послідовності для молодшої частини становить 232, для старшої частини 232-1, для всієї послідовності період становить 232 (232-1), доказ цього факту, дуже нескладне, отримаєте самі. Перша формула з двох реалізується за одну команду, друга, незважаючи на її громіздкість, за дві команди на всіх сучасних 32-розрядних процесорах - першою командою йде звичайне додавання по модулю 2 32 із запам'ятовуванням біта переносу, а друга команда додає біт переносу до отриманого значенню.

Схему алгоритму шифрування в режимі гамування наведено на малюнку 4, нижче викладено пояснення до схеми:


Малюнок 4. Алгоритм зашифрування (розшифрування) даних як гаммування.

Крок 0

Визначає вихідні дані для основного кроку криптоперетворення:

  • Tо(ш) – масив відкритих (зашифрованих) даних довільного розміру, що піддається процедурі зашифрування (розшифрування), по ходу процедури масив піддається перетворенню порціями по 64 біти;
  • S синхропосилання 64-бітовий елемент даних, необхідний для ініціалізації генератора гами;

Крок 1

Початкове перетворення синхропосилання, яке виконується для її «рандомізації», тобто для усунення статистичних закономірностей, присутніх в ній, результат використовується як початкове заповнення РГПЛ;

Крок 2

Один крок роботи РГПЛ, що реалізує його рекурентний алгоритм. У ході цього кроку старша ( S 1) та молодша ( S 0) частини послідовності даних виробляються незалежно друг від друга;

Крок 3

Гамування. Черговий 64-бітовий елемент, вироблений РГПЧ, піддається процедурі зашифрування за циклом 32-З, результат використовується як елемент гами для зашифрування (розшифрування) чергового блоку відкритих (зашифрованих) даних того ж розміру.

Крок 4

Результат роботи алгоритму – зашифрований (розшифрований) масив даних.

Нижче наведено особливості гамування як режиму шифрування:

  1. Однакові блоки у відкритому масиві даних дадуть при зашифруванні різні блоки шифртексту, що дозволить приховати факт їхньої ідентичності.
  2. Оскільки накладання гами виконується побитно, шифрування неповного блоку даних легко можна здійснити як шифрування бітів цього неповного блоку, для чого використовується відповідні біти блоку гами. Так, для зашифрування неповного блоку один біт відповідно до стандарту слід використовувати наймолодший біт з блоку гами.
  3. Синхропосилання, використане при зашифруванні, якимось чином має бути передане для використання при розшифруванні. Це може бути досягнуто такими шляхами:
  • зберігати або передавати синхропосилку разом із зашифрованим масивом даних, що призведе до збільшення розміру масиву даних при зашифруванні на розмір синхропосилки, тобто на 8 байт;
  • використовувати зумовлене значення синхропосилання або виробляти її синхронно джерелом і приймачем за певним законом, у цьому випадку зміна розміру переданого або збереженого масиву даних відсутня;

Обидва способи доповнюють один одного, і в тих поодиноких випадках, де не працює перший, найбільш уживаний з них, може бути використаний другий, більш екзотичний. Другий спосіб має набагато менше застосування, оскільки зробити синхропосилку зумовленою можна тільки в тому випадку, якщо на даному комплекті ключової інформації шифрується свідомо не більше одного масиву даних, що буває не так часто. Генерувати синхропосилання синхронно у джерела та одержувача масиву даних також не завжди є можливим, оскільки вимагає жорсткої прив'язки до чогось у системі. Так, здорова на перший погляд ідея використовувати як синхропосилання в системі передачі зашифрованих повідомлень номер повідомлення, що передається, не підходить, оскільки повідомлення може загубитися і не дійти до адресата, в цьому випадку відбудеться розсинхронізація систем шифрування джерела і приймача. Тому в розглянутому випадку немає альтернативи передачі синхропосилання разом із зашифрованим повідомленням.

З іншого боку, можна навести і зворотний приклад. Допустимо, шифрування даних використовується для захисту інформації на диску, і реалізовано воно на низькому рівні, для забезпечення незалежного доступу дані шифруються секторами. У цьому випадку неможливо зберігати синхропосилання разом із зашифрованими даними, оскільки розмір сектора не можна змінити, однак її можна обчислювати як деяку функцію від номера зчитуючої голівки диска, номера доріжки (циліндра) та номера сектора на доріжці. У цьому випадку синхропосилання прив'язується до положення сектора на диску, яке навряд чи може змінитися без переформатування диска, тобто без знищення даних на ньому.

Режим гамування має ще одну цікаву особливість. У цьому режимі біти масиву даних шифруються незалежно один від одного. Таким чином, кожен біт шифртексту залежить від відповідного біта відкритого тексту і, звичайно, порядкового номера біта в масиві: . З цього випливає, що зміна біта шифртексту на протилежне значення призведе до аналогічної зміни біта відкритого тексту на протилежний:

де позначає інвертоване по відношенню до tзначення біта ().

Дана властивість дає зловмиснику можливість впливаючи на біти шифртексту вносити передбачувані і навіть цілеспрямовані зміни у відповідний відкритий текст, що отримується після його розшифрування, не маючи секретного ключа. Це ілюструє добре відомий у криптології факт, що секретність та автентичність суть різні властивості криптографічних систем . Іншими словами, властивості криптосистеми забезпечувати захист від несанкціонованого ознайомлення з вмістом повідомлення та від несанкціонованого внесення змін до повідомлення є незалежними і лише в окремих випадках можуть перетинатися. Сказане означає, що існують криптографічні алгоритми, що забезпечують певну секретність зашифрованих даних і при цьому ніяк не захищають від внесення змін і навпаки, забезпечують автентичність даних і не обмежують можливість ознайомлення з ними. З цієї причини властивість режиму гамування, що розглядається, не повинна розглядатися як його недолік.

Гамування зі зворотним зв'язком.

Даний режим дуже схожий на режим гамування і відрізняється від нього тільки способом вироблення елементів гами – черговий елемент гами виробляється як результат перетворення за циклом 32-З попереднього блоку зашифрованих даних, а для зашифрування першого блоку масиву даних елемент гами виробляється як результат перетворення по тому ж циклу синхропосилки. Цим досягається зачеплення блоків – кожен блок шифртексту в цьому режимі залежить від відповідного та всіх попередніх блоків відкритого тексту. Тому даний режиміноді називається гамуванням з зачепленням блоків . На стійкість шифру факт зачеплення блоків не впливає.

Схема алгоритмів за- та розшифрування в режимі гамування зі зворотним зв'язком наведена на малюнку 5 і через свою простоту коментарів не потребує.


Малюнок 5. Алгоритм зашифрування (розшифрування) даних у режимі гамування зі зворотним зв'язком.

Шифрування в режимі гамування зі зворотним зв'язком має ті ж особливості, що й шифрування в режимі звичайного гамування, за винятком впливу спотворень шифртексту на відповідний відкритий текст. Для порівняння запишемо функції розшифрування блоку для обох згаданих режимів:

Гамування;

Гамування зі зворотним зв'язком;

Якщо режимі звичайного гамування зміни у певних бітах шифртексту впливають лише з відповідні біти відкритого тексту, то режимі гаммування зі зворотним зв'язком картина дещо складніше. Як видно з відповідного рівняння, при розшифруванні блоку даних у режимі гамування зі зворотним зв'язком блок відкритих даних залежить від відповідного і попереднього блоків зашифрованих даних. Тому, якщо внести спотворення в зашифрований блок, то після розшифрування спотвореними виявляться два блоки відкритих даних - відповідний і наступний за ним, причому спотворення в першому випадку будуть носити той же характер, що і в режимі гамування, а в другому - як в режимі простий заміни. Іншими словами, у відповідному блоці відкритих даних спотвореними виявляться ті ж біти, що і в блоці шифрованих даних, а в наступному блоці відкритих даних всі біти незалежно один від одного з ймовірністю 1 / 2 змінять свої значення.

Вироблення імітівставки до масиву даних.

У попередніх розділах ми обговорили вплив спотворення шифрованих даних на відповідні відкриті дані. Ми встановили, що при розшифруванні в режимі простої заміни відповідний блок відкритих даних виявляється непередбачуваним спотвореним чином, а при розшифруванні блоку в режимі гамування зміни передбачувані. У режимі гамування зі зворотним зв'язком спотвореними виявляються два блоки, один передбачуваним, а інший непередбачуваним чином. Чи означає це, що з погляду захисту від нав'язування хибних даних режим гамування є поганим, а режими простої заміни та гамування зі зворотним зв'язком хорошими? - Ні в якому разі. При аналізі даної ситуації необхідно врахувати те, що непередбачувані зміни в розшифрованому блоці даних можуть бути виявлені тільки у разі надмірності цих даних, причому, чим більший ступінь надмірності, тим вірогідніше виявлення спотворення. Дуже велика надмірність має місце, наприклад, для текстів на природних та штучних мовах, у цьому випадку факт спотворення виявляється практично неминуче. Однак в інших випадках, наприклад, при перекручуванні стислих оцифрованих звукових образів, ми отримаємо просто інший образ, який зможе сприйняти наше вухо. Спотворення в цьому випадку залишиться невиявленим, якщо, звичайно, немає апріорної інформації про характер звуку. Висновок тут такий: оскільки здатність деяких режимів шифрування виявляти спотворення, внесені в шифровані дані, істотно спирається на наявність і ступінь надмірності даних, що шифруються, ця здатність не є іманентною властивістю відповідних режимів і не може розглядатися як їх гідність.

Для вирішення задачі виявлення спотворень у зашифрованому масиві даних із заданою ймовірністю у ГОСТі передбачено додатковий режим криптографічного перетворення – вироблення імітівставки. Імітовставка – це контрольна комбінація, яка залежить від відкритих даних та секретної ключової інформації. Метою використання імітівставки є виявлення всіх випадкових чи навмисних змін у масиві інформації. Проблема, викладена в попередньому пункті, може бути успішно вирішена за допомогою додавання до шифрованих даних імітівставки. Для потенційного зловмисника дві такі завдання практично нерозв'язні, якщо він не має ключа:

  • обчислення імітівставки для заданого відкритого масиву інформації;
  • підбір відкритих даних під задану імітівставку;

Схема алгоритму вироблення імітівставки наведено малюнку 6.


Малюнок 6. Алгоритм вироблення імітівставки для масиву даних.

Як імітівставка береться частина блоку, отриманого на виході, зазвичай - 32 його молодших біта. При виборі розміру імітівставки треба брати до уваги, що ймовірність успішного нав'язування хибних даних дорівнює величині 2 - | I | одну спробу підбору, якщо у розпорядженні зловмисника немає ефективнішого методу підбору, ніж просте вгадування. При використанні імітівставки розміром 32 біти ця ймовірність дорівнює

Обговорення криптографічних алгоритмів ДСТУ.

Криптографічна стійкість Держстандарту.

При виборі криптографічного алгоритму для використання у конкретній розробці одним із визначальних факторів є його стійкість, тобто стійкість до спроб противника розкрити його. Питання про стійкість шифру при найближчому розгляді зводиться до двох взаємопов'язаних питань:

  • чи можна взагалі розкрити цей шифр;
  • якщо так, то наскільки це важко зробити практично;

Шифри, які взагалі неможливо розкрити, називаються абсолютно чи теоретично стійкими. Існування подібних шифрів доводиться теоремою Шеннона, однак ціною цієї стійкості є необхідність використання для шифрування кожного повідомлення ключа, не меншого за розміром самого повідомлення. У всіх випадках за винятком ряду особливих ця ціна надмірна, тому на практиці в основному використовуються шифри, що не мають абсолютної стійкості. Таким чином, найбільш уживані схеми шифрування можуть бути розкриті за кінцевий час або, точніше, за кінцеве число кроків, кожен з яких є деякою операцією над числами. Їх найважливіше значення має поняття практичної стійкості, що виражає практичну складність їх розкриття. Кількісним заходом цієї проблеми може бути число елементарних арифметичних і логічних операцій, які необхідно виконати, щоб розкрити шифр, тобто для заданого шифртексту з ймовірністю, не меншою за задану величину, визначити відповідний відкритий текст. При цьому в доповненні до масиву даних, що дешифрується, криптоаналітик може розташовувати блоками відкритих даних і відповідних їм зашифрованих даних або навіть можливістю отримати для будь-яких обраних ним відкритих даних відповідні зашифровані дані - в залежності від перерахованих і багатьох інших не зазначених умов розрізняють окремі види криптоаналізу.

Усі сучасні криптосистеми побудовані за принципом Кірхгоффа, тобто секретність шифрованих повідомлень визначається секретністю ключа. Це означає, що навіть якщо сам алгоритм шифрування відомий криптоаналітику, той, проте, не в змозі розшифрувати повідомлення, якщо не має у своєму розпорядженні відповідного ключа. Шифр вважається добре спроектованим, якщо немає способу розкрити його більше ефективним способом, Чим повним перебором у всьому ключовому просторі, тобто. за всіма можливими значеннями ключа. ДЕРЖСТАНДАРТ, ймовірно, відповідає цьому принципу – за роки інтенсивних досліджень не було запропоновано жодного результативного способу його криптоаналізу. У плані стійкості він набагато порядків перевершує колишній американський стандарт шифрування, DES.

У ГОСТі використовується 256-бітовий ключ і обсяг ключового простору становить 2256 . На жодному з існуючих в даний час або передбачуваних до реалізації в недалекому майбутньому електронному пристрої не можна підібрати ключ за час, менший за багато сотень років. Ця величина стала фактичним стандартом розміру ключа для симетричних криптоалгоритмів у наші дні, так, новий стандарт шифрування США також його підтримує. Колишній американський стандарт, DES з його реальним розміром ключа в 56 біт і обсягом ключового простору всього 2 56 вже не є досить стійким у світлі можливостей сучасних обчислювальних засобів. Це було продемонстровано наприкінці 90-х кількома успішними спробами злому DES перебірним шляхом. Крім того, DES виявився схильний спеціальним способамкриптоаналізу, таким як диференціальний та лінійний. У зв'язку з цим DES може представляти швидше дослідний чи науковий, ніж практичний інтерес. У 1998 році його криптографічна слабкість була визнана офіційно – національний інститут стандартів США рекомендував використовувати триразове шифрування по DES. А наприкінці 2001 року було офіційно затверджено новий стандарт шифрування США, AES, побудований на інших принципах та вільний від недоліків свого попередника.

Зауваження щодо архітектури ГОСТу.

Загальновідомо, що вітчизняний стандарт шифрування є представником цілого сімейства шифрів, побудованих на тих самих принципах. Найвідомішим його родичем є колишній американський стандарт шифрування, алгоритм DES. Всі ці шифри, подібно до ГОСТу, містять алгоритми трьох рівнів. В основі завжди лежить якийсь «основний крок», на базі якого подібним чином будуються «базові цикли», і вже на їх основі побудовано практичні процедури шифрування та вироблення імітівставки. Таким чином, специфіка кожного із шифрів цього сімейства полягає саме в його основному кроці, точніше навіть у його частині. Хоча архітектура класичних блокових шифрів, до яких належить ГОСТ, лежить далеко за межами теми цієї статті, все ж таки варто сказати кілька слів з її приводу.

Алгоритми «основних кроків криптоперетворення» для шифрів, подібних до ГОСТу, побудовані ідентичним чином, і ця архітектура називається збалансована мережа Файстеля (balanced Feistel network) на ім'я людини, яка вперше запропонувала її. Схема перетворення даних одному циклі, або, як його прийнято називати, раунді , наведено малюнку 7.


Малюнок 7. Зміст основного кроку криптоперетворення для блокових шифрів, подібних до ГОСТу.

На вхід основного кроку подається блок парного розміру, старша та молодша половини якого обробляються окремо один від одного. У ході перетворення молодша половина блоку міститься на місце старшої, а старша, скомбінована за допомогою операції побітового виключає або з результатом обчислення деякої функції, на місце молодшої. Ця функція приймає як аргумент молодшу половину блоку і елемент ключової інформації ( X), є змістовною частиною шифру і називається його функцією шифрування . З різних міркувань виявилося вигідно розділити блок, що шифрується, на дві однакові за розміром частини: | N 1 |=|N 2 | – саме цей факт відбиває слово «збалансована» у назві архітектури. Втім, нестримні мережі, що шифрують, також використовуються час від часу, хоча і не так часто, як збалансовані. Крім того, міркування стійкості шифру вимагають, щоб розмір ключового елемента не був меншим за розмір половини блоку: у ГОСТі всі три розміри дорівнюють 32 бітам .

Якщо застосувати сказане до схеми основного кроку алгоритму ДЕРЖСТАНДАРТ, стане очевидним, що блоки 1,2,3 алгоритму (див. рис. 1) визначають обчислення його функції шифрування, а блоки 4 і 5 задають формування вихідного блоку основного кроку виходячи з вмісту вхідного блоку та значення функції шифрування. Докладніше про архітектури сучасних блокових шифрів із секретним ключем можна прочитати в класичних роботах, або, в адаптованій формі, в моїх роботах.

У попередньому розділі ми вже порівняли DES та ГОСТ за стійкістю, тепер ми порівняємо їх за функціональним змістом та зручністю реалізації. У циклах шифрування ДЕРЖСТАНДАРТ основний крок повторюється 32 рази, для DES ця величина дорівнює 16. Однак сама функція шифрування ГОСТу істотно простіше аналогічної функції DES, в якій присутня безліч нерегулярних бітових перестановок. Ці операції дуже неефективно реалізуються на сучасних неспеціалізованих процесорах. ГОСТ не містить подібних операцій, тому він значно зручніший для програмної реалізації.

Жодна з розглянутих автором реалізацій DESа для платформи Intel x86 не досягає навіть половини продуктивності запропонованої вашої уваги в цій статті реалізації ГОСТу незважаючи на вдвічі коротший цикл. Все сказане вище свідчить про те, що розробники ДСТУ врахували як позитивні, так і негативні сторони DESа, а також більш реально оцінили поточні та перспективні можливості криптоаналізу. Втім, брати DES за основу порівняно швидкодії реалізацій шифрів не актуально. У нового стандарту шифрування США справи з ефективністю йдуть набагато краще - при такому ж як у ДСТУ розмір ключа в 256 біт AES працює швидше за нього приблизно на 14% - це якщо порівнювати за кількістю «елементарних операцій». Крім того, ГОСТ практично не вдається розпаралелити, а у AES можливостей у цьому плані набагато більше. На деяких архітектурах ця перевага AES може бути меншою, на інших – більшою. Так, на процесорі Intel Pentium воно сягає 28%. Подробиці можна знайти у .

Вимоги до якості ключової інформації та джерела ключів.

Не всі ключі та таблиці замін забезпечують максимальну стійкість шифру. Для кожного алгоритму шифрування є свої критерії оцінки ключової інформації. Так, для алгоритму DES відомо існування про « слабких ключів », при використанні яких зв'язок між відкритими та зашифрованими даними не маскується достатньо, і шифр порівняно просто розкривається.

Вичерпна відповідь на питання про критерії якості ключів та таблиць замін ГОСТу якщо і можна взагалі десь отримати, то тільки у розробників алгоритму. Відповідні дані не були опубліковані у відкритому друку. Однак згідно з встановленим порядком, для шифрування інформації, що має гриф, повинні бути використані ключові дані, отримані від уповноваженої організації. Непрямим чином це може свідчити наявність методик перевірки ключових даних на «вшивість». Якщо наявність слабких ключів у ГОСТі – дискусійне питання, наявність слабких вузлів заміни не викликає сумніву. Очевидно, що «тривіальна» таблиця замін, за якою будь-яке значення замінюється ним самим, є настільки слабкою, що при її використанні шифр зламується елементарно, яким би не був ключ.

Як уже було зазначено вище, критерії оцінки ключової інформації недоступні, проте на їх рахунок все ж таки можна висловити деякі загальні міркування.

Ключ

Ключ повинен бути масивом статистично незалежних бітів, що приймають рівною ймовірністюзначення 0 і 1. Не можна повністю виключити у своїй, деякі конкретні значення ключа може бути «слабкими», тобто шифр може забезпечувати заданий рівень стійкості у разі використання. Однак, імовірно, частка таких значень у загальній масі всіх можливих ключів дуже мала. Принаймні, інтенсивні дослідження шифру досі не виявили жодного такого ключа для жодної з відомих (тобто запропонованих ФАПСІ) таблиць замін. Тому ключі, вироблені за допомогою деякого датчика випадкових чисел, будуть якісними з ймовірністю, що відрізняється від одиниці на мізерно малу величину. Якщо ж ключі виробляються за допомогою генератора псевдовипадкових чисел, то генератор, що використовується, повинен забезпечувати зазначені вище статистичні характеристики, і, крім того, володіти високою криптостійкістю, - не меншою, ніж у самого ГОСТу. Іншими словами, завдання визначення відсутніх членів послідовності елементів, що виробляється генератором, не повинна бути простішою, ніж завдання розкриття шифру. Крім того, для відбракування ключів із поганими статистичними характеристиками можуть бути використані різні статистичні критерії. Насправді зазвичай вистачає двох критеріїв – для перевірки рівноймовірного розподілу бітів ключа між значеннями 0 і 1 зазвичай використовується критерій Пірсона («хі квадрат»), а для перевірки незалежності бітів ключа – критерій серій. Про згадані критерії можна прочитати у підручниках або довідниках з математичної статистики.

Найкращим підходом розробки ключів було б використання апаратних датчиків СЧ, проте це завжди прийнятно з економічних міркувань. При генерації невеликого за обсягом масиву ключової інформації розумною альтернативою використанню такого датчика є і широко використовується на практиці метод «електронної рулетки», коли чергова порція випадкових бітів, що виробляється, залежить від моменту часу натискання оператором деякої клавіші на клавіатурі комп'ютера. У цій схемі джерелом випадкових даних є користувач комп'ютера, точніше тимчасові характеристики його реакції. За одне натискання кнопки у своїй може бути вироблено лише кілька бітів випадкових даних, тому загальна швидкість вироблення ключовий інформації у своїй невелика – до кількох біт за секунду. Вочевидь, цей підхід годиться для отримання великих масивів ключів.

У разі, коли необхідно виробити великий за обсягом масив ключової інформації, можливе і дуже поширене використання різних програмних датчиків псевдовипадкових чисел. Оскільки від подібного датчика потрібні високі показники криптостійкості, природним є використання як нього генератора гами самого шифру - просто «нарізаємо» гаму, що виробляється шифром, на «шматки» потрібного розміру, для ГОСТу - по 32 байти. Звичайно, для такого підходу нам знадобиться «майстер-ключ», який ми можемо отримати описаним вище методом електронної рулетки, а за його допомогою, використовуючи шифр у режимі генератора гами, отримуємо масив ключової інформації потрібного нам обсягу. Так ці два способи вироблення ключів, – «ручний» та «алгоритмічний», – працюють у тандемі, доповнюючи один одного. Схеми генерації ключів у «малобюджетних» системах криптозахисту інформації практично завжди побудовані за таким принципом.

Таблиця замін

Таблиця замін є довготривалим ключовим елементом, тобто діє протягом набагато більше тривалого термінуніж окремий ключ. Передбачається, що вона є спільною всім вузлів шифрування у межах однієї системи криптографічного захисту. Навіть при порушенні конфіденційності таблиці замін стійкість шифру залишається надзвичайно високою і не знижується нижче за допустиму межу. Тому немає особливої ​​потреби тримати таблицю в секреті, і в більшості комерційних застосувань Держстандарту так воно й робиться. З іншого боку, таблиця замін є критично важливим елементом забезпечення стійкості всього шифру. Вибір неналежної таблиці може призвести до того, що шифр легко розкриватиметься відомими методами криптоаналізу. Критерії вироблення вузлів замін – таємниця за сімома печатками та ФАПСІ навряд чи їй поділиться з громадськістю в найближчому майбутньому. Зрештою, для того, щоб сказати, чи є дана конкретна таблиця замін хорошою чи поганою, необхідно провести величезний обсяг робіт – багато тисяч чоловіко- та машино-годин. Одного разу вибрана та використовувана таблиця підлягає заміні в тому і лише в тому випадку, якщо шифр з її використанням виявився вразливим до того чи іншого виду криптоаналізу. Тому найкращим виборомдля рядового користувача шифру буде взяти одну з кількох таблиць, які стали надбанням гласності. Наприклад, із стандарту на хеш-функцію, вона ж «центробанківська»; відомості про ці таблиці можна знайти у відкритому друку та навіть в інтернеті, якщо добре пошукати.

Для тих, хто не звик йти легкими шляхами, нижче наведено загальну схему отримання якісних таблиць:

  1. За допомогою тієї чи іншої методики виробляєте комплект із восьми вузлів замін із гарантованими характеристиками нелінійності. Таких методик є кілька, одна з них – використання так званих бент-функцій.
  2. Перевіряєте виконання найпростіших «критеріїв якості» – наприклад, опублікованих для вузлів заміни DES. Ось ще кілька загальних міркувань щодо цього: Кожен вузол замін може бути описаний четвіркою логічних функцій від чотирьох логічних аргументів. Якщо ці функції записані в мінімальній формі(Тобто з мінімально можливою довжиною виразу) виявляться недостатньо складними, такий вузол заміни відкидається. Крім того, окремі функції в межах усієї таблиці замін повинні відрізнятися один від одного достатньою мірою. На цьому етапі відсіваються багато свідомо неякісних таблиць.
  3. Для шифру з вибраними вами таблицями будуєте різні моделі раунду, що відповідають різним видам криптоаналізу, та вимірюєте відповідні «профільні» характеристики. Так, для лінійного криптоаналізу будуєте лінійний статистичний аналог раунду шифрування та обчислюєте "профільну" характеристику - показник нелінійності. Якщо вона виявляється недостатньою, таблиця замін відкидається.
  4. Нарешті, використовуючи результати попереднього пункту, піддаєте шифр з обраною вами таблицею інтенсивним дослідженням – спробі криптоаналізу всіма відомими методами. Саме цей етап є найбільш складним та трудомістким. Але якщо він зроблений якісно, ​​то з високим ступенем ймовірності можна констатувати, що шифр із обраними вами таблицями не буде розкритий простими смертними, і, не виключено, виявиться не по зубах спецслужбам.

Можна, однак, зробити набагато простіше. Вся справа в тому, що чим більше в шифрі раундів, тим менший вплив на стійкість шифру мають характеристики стійкості одного раунду. У ГОСТі аж 32 раунди - більше, ніж практично у всіх шифрах з аналогічною архітектурою. Тому для більшості побутових та комерційних застосувань буває достатньо отримати вузли замін як незалежні випадкові перестановки чисел від 0 до 15. Це може бути практично реалізовано, наприклад, за допомогою перемішування колоди з шістнадцяти карт, за кожною з яких закріплено одне із значень вказаного діапазону.

Щодо таблиці замін необхідно відзначити ще один цікавий факт. Для оборотності циклів шифрування «32-З» і «32-Р» не потрібно, щоб вузли замін були перестановками чисел від 0 до 15. Все працює навіть у тому випадку, якщо у вузлі замін є елементи, що повторюються, і заміна, яка визначається таким вузлом , Необоротна, - проте в цьому випадку знижується стійкість шифру. Чому це саме так, не розглядається у цій статті, проте у самому факті переконатися нескладно. Для цього достатньо спробувати спочатку зашифрувати, а потім розшифрувати блок даних, використовуючи таку «неповноцінну» таблицю замін, вузли якої містять значення, що повторюються.

Варіації на тему ГОСТу

Дуже часто для використання в системі криптографічного захисту даних потрібен алгоритм з більшою, ніж у ГОСТу швидкодією реалізації, і при цьому не потрібна така криптостійкість. Типовим прикладом подібних завдань є різноманітних електронні біржові торгові системи, управляючі торговими сесіями у часі. Тут від використаних алгоритмів шифрування потрібно, щоб було неможливо розшифрувати оперативні дані системи протягом сесії (дані про виставлені заявки, про укладені угоди і т.п.), після закінчення яких ці дані, як правило, вже марні для зловмисників. Інакше кажучи, потрібна гарантована стійкість лише кілька годин – така типова тривалість торгової сесії. Зрозуміло, що використання повноважного ГОСТу у цій ситуації було б стріляниною з гармати по горобцях.

Як зробити в цьому та аналогічному йому випадках, щоб збільшити швидкодію шифрування? Відповідь лежить на поверхні – використовувати модифікацію шифру з меншою кількістю основних кроків (раундів) у базових циклах. У скільки разів ми зменшуємо кількість раундів шифрування, у стільки ж разів зростає швидкодія. Зазначеної зміни можна досягти двома шляхами – зменшенням довжини ключа та зменшенням числа «циклів перегляду» ключа. Згадайте, що кількість основних кроків у базових циклах шифрування дорівнює N=n·m, де n- Число 32-бітових елементів у ключі, m- Число циклів використання ключових елементів, у стандарті n=8, m=4. Можна зменшити будь-яке із цих чисел, але найпростіший варіант – зменшувати довжину ключа, не чіпаючи схеми його використання.

Зрозуміло, що платою за прискорення роботи буде зниження стійкості шифру. Основна труднощі у тому, що досить складно більш-менш точно оцінити величину цього зниження. Очевидно, єдино можливий спосібзробити це – провести дослідження варіантів шифру з редукованими циклами криптографічного перетворення «за повною програмою». Зрозуміло, що, по-перше, це вимагає використання закритої інформації, якою володіють лише розробники ДСТУ, і, по-друге, дуже трудомістко. Тому ми зараз спробуємо дати оцінку, дуже грубу, виходячи лише із загальних закономірностей.

Що стосується стійкості шифру до злому «екстенсивними» методами, тобто до «перебірної» атаки, то тут все більш менш ясно: ключ розміром 64 біта знаходиться десь на межі доступності цьому виду атаки, шифр з ключем 96 біт і вище ( пам'ятайте, що ключ повинен містити ціле число 32-бітових елементів) цілком стійкий проти нього. Дійсно, кілька років тому колишній стандарт шифрування США, DES, був неодноразово зламаний перебірним шляхом, спочатку його зламала обчислювальна мережа, організована з урахуванням глобальної мережі Інтернет, та був – спеціалізована, тобто. сконструйована спеціально для цього обчислювальна машина. Приймемо, що стандартний варіант ДСТУ при програмній реалізації на сучасних процесорах працює вчетверо швидше за DES. Тоді 8-раундовий «редукований ГОСТ» працюватиме у 16 ​​разів швидше за DES. Приймемо також, що за час, що минув з моменту злому DES, продуктивність обчислювальної техніки відповідно до закону Мура зросла вчетверо. Отримуємо в результаті, що зараз перевірка одного 64-бітового ключа для «редукованого ГОСТу» з вісьмома циклами здійснюється в 64 рази швидше, ніж свого часу виконувалася перевірка одного ключа DES. Таким чином, перевага такого варіанту ГОСТу перед DES за трудомісткістю перебірної атаки скорочується з 264–56 = 28 = 256 до 256 / 64 = 4 разів. Погодьтеся, це дуже ілюзорна відмінність, майже нічого.

Набагато складніше оцінити стійкість ослаблених модифікацій ГОСТу до «інтенсивних» способів криптоаналізу. Проте загальну закономірність можна простежити тут. Справа в тому, що «профільні» характеристики багатьох найбільш сильних на сьогоднішній момент видів криптоаналізу залежать експоненційно від числа раундів шифрування. Так, для лінійного криптоаналізу (ЛКА) це буде характеристика лінійності L :

де C та – константи, R – число раундів. Аналогічна залежність існує й у диференціального криптоаналізу. За своїм «фізичним змістом» всі характеристики такого роду – ймовірність. Зазвичай обсяг необхідних для криптоаналізу вихідних даних та його трудомісткість обернено пропорційні подібним характеристикам. Звідси випливає, що це показники трудомісткості зростають експоненційно зі зростанням числа основних кроків шифрування. Тому при зниженні числа раундів у кілька разів трудомісткість найбільш відомих видів аналізу зміниться як, дуже приблизно і грубо, корінь цього ступеня з початкової кількості. Це дуже велике падіння стійкості.

З іншого боку, ДЕРЖСТАНДАРТ проектувався з великим запасом міцності і на сьогоднішній день стійкий до всіх відомих видів криптоаналізу, включаючи диференціальний та лінійний. Стосовно ЛКА це означає, що для його успішного проведення потрібно більше пар «відкритий блок – зашифрований блок», ніж «існує в природі», тобто більше 2 64 . З урахуванням сказаного вище це означає, що для успішного ЛКА 16-раундового ГОСТу потрібно не менше блоків або 235 байтів або 32 Гбайта даних, а для 8-раундового - не менше блоків або 2 19 байтів або 0.5 Мбайт.

Висновки з усього, сказаного вище, наведено в наступній таблиці, що узагальнює характеристики редукованих варіантів ГОСТу.

Число раундів Розмір ключа, біт Індекс швидко-дії Ймовірні характеристики шифру (дуже груба оцінка)
24 192 1,33 Стійкий до більшості відомих видів КА або перебувати на межі стійкості. Практична реалізація КА неможлива через високі вимоги до вихідних даних та трудомісткості.
16 128 2 Теоретично нестійкий до деяких видів криптоаналізу, проте їхня практична реалізація в більшості випадків утруднена через високі вимоги до вихідних даних та трудомісткості.
12 95 2,67 Нестійкий до деяких відомих видів криптоаналізу, проте підходить для забезпечення таємності невеликих обсягів даних (до десятків-сот Кбайт) на короткий термін.
8 64 4 Нестійкий до деяких відомих видів криптоаналізу, проте підходить для забезпечення таємності невеликих обсягів даних (до десятків Кбайт) на короткий термін.

Два останні варіанти, з 12 і 8 раундами, здатні забезпечити вельми обмежений у часі захист. Їх використання виправдане лише в завданнях, де потрібна лише короткострокова секретність даних, що закриваються, близько декількох годин. Можлива сфера застосування цих слабких варіантів шифру – закриття UDP-трафіку електронних біржових торгових систем. У цьому випадку кожен пакет даних (datagram, середня D з абревіатури UDP) шифрується на окремому 64-бітовому ключі, а сам ключ шифрується на сеансовому ключі (ключі, область дії якого - один сеанс зв'язку між двома комп'ютерами) і передається разом з даними.

Перш ніж закінчити з редукованими варіантами ГОСТу скажу, що всі наведені вище міркування носять спекулятивний характер. Стандарт забезпечує стійкість лише для одного, 32-раундового варіанта. І ніхто не може дати вам гарантій, що стійкість редукованих варіантів шифру до злому буде змінюватися вказаним вище чином. Якщо ви все ж таки зважилися їх використовувати у своїх розробках, пам'ятайте, що ви ступили на дуже хиткі ґрунти, які можуть у будь-який момент піти з-під ваших ніг. Якщо питання швидкості шифрування є для вас критичними, може, варто подумати про використання більш швидкого шифру або більше потужного комп'ютера? Ще одне міркування, з якого це варто зробити, полягає в тому, що ослаблені варіанти ГОСТу будуть максимально чутливі до якості вузлів заміни, що використовуються.

У питання, що розглядається, є і Зворотній бік. Що якщо швидкість шифрування некритична, а вимоги до стійкості дуже жорсткі? Підвищити стійкість ДСТУ можна двома шляхами – умовно назвемо їх «екстенсивний» та «інтенсивний». Перший – це ні що інше, як просте збільшення числа раундів шифрування. Мені не зовсім зрозуміло, навіщо це може реально знадобитися, адже вітчизняний стандарт без цього забезпечує необхідну стійкість. Втім, якщо ви страждаєте на параної більше необхідного рівня (а всі «захисники інформації» просто зобов'язані нею страждати, це умова профпридатності така, питання тільки в тяжкості випадку:), це допоможе вам трохи заспокоїтися. Якщо ви не впевнені в цьому КГБ-шному шифрі або використовуваної вами таблиці замін, просто подвоїть, вчетверіть, і т.д. число раундів – кратність виберіть, виходячи з тяжкості вашого випадку. Зазначений підхід дозволяє реально збільшити стійкість шифру – якщо раніше криптоаналіз був просто неможливим, то тепер він неможливий у квадраті!

Хитрішим і цікавішим є питання, а чи можна збільшити стійкість шифру, не змінюючи кількості та структури основних кроків шифрування. Як не дивно, відповідь на нього позитивна, хоча ми знову ступаємо на хиткій грунт спекуляцій. Річ у тім, що у ГОСТі основному етапі перетворення передбачається виконання заміни 4 на 4 біт, але в практиці (мова про це ще попереду) всі програмні реалізації виконують заміну побайтно, тобто. 8 на 8 біт - так робиться з міркувань ефективності. Якщо відразу спроектувати таку заміну як 8-бітову, то ми суттєво покращимо характеристики одного раунду. По-перше, збільшиться «дифузійна» характеристика або показник «лавинності» – один біт вихідних даних та/або ключа впливатиме на більшу кількість біт результату. По-друге, для великих за розміром вузлів заміни можна отримати більш низькі диференціальну та лінійну характеристики, зменшивши тим самим схильність до шифру однойменним видам криптоаналізу. Особливо актуально це для редукованих циклів ГОСТу, а для 8 та 12-раундових варіантів такий крок просто необхідний. Це трохи компенсує втрату стійкості в них від зменшення кількості раундів. Що ускладнює використання цього прийому - так це те, що конструювати подібні «збільшені» вузли заміни вам доведеться самостійно. А також те, що більші вузли взагалі конструювати помітно важче, ніж менші за розміром.

Нестандартне використання стандарту.

Безумовно, основне призначення криптоалгоритмів ГОСТ – це шифрування та імітозахист даних. Однак їм можна знайти й інші застосування, пов'язані, звісно, ​​із захистом інформації. Коротко розповімо про них:

1. Для шифрування в режимі гамування ГОСТ передбачає вироблення криптографічної гами - послідовності біт з хорошими статистичними характеристиками, що має високу криптостійкість. Далі ця гама використовується для модифікації відкритих даних, у результаті виходять дані зашифровані. Однак це не єдине можливе застосування криптографічної гами. Справа в тому, що алгоритм її вироблення - це генератор послідовності псевдовипадкових чисел (ГППСЧ) з чудовими характеристиками. Звичайно, використовувати такий ГППСЧ там, де потрібні тільки отримання статистичних характеристик послідовності, що виробляється, а криптостійкість не потрібна, не дуже розумно - для цих випадків є набагато більш ефективні генератори. Але для різних застосувань, пов'язаних із захистом інформації, таке джерело буде дуже доречним:

  • Як зазначалося вище, гаму можна використовувати як «сировину» вироблення ключів. Для цього потрібно лише отримати відрізок гами потрібної довжини – 32 байти. У такий спосіб ключі можна виготовляти в міру необхідності і їх не потрібно буде зберігати, якщо такий ключ знадобиться повторно, буде досить легко його виробити знову. Треба тільки буде згадати, на якому ключі він був вироблений вихідно, яка використовувалася синхропосилання і з якого байта виробленої гами починався ключ. Вся інформація, крім використаного ключа, є несекретною. Даний підхід дозволить легко контролювати досить складну та розгалужену систему ключів, використовуючи лише один «майстер-ключ».
  • Аналогічно попередньому, гаму можна використовувати як вихідну «сировину» для вироблення паролів. Тут може виникнути питання, навіщо взагалі потрібно їх генерувати, чи не простіше при необхідності їх просто вигадувати. Неспроможність такого підходу була наочно продемонстрована серією інцидентів у комп'ютерних мережах, найбільшим з яких був добовий параліч інтернету в листопаді 1988 року, викликаний «хробаком Морріса». Одним із способів проникнення зловмисної програми на комп'ютер був підбір паролів: програма намагалася увійти в систему, послідовно перебираючи паролі зі свого внутрішнього списку в кілька сотень, причому в значній частині випадків їй це вдавалося зробити. Фантазія людини з вигадування паролів виявилася дуже бідною. Саме тому в тих організаціях, де безпеці приділяється належна увага, паролі генерує та роздає користувачам системний адміністраторз безпеки. Вироблення паролів трохи складніше, ніж вироблення ключів, тому що при цьому "сиру" двійкову гаму необхідно перетворити до символьного вигляду, а не просто "нарізати" на шматки. Крім того, окремі значення, можливо, доведеться відкинути, щоб забезпечити рівну можливість появи всіх символів алфавіту в паролі.
  • Ще один спосіб використання криптографічної гами – гарантоване затирання даних на магнітних носіях. Річ у тім, що навіть за перезапису інформації на магнітному носії залишаються сліди попередніх даних, які може відновити відповідна експертиза. Для знищення цих слідів такий перезапис треба виконати багаторазово. Виявилося, що потрібно перезаписувати інформацію на носій менше разів, якщо за такої процедури використовувати випадкові або псевдовипадкові дані, які залишаться невідомими експертам, які намагаються відновити затерту інформацію. Гамма шифру тут буде дуже доречним.

2. Не тільки криптографічна гамма, а й саме криптографічне перетворення може бути використане для потреб, безпосередньо не пов'язаних із шифруванням:

  • Ми знаємо, що один із таких варіантів використання ГОСТу – вироблення імітівставки для масивів даних. Однак на базі будь-якого блочного шифру, і ГОСТу в тому числі, досить легко побудувати схему обчислення односторонньої хеш-функції, яка називається також у літературі MDC, що в різних джерелах розшифровується як код виявлення змін / маніпуляцій (M odification/ M anipulation D etection C ode) або дайджест повідомлення (M essage D igest C ode). Перше розшифрування з'явилося в літературі набагато раніше, друге, коротше, я думаю, придумали ті, кому виявилося не під силу запам'ятати першу:), – це був жарт. MDC може безпосередньо використовуватися в системах імітозахисту в якості аналога імітівставки, що не залежить, однак, від секретного ключа. Крім того, MDC широко використовується у схемах електронно-цифрового підпису(ЕЦП), адже більшість таких схем сконструйовано таким способом, що зручно підписувати блок даних фіксованого розміру. Як відомо, на базі обговорюваного стандарту ГОСТ 28147-89 побудовано стандарт Російської Федерації на обчислення односторонньої хеш-функції ГОСТ Р34.11-94.
  • Менш відомо, що на базі будь-якого блочного шифру, і ГОСТу в тому числі, може бути побудована цілком функціональна схема ЕЦП, із секретним ключем підпису та відкритою перевірочною комбінацією. З ряду причин ця схема не набула широкого практичного поширення, проте в окремих випадках досі може розглядатися як вельми приваблива альтернатива домінуючим нині у світі «математичним» схемам ЕЦП.

Література

Системи опрацювання інформації. Захист криптографічний. Алгоритм криптографічного перетворення ГОСТ 28147-89. Держ. Ком. СРСР за стандартами, М., 1989. ftp://ftp.wtc-ural.ru/pub/ru.crypt/GOST-28147
Шеннон Клод. Математична теорія секретних систем. У збірнику «Роботи з теорії інформації та кібернетиці», М., ІЛ, 1963, с. 333-369. http://www.enlight.ru/crypto/articles/shannon/shann__i.htm
Зображення щодо Federal Information Processing Standard (FIPS) 197, Advanced Encryption Standard (AES), Federal Register Vol. 66, No. 235 / Thursday, December 6, 2001 / Notices, pp 63369-63371. http://csrc.nist.gov/encryption/aes/
Файстель Хорст. Криптографія та комп'ютерна безпека. Переклад А.Винокурова за виданням Horst Feistel. Cryptography and Computer Privacy, Scientific American, May 1973, Vol. 228, No. 5, pp. 15-23. http://www.enlight.ru/crypto/articles/feistel/feist_i.htm
Шнайєр Брюс. Прикладна криптографія. 2-ге вид. Протоколи, алгоритми та вихідні тексти мовою Сі., М., «Тріумф», 2002 http://www.ssl.stu.neva.ru/psw/crypto/appl_ukr/appl_cryp.htm
Menezes Alfred, van Oorschot Paul, Vanstone Scott. Handbook of applied cryptography. ttp://www.cacr.math.uwaterloo.ca/hac/
Винокуров Андрій. Як влаштований блоковий шифр? Рукопис. http://www.enlight.ru/crypto/articles/vinokurov/blcyph_i.htm
Винокуров Андрій. Випуски по криптографії для електронного журналу iNFUSED BYTES online. http://www.enlight.ru/crypto/articles/ib/ib.htm
Винокуров Андрій, Применко Едуард. Текст доповіді «Про програмну реалізацію стандартів шифрування РФ і США», конференція з інформатизації, Москва, МІФІ, 28-29 січня 2001р. Опубліковано у матеріалах конференції.
Інформаційна технологія. Криптографічний захист інформації. Функція хешування ГОСТ Р34.11-94, Держстандарт РФ, М., 1994.

Алгоритм шифрування ГОСТ 28147-89. Метод простої заміни. - Архів WASM.RU

«Поки ти живий, не вмирай, на цей світ поглянь.
У багатьох душа мертва – вони мертві всередині.
Але ходять і сміються, не знаючи, що їх немає,
Не квапи свою смертну годину» – вона сказала мені.

Арія, «Там високо»

2.1 Мережі Файстеля.
2.2 Блоковий шифр ГОСТ 28147-89

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

3.3 Базові цикли:32-З, 32-Р.

4.1 Реалізація основного кроку криптоперетворення
4.2 Збільшення швидкодії алгоритму
5. Вимоги до ключової інформації
6. Список використаної літератури
7. Подяки.

Вступ.

Даний документ є моєю спробою описати метод простої заміни алгоритму шифрування ГОСТ 28147-89 найпростішою, проте технічно-грамотною мовою. Про те, наскільки це в мене вийшло, читач скаже свою думку після того, як прочитає перші шість пунктів.

Для того, щоб моя праця дала більше користі, рекомендую озброїтися працями авторів, зазначених у списку використаної літератури. Рекомендується також калькулятор, щоб у ньому були функції з розрахунку операції XOR, т.к. Прочитання статті передбачає, що читач має намір вивчити цей алгоритм шифрування. Хоча як довідковий посібник вона теж підійде, але я писав цю статтю саме як навчальну.

Попередні відомості про блокові шифри.

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

Історія розвитку блокових шифрів асоціюється з початком 70-х років, коли компанія IBM усвідомивши необхідність захисту інформації при передачі даних каналами зв'язку ЕОМ, приступила до виконання власної програми наукових досліджень, присвячених захисту інформації в електронних мережах, у тому числі і криптографії.

Групу дослідників – розробників фірми IBM, яка приступила до дослідження систем шифрування із симетричною схемою використання ключів, очолив лікар Хорст Файстель.

2.1 Мережі Файстеля

Запропонована Файстелем архітектура нового методу шифрування в класичній літературі отримала назву «Архітектура Файстеля», але на Наразіу російській та зарубіжній літературі використовується більш усталений термін - "мережа Файстеля" або Feistel `s NetWork. Згодом по цій архітектурі було побудовано шифр «Люцифер» - який був опублікований і викликав нову хвилю інтересу до криптографії загалом.

Ідея архітектури "мережі Файстеля" полягає в наступному: вхідний потік інформації розбивається на блоки розміром n бітів, де n парне число. Кожен блок ділиться на частини – L і R, далі ці частини подаються в ітеративний блоковий шифр, у якому результат j-го етапу визначається результатом попереднього етапу j-1! Сказане можна проілюструвати з прикладу:

Рис. 1

Де, функція А – це основна дія блокового шифру. Може бути простою дією, такою як операція XOR, а може мати більш складний вигляд бути послідовністю ряду простих дій – додавання по модулю, зрушення вліво, заміна елементів і т.д., у сукупності ці прості дії утворюють так званий – основний крок криптоперетворення.

Слід зазначити, що ключовими елементами роботи функції є подача елементів ключів та операція XOR і тому наскільки добре продумані робота цих операцій, говорить про криптостойкости шифру загалом.

Щоб ідея мереж Файстеля була остаточна зрозуміла, розглянемо найпростіший випадок зображений на Рис. 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.

2. Ця операція в літературі називається mod 2, мовою асемблера реалізується командою XOR. Але її правильніша назва mod 2 1 . Без цієї унікальної операції навряд чи можна побудувати швидкий алгоритм шифрування, що легко реалізується, і при цьому, щоб він був ще досить криптостійким. Унікальність цієї операції полягає в тому, що вона собі зворотна! Наприклад, якщо число А по XORити з числом Б, в результаті отримаємо, надалі достатньо переXORити числа Б і В між собою, щоб отримати колишнє значення А!

У цій операції ми отримали 1010 маючи числа 1110 і 0100, щоб отримати назад 1110, достатньо переXORрити між собою числа 0100 і 1010! Докладніше про цю операцію можна почитати у статті, яка вкладена на сайті www.wasm.ru, « Елементарний посібник зCRC_алгоритмам виявлення помилок» автор, якої Ross N. Williams. У цій праці є пункт - 5. Двійкова арифметика без урахування переносів». Ось саме в цій статті описана операція xor!Я вигукую тому, що в цій статті ця операція так розписана, що читач не просто розуміє як працює ця операція, він навіть починає її бачити, чути та відчувати!

3. Ця дія необхідна, щоб при розшифровуванні із шифрограми можна було отримати вихідні значення.

2.2 Блоковий шифр ГОСТ 28147-89

Алгоритм шифрування ГОСТ 28147 - 89 відноситься до розряду блокових шифрів працюючих по архітектурі збалансованих мереж Файстеля, де дві частини обраного блоку інформації мають рівний розмір. Алгоритм був розроблений у надрах восьмого відділу КДБ перетвореного нині у ФАПСІ і був закріплений як стандарт шифрування Російської Федерації ще 1989 року за СРСР.

Для роботи даного методуалгоритму необхідно розбити інформацію на блоки розміром 64 біти. Згенерувати або ввести в систему шифрування наступну ключову інформацію: ключ і таблицю замін. До вибору ключа та таблиці замін при шифруванні слід поставитися дуже серйозно, т.к. саме це є фундамент безпеки вашої інформації. Про те, які вимоги накладаються на ключ, та таблицю замін дивись пункт «Вимоги до ключової інформації».

При розгляді способу ми не загострюватимемо цьому уваги, т.к. ця стаття, як я вже говорив вище, написана з метою навчити читача, шифрувати дані за методом простої заміни даного алгоритму шифрування, але ми обов'язково торкнемося цього питання в кінці статті.

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

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

Як я вже говорив вище, у шифруванні даних активну участь беруть:

3.1.1. Ключ – це послідовність восьми елементів розміром 32 біти кожен. Далі будемо позначати символом До, а елементи з яких він складається – k1, k2, k3, k4, k5, k6, k7, k8.

3.1.2 Таблиця замін – матриця з восьми рядків та шістнадцяти стовпців, надалі – Hij. Кожен елемент на перетині рядка i та стовпця j займає 4 біти.

3.2 Основний крок криптоперетворення

Основною дією в процесі шифрування є основний крок криптоперетворення. Це ніщо інше, як дія з шифрування даних за певним алгоритмом, тільки назву розробники ввели аж надто громіздке.

Перш ніж почати шифрувати блок розбивають на дві частини L і R, по 32 біта кожна. Вибирають елемент ключа і потім подають ці дві частини блоку, елемент ключа таблицю замін у функцію основного кроку, результат основного кроку це одна ітерація базового циклу, про який йтиметься в наступному пункті. Основний крок складається з наступних дій:

  1. Додавання частина блоку R підсумовується з елементом ключа K по mod 2 32 . Про таку операцію я описав вище, тут теж тільки показник ступеня не «4», а «32» - результат цієї операції надалі позначатиму Smod.
  2. Отриманий раніше результат Smod ділимо на чотири бітові елементи s7, s6, s5, s4, s3, s2, s1, s0 і подаємо у функцію заміни. Заміна відбувається наступним чином: вибирається елемент Smod - s i , спочатку починаємо з молодшого елемента, і замінюємо значенням з таблиці замін по i - тому рядку і стовпцю, на який вказує значення елемента s i . Переходимо до si +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 – це «тип» базового циклу, тобто. про що йдеться, про «З» ашифрування або «Р» асшифрування даних.

Базовий цикл шифрування 32-З складається з 32 основних кроків криптоперетворення. У функцію реалізуючу дії кроку подають блок N і елемент ключа До, перший крок відбувається з к1, другий над отриманим результатом з елементом к2 і т.д. за наступною схемою:

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-Р відбувається аналогічним чином, але елементи ключа подаються у зворотній послідовності:

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, візьмемо ключ:

K = ' as28 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 і елемента ключа – це цілком могло б статися, і тоді б ми його проігнорували, і надалі використовували тільки біти, помічені жовтим кольором.

Таку операцію я виконую командою асемблера add:

; 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 h.

Починаємо замінювати s1, тобто. четвірку. Використовуючи перший рядок та четвертий стовпець (s1 = 4!). Дивимося на малюнок:

Рис. 7

Тепер значення Smod, не 667939 4 5h, 667939 2 5h. Я припускаю, що тепер алгоритм заміни читачеві зрозумілий, і я можу сказати, що після кінцевого результату Ssimple матиме наступне значення – 11e10325h.

Про те, як це найпростіше реалізувати у вигляді команд асемблера, я розповім пізніше в наступному пункті, після того, як розповім про розширену таблицю.

  1. Отримане значення Ssimple ми маємо зрушити на 11 біт вліво.

Рис. 8

Як видно, ця дія досить проста, і реалізується однією командою мови асемблера – rolта результат цієї операції Srol дорівнює 0819288Fh.

4. Тепер залишається частина L нашого блоку інформації по XORити зі значенням 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 - З можна представити наступним чином:

До 32-З =

'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 - З. Тим самим я збільшив пам'ять, необхідну під ключ, але позбавив себе деяких процесів мислення, які мені були не потрібні, і збільшив швидкість роботи алгоритму, рахунок зменшення часу звернення до пам'яті! Тут я описав тільки ключ для 32 - З, для циклу 32 - Р я надійшов аналогічно, але використовуючи іншу схему подачі елементів, яку я теж описував у пункті « Базові цикли: "32-З", "32-Р».

Настав час описати реалізацію роботи функції замін, як я обіцяв вище. Не міг описати раніше, т.к. це потребує введення нового поняття – розширена таблиця замін. Я не зможу пояснити, що це таке. Натомість я вам покажу її, а ви вже самі сформулюйте для себе, що ж це таке – розширена таблиця замін?

Отже, щоб розібратися, що таке розширена таблиця замін нам знадобиться таблиця замін, наприклад візьму ту, що зображено на рис. 3.

Наприклад, нам потрібно було замінити число 66793940h. Подаю його в наступному вигляді:

Рис. 9

Тепер, якщо взяти елементи 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,[покласти число, яке потрібно замінити]

add ebx,100h ;перехід до двох наступних вузлів

sub ebx,300h; щоб надалі ebx показував на таблицю

Тепер ще одна особливість, попередніми діями ми не лише замінили, а й зрушили число на 8 біт ліворуч! Нам залишається тільки зрушити число ще на 3 біти вліво:

і ми отримуємо результат операції rol eax,11!

Більше я нічого не можу додати по оптимізації, єдине, що можу наголосити на тому, що я говорив вище – використовуйте регістри частіше, ніж звернення до пам'яті. Думаю ці слова лише для новачків, досвідчені і без моїх слів це чудово розуміють.

Вимоги до ключової інформації.

Як сказано у статті Андрія Винокурова, ключ обирають за двома критеріями:

Критерій рівноймовірного розподілу бітів між значеннями 1 і 0. Зазвичай як критерій рівноймовірного розподілу бітів виступає критерій Пірсона («хі-квадрат»).

Це означає ключем, в принципі, може будь-яке число. Тобто, при формуванні чергового біта ключа ймовірність його ініціалізації одиницею або нулем 50/50!

Прошу помітити, що ключ із восьми елементів, кожен по 32 біти, таким чином всього в ключі 32*8 = 256 бітів і кількість можливих ключів 2256 ! Тебе це не вражає?

Критерій серії.

Якщо ми подивимося на наш ключ, який я навів у пункті « 4.1 Реалізація основного кроку криптоперетворення», то ви помітите, що справедливий наступний запис:

Рис. 10

Однією фразою значення 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 групи залишаються незмінними! Криптоаналітику є, де розвернутися З урахуванням усіх цих вимог простим перебором («в лоб») було знайдено таблиці перестановки відповідні зазначеній теорії (на сьогодні – 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. Стаття Андрія Винокурова:

Алгоритм шифрування ГОСТ 28147-89, його використання та реалізація

для комп'ютерів Intel X86.

Тут і вихідні коди, з реалізації алгоритму шифрування.

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

Криптографія та комп'ютерна безпека.

(можна знайти за тією ж адресою, що і попередню статтю)

  1. Ross N. Williams:

Елементарний посібник з CRC алгоритмів виявлення помилок

Викладено на сайті www.wasm.ru.

Подяки.

Хотілося б висловити подяку всім відвідувачам форуму www.wasm.ru. Але особливо хотілося б подякувати ChS, який зараз відомий, як SteelRat, він допоміг мені зрозуміти такі речі, чого я б, напевно, ніколи б не зрозумів, а також допомогу при написанні пункту: « Вимоги до ключової інформації», основна частина цього пункту була написана ним. Також глибоко вдячний співробітнику КДТУ ім. О.М. Туполєва Анікіну Ігореві В'ячеславовичу і гріх було б не відзначити Кріса Касперскі, за те, що він є і Volodya/wasm.ru за його настанови. Ох, і дістається мені від нього. Також хочу відзначити Sega-Zero / Callipso зате, що доніс до мого розуму деякі математичні нетрі.

Це, мабуть, усе, що я хотів би сказати вам.

Буду вдячний за критику чи питання, пов'язані з цією статтею чи просто поради. Мої контактні дані: [email protected], ICQ - 337310594.

З повагою: Evil`s Interrupt.

PS: Цією статтею я не намагався когось перевершити. Вона була написана з наміром, полегшити вивчення ГОСТу і якщо у вас вийшли труднощі, то це не означає, що я винен у цьому. Будь розумними, і наберіться терпіння, всього вам доброго!

Алгоритм ГОСТ 28147-89

ГОСТ 28147-89 - радянський та російський стандарт симетричного шифрування, введений у 1990 році, також є стандартом СНД. Повна назва - «ГОСТ 28147-89 Системи обробки інформації. Захист криптографічний. Алгоритм криптографічного перетворення».

Рис. 4.

Блоковий шифроалгоритм. При використанні методу шифрування з гамуванням може виконувати функції потокового шифроалгоритму. ГОСТ 28147-89 - блоковий шифр з 256-бітним ключем і 32 циклами перетворення, що оперує 64-бітними блоками. Основа алгоритму шифру – мережа Фейстеля. Виділяють чотири режими роботи ГОСТ 28147-89: простий заміни, гамування, гамування зі зворотним зв'язком, режим вироблення імітівставки.

Переваги алгоритму: безперспективність силової атаки, ефективність реалізації та відповідно висока швидкодія на сучасних комп'ютерах, наявність захисту від нав'язування хибних даних (вироблення імітівставки) та однаковий цикл шифрування у всіх чотирьох алгоритмах ГОСТу, більший ключу порівнянні з алгоритмом DESX.

Недоліки алгоритму: Основні проблеми ДСТУ пов'язані з неповнотою стандарту в частині генерації ключів та таблиць замін. Вважається, що у ГОСТу існують «слабкі» ключі та таблиці замін, але в стандарті не описуються критерії вибору та відсіву «слабких». Також стандарт не специфікує алгоритму генерації таблиці замін (S-блоків). З одного боку, це може бути додатковою секретною інформацією (крім ключа), а з іншого, порушує ряд проблем: не можна визначити криптостійкість алгоритму, не знаючи заздалегідь таблиці замін; реалізації алгоритму від різних виробників можуть використовувати різні таблиці замін та можуть бути несумісні між собою; можливість навмисного надання слабких таблиць заміни ліцензуючими органами РФ.

Переваги IDEA перед аналогами

У програмній реалізації на Intel486SX у порівнянні з DES IDEA вдвічі швидше, що є суттєвим підвищенням швидкості, довжина ключа у IDEA має розмір 128 біт, проти 56 біт у DES, що є гарним покращенням проти повного перебору ключів. Імовірність використання слабких ключів дуже мала і становить 1/2 64 . IDEA швидше за алгоритм ГОСТ 28147-89 (у програмній реалізації на Intel486SX). Використання IDEA у паралельних режимах шифрування на процесорах Pentium III та Pentium MMX дозволяє отримувати високі швидкості. У порівнянні з фіналістами AES, 4-way IDEA лише трохи повільніше, ніж RC6 та Rijndael на Pentium II, але швидше, ніж Twofish та MARS. На Pentium III 4-way IDEA навіть швидше за RC6 і Rijndael. Перевагою також є хороша вивченість та стійкість до загальновідомих засобів криптоаналізу.

Відомий дослідник, основоположник алгебраїчного криптоаналізу Ніколя Куртуа стверджує, що блоковий шифр ДЕРЖСТАНДАРТ, який найближчим часом мав стати міжнародним стандартом, фактично зламаний і очікує надалі безлічі публікацій, які мають розвинути його ідеї про нестійкість цього алгоритму.

Далі наведено короткі витяги з цієї роботи, яку можна розглядати як алармістський випад у розпалі міжнародної стандартизації (подібними перебільшеннями автор був відомий і щодо AES, проте його роботи тоді мали великий теоретичний вплив на криптоаналіз, але так і не привели на сьогодні до практичних атакам на сам AES). Але, можливо, це і реальне попередження про початок етапу літака, що "пікірує в штопор", яке може закінчитися крахом національного стандарту шифрування, як це було з алгоритмом хешування SHA-1 і алгоритмом хешування "де-факто" MD5.

ДЕРЖСТАНДАРТ 28147-89 був стандартизований в 1989 році і вперше став офіційним стандартом захисту конфіденційної інформації, але специфікація шифру залишалася закритою. У 1994 році стандарт було розсекречено, опубліковано та переведено на англійська мова. За аналогією з AES (і на відміну від DES), ГОСТ допущено до захисту секретної інформаціїбез обмежень, відповідно до того, як це зазначено у російському стандарті. Т.о. ГОСТ – це не аналог DES, а конкурент 3-DES із трьома незалежними ключами або AES-256. Очевидно, що ГОСТ - це досить серйозний шифр, що задовольняє військовим критеріям, створений з розрахунком на найсерйозніші застосування. Принаймні два набори S-блоків ДСТУ були ідентифіковані на основі додатків, які використовуються російськими банками. Ці банки потребують проведення секретних комунікацій із сотнями філій та захисту мільярдів доларів від шахрайських розкрадань.

ГОСТ - це блоковий шифр із простою структурою Файстеля, з розміром блоку 64 біта, 256-бітним ключем та 32 раундами. Кожен раунд містить додавання з ключем по модулю 2^32, набір із восьми 4-бітних S-блоків і простий циклічний зсув на 11 бітів. Особливістю ДСТУ є можливість зберігання S-блоків у секреті, що можна представити як другий ключ, що збільшує ефективний ключовий матеріал до 610 бітів. Один набір S-блоків був опублікований в 1994 в рамках специфікації хеш-функції ГОСТ-Р 34.11-94 і, як писав Шнайєр, використовувався Центральним Банком Російської Федерації. Він також увійшов до стандарту RFC4357 у частині "id-GostR3411-94-CryptoProParamSet". У вихідних кодівНаприкінці книги Шнайєра була помилка (у порядку S-блоків). Найбільш точну еталонну реалізацію споконвічно російського походження сьогодні можна зустріти в бібліотеці OpenSSL. Якщо десь застосовуються секретні S-блоки, то вони можуть бути вилучені з програмних реалізацій та мікросхем, за фактом чого були опубліковані відповідні роботи.

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

На додаток до дуже великого розміру ключа, GOST має значно нижчу вартість виконання порівняно з AES і будь-якими подібними системами шифрування. Насправді він коштує набагато менше AES, якому потрібно вчетверо більше апаратних логічних вентилів заради значно меншого заявленого рівня безпеки.

Не дивно, що ГОСТ став інтернет-стандартом, зокрема, він включений до багатьох криптобібліотеків, таких як OpenSSL і Crypto++, і стає все популярнішим за межами країни свого походження. У 2010 році ДЕРЖСТАНДАРТ був заявлений на стандартизацію ISO як всесвітній стандарт шифрування. Вкрай мала кількість алгоритмів змогли стати міжнародними стандартами. ISO/IEC 18033-3:2010 описує наступні алгоритми: чотири 64-бітові шифри — TDEA, MISTY1, CAST-128, HIGHT — і три 128-бітові шифри — AES, Camellia, SEED. ГОСТ пропонується додати в цей же стандарт ISO/IEC 18033-3.

Вперше в історії промислової стандартизації ми маємо справу з таким конкурентоспроможним алгоритмом у термінах оптимальності між вартістю та рівнем безпеки. ГОСТ має за собою 20 років спроб криптоаналізу і донедавна його безпека військового рівня не піддавалася сумніву.

Як стало нещодавно відомо автору з приватного листування, більшість країн висловилися проти ГОСТу на голосуванні ISO в Сінгапурі, проте результати цього голосування ще розглядатимуться на пленарному засіданні ISO SC27, тому ГОСТ все ще перебуває в процесі стандартизації на момент публікації цієї роботи.

Думки експертів щодо ГОСТ

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

Усі, кому знайомий закон Мура, розуміють, що, теоретично, 256-бітові ключі залишаться безпечними принаймні 200 років. ДЕРЖСТАНДАРТ був широко досліджений провідними експертами в галузі криптографії, відомими в області аналізу блокових шифрів, такими як Шнайєр, Бірюков, Данкельман, Вагнер, безліччю австралійських, японських і російських вчених, експертами з криптографії від ISO, і всі дослідники висловлювалися, що все виглядає так , що він може бути або повинен бути безпечним. Хоча широкого розуміння досягла думка, що сама по собі структура ГОСТу вкрай слабка, наприклад, порівняно з DES, зокрема, дифузія не настільки хороша, проте це завжди обумовлювалося тим, що це має компенсуватися великою кількістю раундів (32), а також додатковою нелінійністю та дифузією, що забезпечується додаванням по модулю.

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

Лінійний та диференціальний аналіз ГОСТ

У широковідомій книзі Шнайєра ми читаємо: "Проти диференціального та лінійного криптоаналізу ГОСТ ймовірно стійкіший, ніж DES". Основну оцінку безпеки ДСТУ дали в 2000 році Габідулін та ін. Їх результати дуже вражаючі: при закладеному рівні безпеки 2^256, достатньо п'яти раундів для захисту ДСТУ від лінійного криптоаналізу. Більше того, навіть при заміні S-блоків на тотожні та єдиної нелінійної операції шифру — додавання по модулю 2^32 — шифр все одно стійок проти лінійного криптоаналізу після 6 раундів з 32. Диференціальний криптоаналіз ГОСТу виглядає порівняно легшим і привлеченішим. Для 2^128 рівня безпеки дослідники (Vitaly V. Shorin, Vadim V. Jelezniakov and Ernst M. Gabidulin: Linear and Differential Cryptanalysis of Russian GOST, Preprint submitted to Elsevier Preprint, 4 April 2001) передбачали достатню стійкість на рівні 7. За їх твердженням, злом Держстандарту більш ніж на п'яти раундах "вкрай важкий". Більше того, двоє японських дослідників показали, що класична пряма диференціальна атака з однією диференціальною характеристикою має вкрай малу ймовірність проходження через велику кількість раундів. На основі факту вивчення досить "хорошої" ітеративної диференціальної характеристики для обмеженої кількості раундів (яка сама по собі має ймовірність проходження не краще 2-11.4 на раунд), отримано значення безлічі відповідних ключів менше половини. Для повнораундового ГОСТу така атака з єдиною характеристикою працюватиме лише з мізерно малою частиною ключів порядку 2-62 (і навіть у цій малій частині вона матиме ймовірність проходження не більше 2-360).

Більш складні атаки включають безліч диференціалів, наступних певним патернам, наприклад з використанням окремих S-блоків, що мають нульові диференціали, в той час як на інших бітах є ненульові. Мова про атаки-розрізнячі, засновані на поганих дифузійних властивостях ГОСТу. Найкраща з таких атак працює проти 17 раундів ГОСТу, залежить від ключа і має сама по собі на виході вкрай слабкий відмінник від випадкових даних, щоб його якось можна було використовувати для отримання інформації про ключ.

Атаки ковзання та відображення

Згідно з Бірюковим і Вагнером, структура ГОСТу, що включає зворотний порядок підключень в останніх раундах, робить його стійким проти атак ковзання (т.зв. "слайд-атаки"). Однак через наявність великої величини самоподібності в шифрі, це дозволяє проводити атаки інверсії ключів на комбінації нерухомих точок та властивості "віддзеркалення" (т.зв. "рефлективні атаки") для певних слабких ключів. Складність цієї атаки 2192 і 232 підібраних відкритих текстів.

Останні результати

Нові атаки також використовують відображення і фактично зламали ГОСТ, що було представлено на конференції FSE 2011. Ці атаки також були відкриті незалежно автором даної роботи. Атака вимагає 2^132 байтів пам'яті, що фактично гірше, ніж повільніші атаки з меншою вимогою до пам'яті.

Безліч нових атак на основі самоподібності працюють проти всіх ключів ГОСТу і дозволяють зламувати повнораундовий ГОСТ із 256-бітним ключем, а не лише для слабких ключів, як було раніше. Всі ці атаки вимагають значно менше пам'яті і значно швидше.

Ці нові атаки можуть розглядатися як приклади нової загальної парадигми криптоаналізу блокових шифрів, званої "редукція складності алгебри", з узагальненням цих атак на безліч окремих випадків атак з відомими нерухомими точками, ковзанням, інволюціями і циклами. Важливо, що серед сімейства всіх цих атак є такі, які дозволяють проводити криптоаналіз ГОСТ без будь-яких відбитків і без будь-яких симетричних точок, що виявляються під час обчислень. Одним із прикладів є проста атака злому ГОСТу без відображень у даній роботі.

Алгебраїчний криптоаналіз та атаки з невеликою складністю даних на шифри зі зменшеною кількістю раундів

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

На практиці атаки алгебри реалізовані проти дуже малого числа раундів блокових шифрів, але вже призводили до зламів потокових шифрів, також є і успіхи в зламі надлегких шифрів для мікрообладнання. Через труднощі в обсягах пам'яті та оцінки витрат на обчислення їх комбінують з іншими атаками.

Як зламати ГОСТ?

Алгебраїчна атака на повнораундовий ГОСТ докладніше представлена ​​в аналізованої публікації. У попередній роботі автор уже виклав 20 атак алгебри на ГОСТ і чекає великої їх кількості в найближчому майбутньому. Атака, запропонована у цій роботі — не найкраща їх, але відкриває простий (принаймні розуміння криптографами) шлях для подальших розробок до створення специфічної методології до злому ГОСТа.

Практичний результат поки що скромний: 2^64 відомих відкритих тексту та 2^64 пам'яті для зберігання пар "відкритий текст/шифртекст" дозволяють зламати ГОСТ у 2^8 швидше, ніж простий перебір. Але в плані криптоаналізу це робить цілком справедливим твердження про те, що "ГОСТ зламано".

Висновки

ДЕРЖСТАНДАРТ спроектований на забезпечення військового рівня безпеки на 200 років вперед. Більшість провідних експертів, які вивчали ГОСТ, дійшли згоди про те, що "незважаючи на значні криптоаналітичні зусилля протягом 20 років, ГОСТ все ще не зламаний". У 2010 році ГОСТ просувають в ISO 18033 як світовий стандарт шифрування.

Основа ідей про алгебраїчний криптоаналіз виникла понад 60 років тому. Але тільки за останні 10 років були розроблені ефективні програмні засоби(часткового) вирішення безлічі NP-повних проблем. Було зламано кілька потокових шифрів. Тільки один блоковий шифр був зламаний цим методом - сам собою слабкий KeeLoq. У роботі автор зламує важливий, реально використовуваний шифр ГОСТ. Він зазначає, що це перший випадок в історії, коли алгебраїчним криптоаналізом було зламано стандартизований державний шифр.

Проста атака "MITM з відображенням" на ГОСТ вже представлена ​​на конференції FSE 2011. У роботі ж, що розглядається в даній статті, представлена ​​інша атака лише для ілюстрації факту того, як багато атак на ГОСТ вже з'явилося зараз, багато з яких швидше, а сама Алгебраїчна атака вимагає набагато менше пам'яті і відкриває практично невичерпний простір можливостей для противника, що атакує шифр різними способами. Також у цій роботі показано відсутність необхідності використання якості відбиття для злому.

Автор стверджує: очевидно, що ДЕРЖСТАНДАРТ має серйозні вади і тепер не забезпечує рівня стійкості, необхідного ISO. Безліч атак на ГОСТ представлено у рамках підтвердження парадигми редукування алгебраїчної складності.

Насамкінець дослідник особливо наголошує на деяких фактах, які поки недоступні читачеві, але відомі досліднику, які є важливими в ході процесу стандартизації ISO. Дана атака - не просто "сертифікаційна" атака на ГОСТ, яка швидше перебору грубою силою. Фактично, стандартизація Держстандарту зараз була б вкрай небезпечною та безвідповідальною. Це так тому, що деякі з атак можливі для здійснення на практиці. Деякі ключі ДСТУ на практиці навіть можуть бути дешифровані, будь вони слабкі ключі або ключі з реальних приватних застосувань ГОСТу. У попередній роботі автор наводить детальний розгляд випадків можливості практичних атак. Важливо також те, що це перший випадок в історії, коли серйозний стандартизований блоковий шифр, створений для захисту секретів військового рівня і призначений для захисту документів державної таємниці для урядів, великих банків та інших організацій, виявився зламаний математичною атакою.

1 Структурна схема алгоритму криптографічного перетворення

2 Режим простої заміни 4

3 Режим гамування 8

4 Режим гамування зі зворотним зв'язком 11

5 Режим вироблення імітівставки 14

Додаток 1 Терміни, що застосовуються у цьому стандарті, та їх визначення 16

Додаток 2 Значення констант С1, С2 18

Додаток 3 Схеми програмної реалізації алгоритму криптографічного

перетворення. 19

Додаток 4 Правила підсумовування за модулем 2 32 та за модулем (2 32 -I) 25

ДЕРЖАВНИЙ СТАНДАРТ

СПІЛКИ РСР

СИСТЕМИ ОБРОБКИ ІНФОРМАЦІЇ. ЗАШИТА КРИПТОГРАФІЧНА

Алгоритм криптографічного перетворення

Дата введення 01.07.90

Цей стандарт встановлює єдиний алгоритм криптографічного перетворення для систем обробки інформації в мережах електронних обчислювальних машин (ЕОМ), окремих обчислювальних комплексах та ЕОМ, який визначає правила шифрування даних та вироблення імітівставки.

Алгоритм криптографічного перетворення призначений для апаратної або програмної реалізації, задовольняє криптографічним вимогам і за своїми можливостями не накладає обмежень на ступінь секретності інформації, що захищається.

Стандарт є обов'язковим для організацій, підприємств та установ, що застосовують криптографічний захистданих, що зберігаються та передаються в мережах ЕОМ, в окремих обчислювальних комплексах або в ЕОМ.

Терміни, що застосовуються у цьому стандарті, та їх визначення наведені у додатку 1.

I. СТРУКТУРНА СХЕМА АЛГОРИТМУ КРИПТОГРАФІЧНОГО ПЕРЕТВОРЕННЯ

1.1. Структурна схема алгоритму криптографічного перетворення (криптосхема) містить (див. чорт. 1):

Видання офіційне ★

ключове запам'ятовуючий пристрій (КЗУ) на 256 біт, що складається з восьми 32-розрядних накопичувачів (Х 0 X t Х 2 A3 Л4 Х $ Х 6 Ху); чотири 32-розрядні накопичувачі (/V (, N 2 , Nj, /V 4);

Передрук заборонено

© Видавництво стандартів, 1989 © ІПК Видавництво стандартів, 1996

два 32-розрядних накопичувача Л/$,) із записаними в них постійними заповненнями С 2 , С\\

два 32-розрядних суматора за модулем 2 32 (СМ|, СЛ/3);

32-розрядний суматор порозрядного підсумовування за модулем 2 (СЛ/2);

32-розрядний суматор за модулем (2 32 - 1) (СЛ/4);

суматор за модулем 2(СЛ/ 5), обмеження на розрядність суматора СЛ/$ не накладається;

блок підстановки (А);

регістр циклічного зсуву на одинадцять кроків у бік старшого розряду (R).

1.2. Блок підстановки А" складається з восьми вузлів заміни A'j,

А 2, А“з, До 4, А5, А7, А8 з пам'яттю на 64 біти кожен. Посту

32-розрядний вектор, що падає на блок підстановки, розбивається на вісім послідовно йдуть 4-розрядних векторів, кожен з яких перетворюється в 4-розрядний вектор відповідним вузлом заміни, що представляє собою таблицю з шістнадцяти рядків, що містять по чотири біти заповнення в рядку. Вхідний вектор визначає адресу рядка таблиці, заповнення цього рядка є вихідним вектором. Потім 4-розрядні вихідні вектори послідовно об'єднуються в 32-розрядний вектор.

1.3. При додаванні та циклічному зсуві двійкових векторів старшими розрядами вважаються розряди накопичувачів з великими номерами.

1.4. При записі ключа (І", W 2 ..., W q e (0,1), д = N256,

КЗУ значення W вводиться в i-й розряд накопичувача Xq, значення W 2 вводиться в 2-й розряд накопичувача Л #, ... , значення W 2 вводиться в 32-й розряд накопичувача Xq; значення W33 вводиться в 1-й розряд накопичувача Х\ значення вводиться в 2-й розряд накопичувача Х\ у... , значення W M вводиться в 32-й розряд накопичувача Х 2 і т.д., значення 1У 2 5Ь вводиться в 32-й розряд накопичувача Ху.

1.5. При перезапису інформації вміст р-го розряду одного накопичувача (суматора) переписується до р-го розряду іншого накопичувача (суматора).

1.6. Значення постійних заповнень Cj, 2 (констант) накопичувачів / V 6 , / V5 наведені в додатку 2.

1.7. Ключі, що визначають заповнення КЗП та таблиць блоку підстановки, є секретними елементами і поставляються в установленому порядку.

Заповнення таблиць блоку підстановки є довгостроковим ключовим елементом, загальним для мережі ЕОМ.

Організація різних видівзв'язку досягається побудовою відповідної ключової системи. При цьому може бути використана можливість вироблення ключів (заповнень КЗП) у режимі простої заміни та зашифрування їх у режимі простої заміни із забезпеченням імітозахисту для передачі каналами зв'язку або зберігання в пам'яті ЕОМ.

1.8. У криптосхемі передбачено чотири види роботи: зашифрування (розшифрування) даних у режимі простої заміни; зашифрування (розшифрування) даних у режимі гамування;

зашифрування (розшифрування) даних у режимі гамування зі зворотним зв'язком;

режим вироблення імітівставки.

Схеми програмної реалізації алгоритму криптографічного перетворення наведено у додатку 3.

2. РЕЖИМ ПРОСТОЇ ЗАМІНИ

2.1. Зашифрування відкритих даних у режимі простої заміни

2.1.1. Криптосхема», що реалізує алгоритм зашифрування в режимі простої заміни, повинна мати вигляд, вказаний на рис.2.

Відкриті дані, що підлягають зашифруванню, розбивають на блоки по 64 біти в кожному. Введення будь-якого блоку Т () = (Д|(0), ^(О), ..., д 3 1(0), я 32 (0), £|(0), Ь 2 (0) у.. ., Z> 32 (0)) двійкової інформації накопичувачі N\ і N 2 виробляється так, що значення Д|(0) вводиться в 1-й розряд N|, значення а 2 (0) вводиться в 2-й розряд / Vj і т.д, значення I 32 (0) вводиться в 32-й розряд iVj; значення />|(0) вводиться в

1-й розряд Л/2, значення Ь 2 (0) вводиться в 2-й розряд N 2 і т.д., значення 32 (0) вводиться в 32-й розряд N 2 . В результаті одержують стан (я 32 (0), я 3 |(0), ... , а 2 (0) у<7|(0)) накопителя yVj и состояние (/>32 (0), Ь 2 1(0), ... , />|(0)) накопичувача N 2 .

2.1.2. У КЗУ вводяться 256 біт ключа. Вміст восьми 32-розрядних накопичувачів Aq, X\ t ... , Xj має вигляд:

^0 = (^32^3.....

*1 =(^64^63, . ^34^33)

*7 = (^56> ^255. ... , І/ 226 , ^ 225)

2.1.3. Алгоритм зашифрування 64-розрядного блоку відкритих даних у режимі простої заміни складається з 32 циклів.

У першому циклі початкове заповнення накопичувача підсумовується за модулем 2 32 в суматорі СМ з заповненням накопичувача Xq при цьому заповнення накопичувача Nj зберігається.

Результат підсумовування перетворюється в блоці підстановки і отриманий вектор надходить на вхід регістра /?, де циклічно зрушується на одинадцять кроків у бік старших розрядів. Результат зсуву підсумовується порозрядно по модулю 2 у суматорі СМ 2 з 32-розрядним заповненням накопичувача yV 2 . Отриманий СМ 2 результат записується в N% при цьому старе заповнення N| листується в N 2 . Перший цикл закінчується.

Наступні цикли здійснюються аналогічно, причому

2-му циклі з КЗУ зчитується заповнення Х\, у 3-му циклі з КЗУ

зчитується заповнення Х 2 і т.д., у 8-му циклі з КЗУ зчитується заповнення Xj. У циклах з 9-го по 16-й, а також у циклах з 17-го по 24-й заповнення з КЗУ зчитуються в тому самому порядку:

В останніх восьми циклах з 25-го по 32-й порядок зчитування заповнень КЗУ зворотний:

пекло, пекло, пекло, пекло.

Таким чином, при зашифруванні у 32 циклах здійснюється наступний порядок вибору заповнень накопичувачів:

пекло, ^2,^),^4>^5,^6»^7, пекло, ^2,^3»^4,^5,-^6,^7, пекло, пекло,пекло,пекло, пекло , Пекло, Пекло, Пекло.

У 32 циклі результат із суматора СЛ/2 вводиться в накопичувач УУ 2, а в накопичувачі N зберігається старе заповнення.

Отримані після 32 нікла зашифрування заповнення накопичувачів N| та N2 є блоком зашифрованих даних, що відповідає блоку відкритих даних.

2.1 4 Рівняння зашифрування в режимі простої заміни мають вигляд:

J*Cr>» (

I Ь(/) = а(/~ I)

при у = I -24;

Г«

\bO) - а Про - Про при / 8 * 25 -г 31; а(32) = а (31)

А (32) = (д (31) ffl X 0) KRG> Ь (31)

де д(0) = (а 32 (0), «з|(0), ... , Д|(0)) - початкове заповнення N перед першим циклом зашифрування;

6(0) = (632(0), 63j(0), ... , 6j(0)) - початкове заповнення /У 2 перед першим циклом зашифрування;

a(j) = (032(7), 0з|(/) е... , 0|(/)) - заповнення УУ, після у-го циклу зашифрування;

b(j) = (6з 2 (/), 63j(/"), ... , 6|(/)) - заповнення /V 2 після у-го циклу зашифрування, у = 032.

Знак ф означає порозрядне підсумовування 32-розрядних векторів за модулем 2.

Знак Ш означає підсумовування 32-розрядних векторів за модулем 2 32 . Правила підсумовування за модулем 2 32 наведено у додатку 4;

/?- Операція циклічного зсуву на одинадцять кроків у бік старших розрядів, тобто.

^(г 32»О|> г 30> р 29> р 28> р 27> р 26» р 25> р 24> р 23’ Р 22» Р 2Ь Р 20> » р 2* р |)~

= (р 21» р 20> - » р 2* р 1 * Р 32>Г31 *ГзО» р 29* р 28* , 27е"26е/"25> , 24>Г23» , 22)*

2.1.5. 64-розрядний блок зашифрованих даних Т ш виводиться з накопичувачів Л^, УУ 2 в наступному порядку: з 1-го, 2-го, ..., 32-го розрядів накопичувача Л7|, потім з 1-го, 2-го , ... , 32-го розрядів накопичувача W 2 , тобто.

т ш - (а,<32),0 2 (32),0 32 (32), 6,(32), 6 2 <32),6 32 <32».

Інші блоки відкритих даних у режимі простої заміни зашифровуються аналогічно.

2.2. Розшифрування зашифрованих даних у режимі простої заміни

2.2.1. Криптосхема, що реалізує алгоритм розшифрування в режимі простої заміни, має той самий вид (див.чсрт.2), що і зашифрування. У КЗУ вводяться 256 біт того ключа, у якому здійснювалося зашифрування. Зашифровані дані, що підлягають розшифруванню, розбиті на блоки по 64 біти в кожному Введення будь-якого блоку

Т ш - (0, (32), про 2 (32), ..., 0 32 (32), 6, (32), 6 2 (32), ..., 6 32 (32))

в накопичувачі Л', і N 2 виробляються так, що значення дj(32) вводиться в 1-й розряд /V, значення 2 (32) вводиться в 2-й розряд /V, і т.д., значення a 32 (32) вводиться у 32-й розряд /V,; значення 6,(32) вводиться в 1-й розряд N 2 і т.д., значення 632 (32) вводиться в 32-й розряд N 2 .

2.2.2. Розшифрування здійснюється за тим же алгоритмом, що й зашифрування відкритих даних, з тією зміною, що заповнення накопичувачів Xq, Х\у... , Xj зчитуються з КЗП у циклах розшифрування у такому порядку:

пекло, пекло 3, пекло, пекло, пекло, пекло, пекло, пекло 0,

пекло 6, пекло 4, пекло 2, пекло, пекло, пекло, пекло 2, пекло.

2.2.3. Рівняння розшифрування мають вигляд:

Г д (32 - /) = (д (32 - / + 1) ШЛГ,.,) * ЛФ6 (32 - / + 1) b (32 - /) = д (32 - / + 1) при, / = 1+8;

I о(32-/) = (а(32-/М)ШДГ (32 _ /)(тод8))КЛФЬ(32./М) |6(32-/) = д (32 - / + 1)

при / = 9 + 31;

Ь(0) = (а (1) ШДГо) ОФй(1)

2.2.4. Отримані після 32 циклів роботи заповнення накопичувачів W і N 2 складають блок відкритих даних.

То = (fli(O), а 2 (0), ... , Аз 2 (0)» 6,(0), 6 2 (0), ... , 6 32 (0)), що відповідає блоку зашифрованих даних, при цьому значення про,(0) блоку 7о відповідає вмісту 1-го розряду yV, значення 02(0) соот-

С. 8 ГОСТ 28147-89

відповідає вмісту 2-го розряду N\ і т.д., значення Дз2(0) відповідає вмісту 32-го розряду N\; значення 6j(0) відповідає вмісту 1-го розряду значення ^(0) відповідає вмісту 2-го розряду N2 і т.д., значення £зг(0) відповідає вмісту 32-го розряду N2-

Аналогічно розшифровуються решта блоків зашифрованих даних.

2.3. Алгоритм зашифрування як простої заміни 64-битового блоку Р 0 позначається через А у тобто.

А (Т 0) = А (а (0), Ь (0)) = (а (32), Ь (32)) = Т ш.

2.4. Режим простої заміни допускається використовувати для зашифрування (розшифрування) даних лише у випадках, наведених у п.1.7.

3. РЕЖИМ ГАМУВАННЯ

3.1. Зашифрування відкритих даних у режимі гамування

3.1.1. Криптосхема, реалізує алгоритм зашифрування як гамування, має вигляд, зазначений на черт.З.

Відкриті дані, розбиті на 64-раерядні блоки Т\)\ 7), 2) ..., 7)) м “ , 1 7[) М) , зашифровуються в режимі гамування шляхом порозрядного підсумовування за модулем 2 у суматорі СЛ/5 з гамою шифру Г ш, яка виробляється блоками по 64 біти, тобто.

Г _/Л1) Я2) Лм-1) ЛМ) \

"ill V 1 ш е * ш * » " Ш » " * * * " 111 /»

де М - визначається обсягом даних, що шифруються.

Tjj) - У-й 64-розрядний блок, / «число двійкових розрядів у блоці 7J) M) може бути менше 64, при цьому невикористана для зашифрування частина гами шифру з блоку Г^ відкидається.

3.1.2. У КЗУ вводяться 256 біт ключа. У накопичувачі iVj, N 2 вводиться 64-розрядна двійкова послідовність (синхропосилання) S = (5 * 1, S 2, ..., 5 ^ 4), що є вихідним заповненням цих накопичувачів для подальшого вироблення Мблоків гами шифру. Синхропосилання вводиться в jV | і Л^так, що значення 5[ вводиться в 1-й розряд (УУ), значення S 2 вводиться у 2-й розряд N\ і т.д., значення ^вводиться в 32-й розряд 7V|; значення S33 вводиться в 1-й розряд N 2 значення 4S34 вводиться в 2-й розряд N 2 і т.д. значення вводиться в 32-й розряд N 2 .

3.1.3. Вихідне заповнення накопичувачів /Vj і N 2 (синхропосилка.5) зашифровується в режимі простої заміни відповідно до