Advanced Encryption Standard (AES), також відомий під назвоюRijndael — симетричний алгоритмблочного шифрування (розмір блока 128 біт, ключ 128/192/256 біт). Фіналіст конкурсу AES, прийнятий як американський стандартшифрування урядомСША. Вибір припав на AES з розрахуванням на широке використання та активний аналіз алгоритму, як це було із його попередником,DES. Державний інститут стандартів і технологій (англ.National Institute of Standards and Technology, NIST) США опублікував попередню специфікацію AES26 жовтня2001 року, після п'ятирічної підготовки.26 травня2002 року AES оголошено стандартом шифрування. Станом на2009 рік AES є одним з найпоширеніших алгоритмів симетричного шифрування[1].
Потреба у новому стандарті шифрування постала у середині 1990-х років. Наявний тоді стандарт DES, довжиною ключа 56біт, давав змогу застосуватиметод грубої сили для дешифрування даних. Успішні злами даних відбулися вже наприкінці 1990-х. Крім того, архітектура DES орієнтувалась на апаратну реалізацію, а програмна реалізація на платформах з обмеженими ресурсами не давала необхідної швидкості застосування. Модифікація DES3-DES мала достатню довжину ключа, але при цьому була ще повільнішою.
12 жовтня1997 р.NIST оголосив конкурс на обрання спадкоємця для DES, що був американським стандартом ще з 1977 року. Перед претендентами поставили такі основні вимоги
Вибір алгоритму проходив у три етапи. 20 серпня1998 року на 1-й конференції AES було оголошено список з 15 кандидатів. У серпні1999 року на 2-й конференції AES список скоротився до п'яти фіналістів:MARS,RC6, Rijndael,Serpent іTwofish. За результатами доповідей 3-ї конференції, що проходила у Нью-Йорку 13—14 квітня2000 року, 2 жовтня2000 алгоритм, запропонований бельгійськими криптографами Д. Деймоном та В. Ріджменом, був оголошений переможцем конкурсу і почалась процедура стандартизації[2]. 26 травня2002 рокуAES був прийнятий як стандарт.
У принципі алгоритм, запропонований Рейменом і Дейцменом, і AES не одне і те ж. АлгоритмРейндол[3] підтримує широкий діапазон розміру блоку та ключа. AES має фіксовану довжину у 128 біт, а розмір ключа може приймати значення 128, 192 або 256 біт. У той час як Рейндол підтримує розмірність блоку та ключа із кроком 32 біт у діапазоні від 128 до 256. Через фіксований розмір блоку AES оперує із масивом 4 × 4байт, що називаєтьсястаном (версії алгоритму із більшим розміром блоку мають додаткові колонки).
Для ключа 128 біт алгоритм має 10 раундів у яких послідовно виконуються операції
У процедуріSubBytes, кожен байт в state замінюється відповідним елементом у фіксованій 8-бітній таблиці пошуку, S; bij = S(aij).
Процедура SubBytes() обробляє кожен байт стану незалежно, проводячи нелінійну заміну байтів використовуючи таблицю замін (S-box). Така операція забезпечує нелінійність алгоритму шифрування. Побудова S-box складається з двох кроків. По-перше, проводиться отримання зворотного числа вполі Галуа. По-друге, до кожного байтуb з яких складаєтьсяS-box застосовується така операція:
де, і де єi-й біт b, а —i-й біт константи. Таким чином, забезпечується захист від атак, заснованих на простих алгебраїчних властивостях.
У процедуріShiftRows, байти в кожному рядку state циклічно зсуваються вліво. Розмір зміщення байтів кожного рядка залежить від її номера
ShiftRows працює з рядками таблиці State. При цій трансформації рядка стану циклічно зсуваються на r байтів по горизонталі, залежно від номера рядка. Для нульового рядка r = 0, для першого рядка r = 1 і т. д. Таким чином кожна колонка вихідного стану після застосування процедуриShiftRows складається з байтів з кожної колонки початкового стану. Для алгоритму Rijndael патерн зсуву рядків для 128- і 192-бітних рядків однаковий. Однак для блоку розміром 256 біт відрізняється від попередніх тим, що 2-й, 3-й і 4-й рядки зміщуються на 1, 3, і 4 байти, відповідно.
У процедуріMixColumns, кожна колонка стану перемножується з фіксованим многочленом c (x).
У процедуріMixColumns, чотири байти кожної колонки State змішуються, використовуючи для цього зворотну лінійну трансформацію.MixColumns опрацьовує стан по колонках, трактуючи кожну з них якполіном четвертого степеня. Над цими поліномами виконується множення в по модулю на фіксований многочлен. Разом зShiftRows,MixColumns вносить дифузію вшифр.
Під час цієї операції, кожен стовпчик множиться на матрицю, яка для 128-бітного ключа має вигляд
У процедуріAddRoundKey, кожен байт стану об'єднується з RoundKey використовуючи операціюXOR.
У процедуріAddRoundKeyRoundKeyкожного раунду об'єднується зі State. Для кожного раундуRoundkeyвиходить ізCipherKeyвикористовуючи процедуруKeyExpansion; кожен RoundKey такого ж розміру, що і State. Процедура виробляє побітовийXOR кожного байтаState із кожним байтомRoundKey.Фактично це звичайний побайтовийXOR байт ключа з байтами таблиці State.