на виході функції шифрування, - якщо зберігати вузли заміни як масиви 4-байтових слів, у яких вже виконані необхідні зрушення. Така «роздута» таблиця замін потребують для свого зберігання байт або 4K оперативної пам'яті. Одна заміна реалізується за три однотактовие машинні команди: завантаження байта в індексний регістр, завантаження замінює значення в регістр, використання завантаженого значення в операції побітового підсумовування. У підсумку перераховані кроки оптимізації дозволяють реалізувати раунд шифрування за ГОСТ за 15 однотактових машинних команд. З урахуванням можливості процесорів Intel Pentium по паралельному виконанню команд, раунд ГОСТу може бути реалізований за 8 тактів роботи процесора, а весь процес шифрування - за 32 х 8=256 тактів. На процесорі Intel Pentium 200 це дозволить досягти межі швидкодії шифрування приблизно 6.0 Мбайт/с, в реальності ця величина буде менше.
ГОСТ може бути також ефективно реалізований на 8-бітових мікроконтролерах, оскільки складові його елементарні операції входять в систему команд більшості найбільш поширених контролерів. При цьому підсумовування по модулю доведеться розділити на одну операцію складання без переносу, і три операції додавання з переносом, виконувані каскадно. Всі інші операції також легко можуть бути представлені в термінах 8-байтових операндів.
При апаратної реалізації ГОСТу один раунд передбачає послідовне виконання трьох операцій над 32-бітовими аргументами: підсумовування, виконувана одночасно заміна у всіх восьми 4-бітових групах і побітовое підсумовування по модулю 2. Циклічний зсув не є окремою операцією , тому забезпечується простий комутацією провідників. Таким чином, при апаратній реалізації цикл шифрування вимагає виконання ста шести елементарних операцій, і ця робота не може бути распараллелена.
Тепер розглянемо особливості реалізації алгоритму Rijndael. Цей алгоритм є байт-орієнтованим, тобто повністю може бути сформульований в термінах операцій з байтами. В алгоритмі широко використовуються алгебраїчні операції в кінцевих полях, найбільш складно реалізовується з яких є множення в GF (28). Безпосереднє виконання цих операцій призвело б до вкрай неефективної реалізації алгоритму. Однак байтовая структура шифру відкриває широкі можливості щодо оптимізації програмної реалізації. Заміна байта по таблиці з наступним множенням на константу в кінцевому полі GF () може бути представлена ??як одна заміна по таблиці. У прямому шифрі використовуються три константи (01, 02, 03), і, отже, знадобляться три таких таблиці, в зворотному - чотири (0E, 0D, 0B, 09). При належній організації процесу шифрування порядковий байтовий зсув матриці даних можна не виконувати. При реалізації на 32-бітових платформах можливо реалізувати байтовую заміну і множення елемента матриці даних на стовпець матриці M як одну заміну 8 біт на 32 біта. Таким чином, перетворення одного 32-бітового слова даних включає чотири байтові заміни, кожна з яких, як було зазначено вище, вимагає трьох однотактових машинних команд. У результаті частина раунду для одного 32-бітового слова може бути реалізована на процесорах Intel Pentium за 14 команд або за 7 тактів, що при 14 раундах шифрування дозволяє на процесорах Intel Pentium 200 досягти теоретичної межі швидкодії приблизно 7.8 Мбайт/с незалежно від розміру блоку даних і ключа. Для меншого числа раундів швидкість пропорційно зросте.
Зазначена вище оптимізація потребують, однак, певних витрат оперативної пам'яті. Для кожного стовпця матриці M будується свій вектор заміни одного байта на 4-байтовое слово, отримуємо точно таку ж за розміром, як і у випадку ГОСТ, таблицю замін, її розмір дорівнює байт або 4K. Далі, таблиці, використовувані при зашифрування і розшифрування, різні, - це подвоює вимоги до оперативної пам'яті. Крім того для виконання останнього раунду розшифрування потрібен окремий вузол замін, його розмір дорівнює 256 байт або 0.25К. У підсумку отримуємо, що для 32-бітових програмних реалізацій шифру Rijndael необхідно 8.25 Кбайт оперативної пам'яті для зберігання вузлів замін. Для сучасних комп'ютерів на ба?? е Intel Pentium під управлінням ОС Windows 9x/NT/2000 це не виглядає надмірним вимогою.
Байт-орієнтована архітектура алгоритму Rijndael дозволяє надзвичайно ефективно реалізувати його на 8-бітових мікроконтролерах, використовуючи тільки операції завантаження-вивантаження регістрів, індексованого витягання байта з пам'яті і побітового підсумовування по модулю два. Також зазначена особливість дозволить виконати ефективну програмну реалізацію алгоритму. Раунд шифрування вимагає виконання 16 байтових замін плюс чотири операції побітового виключає або над 128-бітовими блоками, які можуть бути виконані в три етапи. У підсумку отримуємо 4 операції на раунд або 57 операцій на 14-раундовий цикл шифрування з ура...