ate, w [Nr * Nb, (Nr +1) * Nb-1]) = state
end
SubBytes ()
У процедурі SubBytes, кожен байт в state замінюється відповідним елементом у фіксованій 8-бітної таблиці пошуку, S; bij = S (aij).
Процедура SubBytes () обробляє кожен байт стану, незалежно виробляючи нелінійну заміну байтів використовуючи таблицю замін (S-box). Така операція забезпечує нелінійність алгоритму шифрування. Побудова S-box складається з двох кроків. По-перше, проводиться взяття зворотного числа в полі Галуа. По-друге, до кожного байта b з яких складається S-box застосовується наступна операція:
В
де, і де bi є i-ий біт b, а ci - i-ий біт константи c = 6316 = 9910 = 011000112. Таким чином, забезпечується захист від атак, заснованих на простих алгебраїчних властивостях. br/>В В
()
У процедурі ShiftRows, байти в кожному рядку state циклічно зсуваються вліво. Розмір зсуву байтів кожного рядка залежить від її номераработает з рядками State. При цій трансформації рядка стану циклічно зсуваються на r байт по горизонталі, залежно від номера рядка. Для нульової рядки r = 0, для першого рядка r = 1 Б і т.д. Таким чином кожна колонка вихідного стану після застосування процедури ShiftRows складається з байтів з кожної колонки початкового стану. Для алгоритму Rijndael патерн зміщення рядків для 128 - і 192-бітних рядків однаковий. Однак для блоку розміром 256 біт відрізняється від попередніх тим, що 2, 3, і 4-е рядки зміщуються на 1, 3, і 4 байта, відповідно. br/>В
()
У процедурі MixColumns, кожна колонка стану перемножується з фіксованим многочленом c (x).
У процедурі MixColumns, чотири байти кожної колонки State змішуються, використовуючи для цього оборотну лінійну трансформацію. MixColumns обробляє стану по колонках, трактуючи кожну з них як поліном четвертого ступеня. Над цими поліномами виробляється множення в GF (28) за модулем x4 + 1 на фіксований многочлен c (x) = 3x3 + x2 + x + 2. Разом з ShiftRows, MixColumns вносить дифузію в шифр
В
()
У процедурі AddRoundKey, кожен байт стану об'єднується з RoundKey використовуючи XOR operation (? ).
У процедурі AddRoundKey, RoundKey кожного раунду об'єднується зі State. Для кожного раунду Roundkey виходить з CipherKey використовуючи процедуру KeyExpansion; кожен RoundKey такого ж розміру, що й State. Процедура виробляє побітовий XOR кожного байта State з кожним байтом RoundKey. br/>В
Алгоритм обробки ключа
Алгоритм обробки ключа складається з двох процедур:
В· Алгоритм розширення ключ...