Advanced Encryption Standard

AES, Rijndael-AES, RijndaelАвторСтвореноРозмір ключаРозмір блокуЧисло раундівТип
standard
Вінсент Реймен Йоан Даймен
1998 р.
128/192/256 біт
128 біт
10/12/14 (залежить від розміру ключа)
Підстановочно-перестановна мережа

Зміст

Визначення та допоміжні процедури

ВизначенняBlockCipher KeyCiphertextKey ExpansionRound KeyStateS-boxNbNkNrRcon[]
послідовність біт, з яких складається input, output, State та Round Key. Також під Block можна розуміти послідовність байтів.
секретний криптографічний ключ, який використовується Key Expansion процедурою, щоб зробити набір ключів для раундів (Round Keys); може бути представлений як прямокутний масив байтів, що має чотири рядки іNkколонок
вихідні дані алгоритму шифрування
процедура генерації Round Keys із Cipher Key
Round Keys виходять із Cipher Key використанням процедури Key Expansion. Вони застосовуються до State при шифруванні та розшифруванні
проміжний результат шифрування, який може бути представлений як прямокутний масив байтів, що має 4 рядки іNbколонок
нелінійна таблиця замін, що використовується в кількох трансформаціях заміни байтів та у процедурі Key Expansion для взаємнооднозначної заміни значення байта. Попередньо розрахований S-box можна побачити нижче
число стовпців (32-бітових слів), що становлятьState. Для AESNb= 4
число 32-бітових слів, що становлять шифроключ.Для AESNk= 4, 6, або 8
число раундів, яке є функцієюNkтаNb. Для AESNr= 10, 12, 14
масив, що складається з бітів 32-розрядного слова та є постійним для даного раунду. Попередньо розрахований Rcon можна побачити нижче

Зворотний S-box для процедури InvSubBytes

Допоміжні процедуриAddRoundKey()InvMixColumns()InvShiftRows()InvSubBytes()MixColumns() [7]RotWord()ShiftRows()SubBytes()SubWord()
трансформація при шифруванні та зворотному шифруванні, при якій Round Key XOR'і c State. Довжина RoundKey дорівнює розміру State (тобто якщоNb= 4, то довжина RoundKey дорівнює 128 біт або 16 байт)
трансформація при розшифруванні, яка є зворотною по відношенню до MixColumns()
трансформація при розшифруванні, яка є зворотною щодо ShiftRows()
трансформація при розшифруванні, яка є зворотною щодо SubBytes()
трансформація при шифруванні, яка бере всі стовпці State і змішує їх дані (незалежно один від одного), щоб отримати нові стовпці
функція, що використовується в процедурі Key Expansion, яка бере 4-байтове слово і здійснює над ним циклічну перестановку
трансформації при шифруванні, що обробляють State, циклічно зміщуючи останні три рядки State на різні величини
трансформації при шифруванні, що обробляють State, використовуючи нелінійну таблицю заміщення байтів (S-box), застосовуючи її незалежно до кожного байта State
функція, що використовується у процедуріKey Expansion, яка бере на вході чотирибайтове слово та, застосовуючи S-box до кожного з чотирьох байтів, видає вихідне слово

Шифрування

AES є стандартом, що базується на алгоритмі Rijndael. Для AES довжина input (блоку вхідних даних) і State (стану) стала і дорівнює 128 біт, а довжина шифроключаKстановить 128, 192, або 256 біт. При цьому вихідний алгоритм Rijndael допускає довжину ключа та розмір блоку від 128 до 256 біт з кроком у 32 біти. Для позначення вибраних довжин input, State і Cipher Key у 32-бітових словах використовується нотація Nb = 4 для input та State, Nk = 4, 6, 8 для Cipher Key відповідно для різних довжин ключів.

Окремі трансформації SubBytes(), ShiftRows(), MixColumns() та AddRoundKey() - обробляють State. Масив w[] містить key schedule.

Процедура SubBytes() обробляє кожен байт стану, незалежно роблячи нелінійну заміну байтів, використовуючи таблицю замін (S-box). Така операція забезпечує нелінійність алгоритму шифрування. Побудова S-box складається із двох кроків. По-перше, провадиться взяття зворотного числа в полі Галуа G F ( 2 8 ) >\right)> . По-друге, до кожного байта b, з яких складається S-box, застосовується така операція:

ShiftRows працює з рядками State. При цій трансформації рядки стану циклічно зсуваються на r байт по горизонталі, залежно від номера рядка. Для нульового рядка r = 0, для першого рядка r = 1 Б і т. д. Таким чином кожна колонка вихідного стану після застосування процедури ShiftRows складається з байтів з кожної колонки початкового стану. Для алгоритму Rijndael патерн зміщення рядків для 128- та 192-бітних рядків однаковий. Однак для блоку розміром 256 біт відрізняється від попередніх тим, що 2-й, 3-й і 4-й рядкизміщуються на 1, 3 та 4 байти відповідно.

MixColumns()

У процедурі MixColumns чотири байти кожної колонки State змішуються, використовуючи при цьому оборотну лінійну трансформацію. MixColumns обробляє стани по колонках, трактуючи кожну їх як поліном третього ступеня. Над цими поліномами виробляється множення [8] G F ( 2 8 ) )> за модулем x 4 + 1 +1> на фіксований багаточлен c(x) = 3 x 3 + x 2 + x + 2 +x^+x+2> . Разом із ShiftRows MixColumns вносить дифузію до шифру.

AddRoundKey()

У процедурі AddRoundKey RoundKey кожного раунду поєднується зі State. Для кожного раунду Roundkey виходить із CipherKey за допомогою процедури KeyExpansion; кожен RoundKey такого ж розміру, як і State. Процедура виробляє побітовий XOR кожного байта State з кожним байтом RoundKey.

Алгоритм обробки ключа складається з двох процедур:

  • Алгоритм розширення ключа
  • Алгоритм вибору раундового ключа (ключ ітерації)

Алгоритм розширення ключа

Алгоритм AES, використовуючи процедуру KeyExpansion() і подаючи Cipher Key, K, отримує ключі для всіх раундів. Усього виходить Nb*(Nr + 1) слів: спочатку для алгоритму потрібен набір з Nb слів, і кожному з Nr раундів потрібно Nb ключових набору даних. Отриманий масив ключів для раундів позначається як w[i], 0 ≤ i N b ∗ (N r + 1)

Важливо зауважити, що процедура KeyExpansion() для 256-бітного Cipher Key трохи відрізняється від тих, які застосовуються для 128- та 192-бітних шифроключів. Якщо N k = 8 і i − 4 кратно N k , то SubWord() застосовується до w [ i − 1 ] до XOR'а.

Розшифрування

Алгоритм вибору раундового ключа

На відміну від більшості інших шифрів, AES має просте математичнеопис. Це турбувало в тому числі і Нільса Фергюсона, який у своїй роботі зазначив, що безпека шифру ґрунтується на новому неперевіреному припущенні про складність розв'язання певних видів рівнянь (англ. до solve equations of this type» ) [10] [11] , а також Брюса Шнайєра, який написав у спільній з Нільсом книзі:

Ми маємо одне критичне зауваження до AES: ми не зовсім довіряємо його безпеці. Що турбує нас найбільше в AES, так це його проста алгебраїчна структура… Жоден інший блоковий шифр не має такого простого представлення алгебри. Ми гадки не маємо, веде це до атаки чи ні, але незнання цього є достатньою причиною, щоб скептично ставитися до використання AES.

Я вважаю, що у роботі Куртуа-Пепшика є помилка. Вони переоцінили кількість лінійно-незалежних рівнянь. В результаті вони не мають достатньої кількості лінійних рівнянь для вирішення системи, і [вказаний] метод не може зламати Rijndael. Він має певні переваги і заслуговує на вивчення, але не зламує Rijndael у його нинішньому вигляді.

Атака по стороннім каналам

Атаки сторонніми каналами не пов'язані з математичними особливостями шифру, але використовують певні особливості реалізації систем, що використовують дані шифри, з метою розкрити частково або повністю секретні дані, в тому числі ключ. Відомо кілька подібних атак на системи, які використовували алгоритм AES.