p> AES - 256
8
4
14
Таблиця 1.1 В«Залежність значення Nr від Nk і NbВ»
Функція зашифрування
Введемо наступні позначення:
SubBytes () - заміна байтів-побайтовая нелінійна підстановка в State-блоках (S-Вох) з використанням фіксованого таблиці замін розмірністю 8x256 (affain map table);
ShiftRows () - зрушення рядків - циклічний зсув рядків масиву State на різну кількість байт;
MixColumns () - перемішування стовпців - множення стовпців стану, що розглядаються як многочлени над GF (28);
AddRoundKey () - додавання з раундовим ключем - порозрядне XOR вмісту State з поточним фрагментом розгорнутого ключа. p> На псевдокоді операція зашифрування виглядає наступним чином:
В
Малюнок 1.2 В«Операція зашифрування, реалізована на псевдокоді В»
Після заповнення масиву State елементами вхідних даних до нього застосовується перетворення AddRoundKeyQ, далі, залежно від величини Nk, масив State піддається трансформації раундової 10, 12 або 14 разів, причому у фінальний раунд є кілька укороченим - у ньому відсутня перетворення MixColumnsQ. Вихідними даними описаної послідовності операцій є шифротекст - результат дії функції зашифрування AES.
Функції розшифрування
У специфікації алгоритму AES пропонуються два види реалізацій функції розшифрування відрізняються один від одного послідовністю додатки перетворень зворотних перетворень функції зашифрування і послідовністю планування ключів (див. нижче).
Введемо наступні позначення:
InvSubBytes () - зворотна SubBytes () заміна байтів- побайтовая нелінійна підстановка в SWe-блоках з використанням фіксованого таблиці замін розмірністю 8x256 (inverse affain map);
InvShiftRows () - зворотний зсув рядків ShiftRows () - циклічний зсув рядків масиву State на різну кількість байт;
InvMixColumns () - відновлення значень стовпців - множення стовпців стану, що розглядаються як многочлени над GF (28);
Функція зворотного розшифрування
Якщо замість SubBytes {), ShiftRows {), MixColumns {) і AddRoundKey {) у зворотній послідовності виконати інверсні їм перетворення, можна побудувати функцію зворотного розшифрування. При цьому порядок використання раундових ключів є зворотним по відношенню до того, який використовується при зашифрованих. На псевдокоді вона виглядає так:
В
Малюнок 1.3 В«Операція зворотного розшифрування реалізована на псевдокоді В»
Функція прямого розшифрування
В
Малюнок 1.4 В«Операція прямого розшифрування реалізована на псевдокоді В»
Алгоритм зворотного розшифрування, описаний вище має порядок додатка операцій-функцій зворотний порядку операцій в алгоритмі прямого зашифрування, але використовує ті ж параметри розгорнутого ключа. Змінивши певним чином після-довність планування ключа можна побудувати ще один алгоритм - алгоритм прямого розшифрування (Малюнок 3.4).
Два наступні властивості дозволяють зробити це:
Порядок додатки функцій SubBytes () і ShiftRows () НЕ грає ролі. Те ж са моє вірно і для операцій InvSubBytes () і InvShiftRows (). Це відбувається тому, що функції SubBytes () і InvSubBytes () працюють з байтами, а операції ShiftRows () і InvShiftRows () зрушують цілі байти, що не зачіпаючи їх значень.
Операція MixColumns () є лінійною щодо вхідних даних, що означає InvMixColumns (State XOR RoundKey) == InvMixColumns (State) XOR InvMixColumns (RoundKey)
Ці властивості функцій алгоритму шифрування дозволяють змінити порядок застосування функцій InvSubBytes () і InvShiftRows (). Функції AddRounKey () і InvMixCol-umns () також можуть бути застосовані в зворотному порядку, але за умови, що стовпці (32-бітові слова) розгорнутого ключа розшифрування попередньо пропущені через функцію InvMixColumns ().
Таким чином, можна реалізувати більш ефективний спосіб розшифрування з тим же порядком додатки функцій як і в алгоритмі зашифрування.
Алгоритм вироблення ключів (Key Schedule)
Введемо наступні позначення: Rconf] - масив 32-бітових раундових констант;
RotWord () - операція циклічної перестановки вхідного 4-байтного слова в вихідну за наступним правилом [а0, ai, а2, а3] -> [ах, а2, а3, а0];
SubWord () - операція заміни в 4-байтному слові за допомогою S-Box кожного байта;
Г… - Операція виключає або XOR. br/>В
Малюнок 1.5 В«Операція планування (розширення) ключа реалізована на псевдокоді В»
раундовий ключі виходять з ключа шифрування допомогою алгоритму вироблення ключів. Він містить два компоненти: розширення ключа (Key Expansion) і вибір раундового ключа (Round Key Selection). Основоположні принципи алгоритму виглядають наступним чином:
загальне число бітів раундових ключів дорівнює довжині блоку, помноженої на число раундів, плюс 1;