Опубликован: 19.01.2010 | Уровень: специалист | Доступ: платный
Лекция 9:

Преобразования

< Лекция 8 || Лекция 9: 12345 || Лекция 10 >

9.2. Преобразования

Чтобы обеспечить безопасность, AES использует четыре типа преобразований: подстановка, перестановка, смешивание и добавление ключа. Ниже мы обсудим каждое.

Подстановка

AES подобно DES использует подстановку. Однако этот механизм имеет различия. Первое: подстановка делается для каждого байта. Второе: для преобразования каждого байта используется только одна таблица — это означает, что если два байта одинаковы, то и результат преобразования одинаков. Третье: преобразование определяется или процессом поиска в таблице, или математическим вычислением в GF(28) поле. AES работает с двумя обратимыми преобразованиями.

SubBytes

Первое преобразование, SubBytes, используется на стороне шифрования. Чтобы применить подстановку к байту, мы интерпретируем байт как две шестнадцатеричные цифры. Левая цифра определяет строку, а правая — колонку в таблице перестановки. На пересечении строки и колонки, обозначенных этими шестнадцатеричными цифрами, находится новый байт. Рисунок 9.6 иллюстрирует идею.

 Преобразование SubByte

Рис. 9.6. Преобразование SubByte

В преобразовании SubBytes состояние обрабатывается как матрица байтов 4 \times 4. В один момент проводится преобразование одного байта. Содержание каждого байта изменяется, но расположение байтов в матрице остается тем же самым. В процессе преобразования каждый байт преобразуется независимо от других — это шестнадцать личных преобразований байт в байт.

Операция SubByte включает 16 независимых преобразований байта в байт.

Таблица 9.1 показывает таблицу подстановки (S-блок) для преобразования SubBytes. Преобразование обеспечивает эффект перемешивания. Например, два байта, 5A16 и 5B16, которые отличаются только одним битом (самый правый бит), преобразованы в BE16 и 3916, которые отличаются четырьмя битами.

Таблица 9.1. Таблица преобразования SubBytes
0 1 2 3 4 5 6 7 8 9 A B C D E F
0 63 7C 77 7B F2 6B 6F C5 30 01 67 2B FE D7 AB 76
1 CA 82 C9 7D FA 59 47 FO AD D4 A2 AF 9C A4 72 CO
2 B7 FD 93 26 36 3F F7 CC 34 A5 E5 F1 71 D8 31 15
3 04 C7 23 C3 18 96 05 9A 07 12 80 E2 EB 27 B2 75
4 09 83 2C 1A 1B 6E 5A AO 52 3B D6 B3 29 E3 2F 84
5 53 D1 00 ED 20 FC B1 5B 6A CB BE 39 4A 4C 58 CF
6 DO EF AA FB 43 4D 33 85 45 F9 02 F7 50 3C 9F A8
7 51 A3 40 8F 92 9D 38 F5 BC B6 DA 21 10 FF F3 D2
8 CD 0C 13 EC 5F 97 44 17 C4 A7 7E 3D 64 5D 19 73
9 60 81 4F DC 22 2A 90 88 46 EE B8 14 DE 5E 0B DE
A E0 32 3A 0A 49 06 24 5C C2 D3 AC 62 91 95 E4 79
B E7 CB 37 6D 8D D5 4E A9 6C 56 F4 EA 65 7A AE 08
C BA 78 25 2E 1C A6 B4 C6 E8 DD 74 IF 4B BD 8B 8A
D 70 3E B5 66 48 03 F6 OE 61 35 57 B9 86 C1 1D 9E
E E1 F8 98 11 69 D9 8E 94 9B 1E 87 E9 CE 55 28 DF
F 8C A1 89 OD BF E6 42 68 41 99 2D OF BO 54 BB 16
InvSubBytes

InvSubBytesинверсия SubBytes. Преобразование сделано с использованием таблицы 9.2, и мы можем легко проверить, что эти два преобразования являются обратными друг другу.

Таблица 9.2. Таблица преобразования InvSubBytes
0 1 2 3 4 5 6 7 8 9 A B C D E F
0 52 09 6A D5 30 36 A5 38 BF 40 A3 9E 81 F3 D7 FB
1 7C E3 39 82 9B 2F FF 87 34 8E 43 44 C4 DE E9 CB
2 54 7B 94 32 A6 C2 23 3D EE 4C 95 0B 42 FA C3 4E
3 08 2E A1 66 28 D9 24 B2 76 5B A2 49 6D 8B D1 25
4 72 F8 F6 64 86 68 98 16 D4 A4 5C CC 5D 65 B6 92
5 6C 70 48 50 FD ED B9 DA 5E 15 46 57 A7 8D 9D 84
6 90 D8 AB 00 8C BC D3 0A F7 E4 58 05 B8 B3 45 06
7 D0 2C 1E 8F CA 3F 0F 02 C1 AF BD 03 01 13 8A 6B
8 3A 91 11 41 4F 67 DC EA 97 F2 CF CE F0 B4 E6 73
9 96 AC 74 22 E7 AD 35 85 E2 F9 37 E8 1C 75 DE 6E
A 47 E1 1A 71 1D 29 C5 89 6F B7 62 0E AA 18 BE 1B
B FC 56 3E 4B C6 D2 79 20 9A DB C0 FE 78 CD 5A F4
C 1F D A8 33 88 07 C7 31 B1 12 10 59 27 80 EC 5F
D 60 51 7E A9 19 B5 4A 0D 2D E5 7A 9F 93 C9 9C EF
E A0 E0 3B 4D AE 2A F5 B0 CB EB BB 3C 83 53 99 61
F 17 2B 04 7E BA 77 D6 26 E1 69 14 63 55 21 0C 7D

Пример 9.2

Рисунок 9.7 показывает, как матрица состояний преобразуется с использованием SubBytes. Рисунок также показывает, что InvSubBytes однозначно воспроизводит оригинал. Заметим, что если два байта имеют одинаковое значение, то они преобразуются одинаково. Например, два байта 0416 и 0416 в левой матрице состояний преобразуются в F216 и F216 в правой матрице состояний и наоборот. Причина в том, что каждый байт использует одну и ту же таблицу преобразований.

 Преобразование SubByte по примеру 9.2.

Рис. 9.7. Преобразование SubByte по примеру 9.2.
Преобразование с использованием поля GF(2 в степени 8)

Хотя мы можем использовать таблицы 9.1 и 9.2 для перестановки каждого байта, AES дает определение алгебраическим преобразованиям на основе поля GF(28) с помощью неприводимых полиномов (x8 + x4 + x3 + x + 1), как это показано на рис. 9.8.

Преобразование SubByte повторяет процесс, называемый subbyte, шестнадцать раз. Inv SubByte повторяет процесс, называемый invsubbyte. Каждый шаг преобразования обрабатывает один байт.

В процедуре subbyte байт (двоичной строки на 8 битов) находится в GF(28) с помощью неприводимого полинома по модулю (x8 + x4 + x3+ x + 1). Обратите внимание, что байт — 0016 сам является собственной инверсией. Инвертированный байт затем интерпретируется как матрица-столбец с самым младшим битом наверху и самым старшим битом внизу. Эта матрица-столбец умножается на постоянную квадратную матрицу, X, и результат, который является матрицей-столбцом, складывается с постоянной матрицей столбца y, что дает новый байт. Обратите внимание, что умножение и сложение битов происходит в GF(2). invsubbyte делает те же самые действия в обратном порядке.

После нахождения байта инверсного сомножителя процесс похож на аффинное шифрование, которое мы обсуждали в "Традиционные шифры с симметричным ключом" . При шифровании умножение является первой операцией, сложение — второй. При дешифровании вычитание (сложение инверсией) является первым, а деление (умножение с инверсией) — вторым. Мы можем легко доказать, что эти два преобразования инверсны друг другу, потому что сложение или вычитание в GF(2) — фактически операция ИСКЛЮЧАЮЩЕЕ ИЛИ.

\tt\parindent0pt

\ 

subbyte:         

d = X (s_{r,c})^{-1} \oplus  y

invsubbyte:      

$[X^{-1} (d \oplus  y)^{-1}] = [X^{-1} (X ((s_{r,c})^{-1}y\oplus y]^{-1} = [(s_{r,c})^{-1}]^{-1} = s_{r,c}$
Преобразования SubBytes и InvSubBytes инверсны друг другу.
 Процессы Subbytes и Invbytes

Рис. 9.8. Процессы Subbytes и Invbytes

Пример 9.3

Покажем, как байт 0C преобразуется в FE с помощью процедуры subbyte и преобразуется обратно в 0C с помощью процесса invsubbyte.

1. subbyte

a. Инверсный сомножитель в поле GF(28) есть B0 или в двоичном отображении b (1011 0000).

b. Умножая на матрицу X эту матрицу, имеем в результате c = (10011101).

c. Результат применения операции XOR (ИСКЛЮЧАЮЩЕЕ ИЛИ ) - d = (11111110) FE в шестнадцатеричном представлении.

2. invsubbyte

a. Результат применения операции XOR (ИСКЛЮЧАЮЩЕЕ ИЛИ) - c = (10011101)

b. Результат умножения на матрицу X~1 - (11010000) или B0.

c. Инверсия по умножению B0 - это 0C.

Алгоритм

Хотя на рисунке мы показали матрицы, чтобы подчеркнуть характер подстановки (аффинное преобразование), алгоритм не обязательно использует умножение и сложение матриц, потому что большинство элементов в постоянной квадратной матрице — только 0 или 1. Значение постоянной матрицы столбца — 0 \times 63. Мы можем написать простой алгоритм, чтобы выполнить SubByte. Алгоритм 9.1 вызывает процедуру subbyte 16 раз — один раз для каждого байта в матрице состояний. Процедура ByteToMatrix преобразовывает байт к матрицу-столбец 8 \times 1. Процедура MatrixToByte преобразовывает матрицу-столбец 8 \times 1 к байту. Расширение этого алгоритма для InvSubBytes оставляем как упражнение.

Нелинейность

Хотя умножение и сложение матриц в процедуре subbyte — преобразование аффинного типа и линейно, замена байта его мультипликативной инверсией в GF(28) — нелинейная. Этот шаг делает все преобразование нелинейным.

< Лекция 8 || Лекция 9: 12345 || Лекция 10 >
Евгений Виноградов
Евгений Виноградов

Прошел экстерном экзамен по курсу перепордготовки "Информационная безопасность". Хочу получить диплом, но не вижу где оплатить? Ну и соответственно , как с получением бумажного документа?

Илья Сидоркин
Илья Сидоркин

Добрый день! Подскажите пожалуйста как и когда получить диплом, после сдичи и оплаты?????

Константин Леденев
Константин Леденев
Россия
Олег Равков
Олег Равков
Россия