ь незначно. Ключ і ключова послідовність представляються у вигляді векторів 4-х байтових слів, і початкова ділянка послідовності заповнюється словами з ключа, - точно так само, як в Гості. Наступні слова ключовий послідовності виробляються по рекурентного співвідношенню групами, кратними розміру ключа. Перше 4-байтовое слово такої групи виробляється з використанням досить складного нелінійного перетворення, решта - по простому лінійному співвідношенню:
де Nk - число 32-бітових слів в ключі (4 або 6, для восьми використовується інша схема),
G (...) - нелінійне перетворення 32-біттових слів - включає байтовий зсув, побайтову підстановку по вектору замін і побітове додавання за модулем 2 з вектором, що залежать від номера вироблюваної групи елементів:
де S - це описана вище функція побайтовой заміни, R _8 - операція циклічного зсуву аргументу на восьмій біт вліво, а P ( i/Nk ) - 4-байтовое слово, конструюються особливим чином і не залежне від ключа. Використання перетворення G ( x ) вносить складність і нелінійність в схему вироблення ключових елементів, ускладнюючи тим самим криптоаналіз шифру.
Отримані з описаного вище потоку 4-байтові слова групуються в ключові елементи необхідного розміру, рівного розміром шифруемого блоку, і використовуються на раундах шифрування як описано в попередніх розділах.
Як видно з викладеного вище, алгоритм вироблення ключовий послідовності в шифрі Rijndael є більш складним, ніж в Гості. Тим не менш, він залишається досить простим і ефективним і не вносить скільки-небудь істотного внеску у загальний обсяг обчислювальних витрат на шифрування - швидкість шифрування з обчисленням ключових елементів «на льоту» незначно менше швидкості шифрування з використанням заздалегідь підготовлених ключових елементів.
. Вибір вузлів замін та інших констант
Найважливішими константами ГОСТу є довготривалі ключові елементи - вузли замін. Вони не зафіксовані в стандарті, а постачаються спеціалізованими організаціями, постачальними користувачів шифру ключовою інформацією. У силу цього будь-які відомості про критерії проектування вузлів замін відсутні. Із загальних міркувань можна помітити, що, швидше за все, вузли замін виробляються з використанням однієї з методик конструюєованія вузлів (наприклад, з використанням так званих бент-функцій [5]), а потім оцінюються за кількома критеріями, і що володіють недостатньою якістю вузли бракуються. Серед критеріїв оцінки, ймовірно, присутні наступні:
· складність і нелінійність булевих функцій, що описують вузли;
· диференціальна характеристика вузлів замін;
· лінійна характеристика вузлів замін;
На відміну від розробників ГОСТу, автори шифру Rijndael не стали приховувати критерії проектування вектора замін. При його конструюванні крім тривіальних вимог оборотності і простоти описи були прийняті до уваги такі міркування:
· Мінімізація найбільшою за величиною характеристики кореляції між лінійними комбінаціями вхідних і вихідних бітів (визначає стійкість до лінійного криптоаналізу);
· Мінімізація найбільшого нетривіального значення в таблиці EXOR (визначає стійкість до диференціального криптоаналізу);
· складність алгебраїчного виразу, що описує вузол, в GF (28).
Операція байтовой заміни в алгоритмі Rijndael описується наступним рівнянням:
Це перетворення починається з мультиплікативної інверсії замінного байта в описаному вище кінцевому полі GF (28), - значення 00 при цьому змінюється на самого себе, - потім результат піддається афінних перетворень. Поліноми цього перетворення обрані таким чином, щоб у підсумкового відображення відсутні точки нерухомості ( S ( X )= X ) і« антінеподвіжності »( S ( X )=~ X ). Тут знаком «~» позначена операція побітового инвертирования.
Автори алгоритму Rijndael відзначили, що якщо даний вузол замін викликає сумніву в його якості і у відсутності «потайного ходу», то він може бути замінений на інший. Більш того, структура шифру і кількість раундів обрані таким чином, щоб навіть у випадку випадково обраного вектора замін шифр був стійкий проти диференціального та лінійного криптоаналізу.
З інших важливих констант алгоритму Rijndael необхідно відзначити матрицю <...