- •Лабораторна робота № 5 Конкурс aes. Алгоритм Rijndael
- •Конкурс aes
- •Алгоритм Rijndael
- •Представлення вхідних даних в алгоритмі aes:
- •Формування раундових ключів
- •Раундове перетворення аes
- •1. Операція SubBytes.
- •2. Операція ShiftRows.
- •3. Операція MixColumns.
- •4. Операція AddRoundKey.
- •Розшифрування aes
Представлення вхідних даних в алгоритмі aes:
Основним елементом, яким оперує алгоритм AES, є байт, який обробляється як єдине ціле. Для формування байтів 128 бітів блоку відкритого тексту, вихідного блоку шифротекста і ключа шифру діляться на групи з 8-ми поруч стоять біт так, щоб в цілому вийшов масив байт.
Задавати значення байта зручно в шістнадцятковій системі обчислення. Для цього байт ділиться на дві групи з 4-х біт: група старших біт в байті представляється першим шістнадцятковим символом, а група молодших біт - другим. Наприклад, для байта 10101100 отримаємо 10101100 = 1010 1100 = АС.
Позначимо:
in0, in1, ..., in15 - 16 байт блоку відкритого тексту;
k0, k1, ..., k15 - 16 байт ключа шифру;
оut0, out1, ..., out15 - 16 байтів шифротексту;
Вхідними даними для операцій шифрування є масив з 16 байт in0, in1, ..., in15. Перед початком шифрування байти цього масиву розміщуються послідовно в стовпці матриці InputBlock (зверху вниз). Проміжна матриця під час роботи алгоритму називається матрицею станів State або просто станом. Кінцеве значення матриці стану OutputBlock є виходом алгоритму і перетворюється в послідовність байтів шифротекста оut0, out1, ..., out15.
Аналогічно формується матриця InputKey з 16 байтів k0, k1, ..., k15 ключа шифру.
Розмірність всіх матриць – 4×4.
Схематично таке уявлення даних виглядає так:
InputBlock State OutputBlock
InputKey
Матриця, яка надходить на вхід кожного раунду називається матрицею InputState, а на виході раунду утворюється матриця OutputState. Очевидно, на вході першого раунду InputState = InputBlock, а на виході останнього раунду OutputState = OutputBlock.
Чотири байта в кожному стовпці матриці станів або ключа можна розглядати як одне 32-х бітове слово. Тому матриця станів – це масив з 4 слів w0, w1, w2, w3, де
Приклад:
Представимо у вигляді матриці InputBlock текст
СКЛАДНІСТЬЗАДАЧІ = (21 14 15 00 05 17 11 21 22 30 09 00 05 00 27 11) 10 =
= (15 0Е 0F 00 05 11 0B 15 16 1E 09 00 05 00 1B 0B) 16
InputBlock
=
.
Формування раундових ключів
Раундові ключі виробляються з ключа шифру K за допомогою процедури розширення ключа, в результаті чого формується масив раундових ключів, з якого потім безпосередньо вибирається необхідний раундовий ключ.
Кожен раундовий ключ має довжину 128 біт (або 4 слова wі, wі+1, w2і+2, wі+3). Перші чотири слова w0, w1, w2, w3 збігаються з ключем шифру і є ключем з номером 0, наступні чотири слова w4, w5, w6, w7 – раундовим ключем для першого повного раунду тощо.
Нові слова wі+4, wі+5, wі+6, wі+7 наступного раундового ключа визначаються з слів wі, wі+1, wі+2, wі+3 попереднього ключа на основі рівнянь:
Перше слово wі+4 в кожному раундовому ключі змінюється по-іншому:
.
Функція g складається з послідовного виконання трьох кроків, які відображають слово в слово:
циклічний зсув чотирьохбайтового слова вліво на один байт (операція RotWord);
заміна кожного байта слова, отриманого на кроці 1, відповідно до таблиці SubBytes, що використовується шифруванні (операція SubWord);
сумування по mod 2 байтів, отриманих на кроці 2, з раундовою константою Rcon [i] = (RC [i], 0,0,0), несекретною і унікальною для кожного раундового ключа Ki. Ненульовий лівий байт цієї константи змінюється за законом рекурсії: RC [1] =1, RC [i] = 2 RC [i – 1], i =1,2, ... 10.
Мета сумування з раундовими константами – зруйнувати симетрію, що може виникнути на різних етапах розгортання ключа і привести до появи слабких ключів, як в алгоритмі DES.
Схематичне представлення роботи алгоритму розширення ключа:
Приклад:
Ключ шифру OF 15 71 C9 47 D9 E8 59 0C B7 AD DF AF 7F 67 98
|
Раундові ключі |
Функція g(w) |
w0 w1 w2 w3 |
0F 15 71 C9 47 D9 E8 59 0C B7 AD DF AF 7F 67 98 |
RotWord(w3)= 7F 67 98 AF=x1 SubWord(x1)= D2 85 46 79=y1 Rcons[1]=01 00 00 00 y1+ Rcons[1]=D3 85 46 79=z1 |
w4 w5 w6 w7 |
w0+z1 = DC 90 37 B0 w4+w1= 9B 49 DF E9 w5+w2= 97 FE 72 3F w6+w3= 38 81 15 A7 |
RotWord(w7)= 81 15 A7 38=x2 SubWord(x4) = 0C 59 5C 07=y2 Rcons[2]=02 00 00 00 y2+ Rcons[2]=0E 59 5C 07=z2 |
w8 w9 w10 w11 |
w4+z2 = D2 C9 6B B7 w8+w5= 49 80 B4 5E w9+w6= DE 7E C6 61 w10+w7= E6 FF D3 C6 |
RotWord(w11)= FF D3 C6 E6=x3 SubWord(x2) = 16 66 B4 8E =y3 Rcons[3]=04 00 00 00 y3+ Rcons[3]=12 66 B4 8E =z3 |
