. В обох обговорюваних алгоритмах це зроблено для того, щоб забезпечити еквівалентність структури прямого і зворотного шифруючих перетворень, дане питання обговорюється в наступному розділі.
. Еквівалентність прямого та зворотного перетворень
В алгоритмі ГОСТ28147-89 еквівалентність структури прямого і зворотного криптографічного перетворення не забезпечується спеціально, а є простим наслідком використаного архітектурного рішення. У будь-якій однорідної збалансованої мережі Файстеля обидва ці перетворення алгоритмічно ідентичні і розрізняються тільки порядком використання ключових елементів: при расшифровании елементи використовуються в порядку, зворотному тому, в якому вони використовуються при зашифрованих.
Шифр ??Rijndael побудований на базі прямих перетворень. Як і для всіх подібних алгоритмів, зворотне перетворення будується із звернень кроків прямого перетворення, застосовуваних у зворотному порядку. У силу сказаного забезпечити таку ж ступінь ідентичності прямого і зворотного перетворення, яка досягається в мережах Файстеля, не представляється можливим. Однак спеціальними конструкторськими рішеннями досягається близький ступінь відповідності: пряме і зворотне перетворення виходять ідентичними з точністю до використовуваних в перетвореннях констант. У наступній нижче таблиці 2 представлені два останні раунди алгоритму Rijndael і їх формальне звернення:
Таблиця 2. Два раунди алгоритму Rijndael і їх формальне звернення.
Через R _ позначена зворотна до R _ операція построчного циклічного зсуву матриці. Як видно з таблиці 2, алгоритмічна структура прямого і зворотного перетворень істотно розрізняється. Однак шляхом тотожних перетворень можна домогтися більшої відповідності між ними. Насамперед, варто відзначить, що операція побайтовой заміни ( S ) коммутативна з процедурою побайтового зсуву рядків матриці:
Крім того, згідно з правилами матричної алгебри за законом асоціативності можна також поміняти порядок побітового додавання ключа за модулем два і множення на матрицю:
Застосовуємо зазначені зміни на дві колонки таблиці 2, отримуємо наступну послідовність операцій при двох раундах зворотного перетворення:
Таблиця 3. Два раунди алгоритму Rijndael та їх обіг.
З зіставлення стовпців таблиці 3 стає очевидно, що алгоритмічна структура прямого і зворотного перетворень ідентична. Результат легко узагальнюється на довільне число раундів. Таким чином, в алгоритмі Rijndael процедури шифрування і розшифрування алгоритмічно ідентичні і розрізняються тільки в наступних деталях:
· в зворотному перетворенні використовується вектор замін, зворотний в операційному сенсі вектору замін прямого перетворення;
· в зворотному перетворенні число байтів, на які зсувається кожен рядок матриці даних в операції построчного байтового зсуву інше;
· в зворотному перетворенні в кроці матричного множення блок даних множиться зліва на матрицю, зворотну тій, що використовується при прямому перетворенні; ця зворотна матриця дорівнює:
· в зворотному перетворенні ключові елементи використовуються у зворотному порядку, і, крім того, всі елементи за винятком першого і останнього, повинні бути помножені зліва на матрицю M .
Таким чином, аналогічно ГОСТу, в алгоритмі Rijndael можливо поєднати реалізацію процедур за-і розшифрування як при апаратній, так і при програмної реалізації.
. Вироблення ключових елементів
У вітчизняному стандарті шифрування для вироблення тридцяти двох 32-бітових ключових елементів з 256-бітового ключа застосований дуже простий підхід. Ключ інтерпретується як масив, що складається з восьми ключових елементів:
Ці елементи використовуються на раундах шифрування - ключ «проглядається» три рази в прямому порядку і один раз в зворотному, в результаті кожен ключовий елемент використовується рівно чотири рази. У наступній нижче таблиці 4 наведено відповідність номера раунду і використовуваного на раунді ключового елемента:
Таблиця 4. Порядок використання ключових елементів в циклі зашифрования ГОСТу.
У шифрі Rijndael використовується трохи більш складна схема, що враховує можливе розходження в розмірах блоку алгоритму і ключа. Існують два алгоритми генерації послідовності ключових елементів - для ключа розміром 128/192 біта і для ключа розміром 256 біт, які, втім, досить схожі і розрізняються досит...