Алгоритм шифрования S-AES

Содержание

Слайд 2

История проведения конкурса AES В 1997 году правительство США объявило на

История проведения конкурса AES

В 1997 году правительство США объявило на

базе института стандартизации NIST (the National Institute of Standards and Technology) открытый конкурс на новый стандарт блочного шифра США. Победитель конкурса получал статус нового стандарта шифрования AES (Advanced Encryption Standard) и рекомендовался к повсеместному использованию на территории США.
Слайд 3

Требования, которые предъявлялись к новому стандарту: криптоалгоритм должен быть открыто опубликован;

Требования, которые предъявлялись к новому стандарту:

криптоалгоритм должен быть открыто опубликован;
криптоалгоритм должен

быть симметричным блочным шифром, поддерживающим 128-, 192- и 256-битные ключи.
криптоалгоритм должен быть предназначен как для аппаратной, так и для программной реализации;
криптоалгоритм должен быть доступен для открытого использования в любых продуктах, а значит, не может быть запатентован, в противном случае патентные права должны быть аннулированы;
криптоалгоритм подвергается изучению по следующим параметрам: стойкости, стоимости, гибкости, реализуемости в smart-картах.
Слайд 4

Слайд 5

Слайд 6

Число раундов Nr как функция от длины ключа Nk и длины блока Nb

Число раундов Nr как функция от длины ключа Nk и длины

блока Nb
Слайд 7

Раундовое преобразование Раунд состоит из четырех различных преобразований: замена байтов SubBytes()

Раундовое преобразование

Раунд состоит из четырех различных преобразований:
замена байтов SubBytes() –

побайтовой подстановки в S-блоках с фиксированной таблицей замен размерностью 8x256;
сдвига строк ShiftRows() – побайтового сдвига строк массива State на различное количество байт;
перемешивание столбцов MixColumns() – умножение столбцов состояния, рассматриваемых как многочлены над GF(28), на многочлен третьей степени g(x) по модулю x4+1;
сложение с раундовым ключом AddRoundKey() – поразрядного XOR с текущим фрагментом развернутого ключа.
Слайд 8

Применение преобразования SubBytes()

Применение преобразования SubBytes()

Слайд 9

Преобразование SubBytes() Представляет собой нелинейную замену байтов, выполняемую независимо с каждым

Преобразование SubBytes()

Представляет собой нелинейную замену байтов, выполняемую независимо с каждым

байтом состояния. Таблицы замены S-блока являются инвертируемыми и построены из композиции следующих двух преобразования входного байта:
получение обратного элемента относительно умножения в поле GF(28), нулевой элемент {00} переходит сам в себя;
применение преобразования над GF(2), определенного следующим образом:

Суть преобразования может быть описана уравнением
bi’=bi ⊕ b(i+4)mod8⊕b(i+5)mod8 ⊕ b(i+6)mod8 ⊕ b(i+7)mod8 ⊕ ci,
где c0=c1=c5=c6=1, c2=c3=c4=c7=0, bi и bi’-соответственно исходное и преобразованное значение i-го бита, i меняется от 0 до 7.

Слайд 10

Преобразование SubBytes()

Преобразование SubBytes()

Слайд 11

Таблица замен S-блока Логика работы S-блока при преобразовании байта {xy} отражена

Таблица замен S-блока

Логика работы S-блока при преобразовании байта {xy} отражена в

таблице. Например, результат {26} преобразования байта {23} находится на пересечении 3-й строки и 4-го столбца.
Слайд 12

Таблица замен S-блока Логика работы S-блока при преобразовании байта {xy} отражена

Таблица замен S-блока

Логика работы S-блока при преобразовании байта {xy} отражена в

таблице. Например, результат {26} преобразования байта {23} находится на пересечении 3-й строки и 4-го столбца.
Слайд 13

Преобразование сдвига строк (ShiftRows)

Преобразование сдвига строк (ShiftRows)

Слайд 14

Величина сдвига для разной длины блоков В стандарте AES, где определен

Величина сдвига для разной длины блоков

В стандарте AES, где определен единственный

размер блока, равный 128 битам, С1 = 1, С2 = 2, С3 = 3.
Слайд 15

Преобразование перемешивания столбцов (MixColumns)

Преобразование перемешивания столбцов (MixColumns)

Слайд 16

Преобразование перемешивания столбцов (MixColumns) это такое преобразование, при котором столбцы состояния

Преобразование перемешивания столбцов (MixColumns) это такое преобразование, при котором столбцы состояния

рассматриваются как многочлены над GF(28) и умножаются по модулю х4+1 на многочлен g(x), выглядящий следующим образом: g(x)={03}x3+{01}x2+{01}x+{02}.
Это может быть представлено в матричном виде следующим образом:

Преобразование перемешивания столбцов (MixColumns)

где с – номер столбца массива State.

Слайд 17

В результате такого умножения байты столбца s0c, s1c, s2c, s3c заменяются

В результате такого умножения байты столбца s0c, s1c, s2c, s3c заменяются

соответственно на байты:
s’0c=({02}*s0c)⊕({03}*s1c) ⊕s2c⊕s3c,
s’1c=s0c⊕({02}*s1c) ⊕({03}*s2c) ⊕s3c,
s’2c=s0c⊕s1c⊕({02}*s2c) ⊕({03}*s3c),
s’3c=({03}*s0c) ⊕s1c⊕s2c⊕({02}*s3c).

Преобразование перемешивания столбцов (MixColumns)

Слайд 18

Добавление раундового ключа (AddRoundKey)

Добавление раундового ключа (AddRoundKey)

Слайд 19

Алгоритм выработки ключей Раундовые ключи получаются из ключа шифрования посредством алгоритма

Алгоритм выработки ключей

Раундовые ключи получаются из ключа шифрования посредством

алгоритма выработки ключей. Он содержит два компонента: расширение ключа (Key Expansion) и выбор раундового ключа (Round Key Selection). Основополагающие принципы алгоритма выглядят следующим образом:
общее число битов раундовых ключей равно длине блока, умноженной на число раундов, плюс 1 (например для длины блока 128 бит и 10 раундов требуется 1408 бит раундовых ключей);
ключ шифрования преобразуется в расширенный ключ (Expanded Key);
раундовые ключи берутся из расширенного ключа следующим образом: первый раундовый ключ содержит первые Nb слов, второй – следующие Nb слов и т. д.
Расширенный ключ (Key Expansion) в Rijndael представляет собой линейный массив w[i] из Nb(Nr+1) 4-байтовых слов.
Первые Nk слов содержат ключ шифрования. Все остальные слова определяются рекурсивно из слов с меньшими индексами. Алгоритм выработки подключей зависит от величины Nk.
Первые Nk слов заполняются ключом шифрования. Каждое последующее слово w[i] получается посредством сложения по модулю два предыдущего слова w[i-1] и слова на Nk позиций ранее, то есть w[i-Nk]:
w[i] = w[i-1] ⊕ w[i-Nk].
Слайд 20

Алгоритм выработки ключей Для слов, позиция которых кратна Nk перед операцией

Алгоритм выработки ключей

Для слов, позиция которых кратна Nk перед операцией сложения

по модулю два применяется преобразование к w[i-1], а затем еще прибавляется раундовая константа Rconst. Преобразование реализуется с помощью двух дополнительных функций: RotWord(), осуществляющей побайтовый сдвиг 32-разрядного слова по формуле {a0, a1, a2, a3} → {a1, a2, a3, a0}, и SubWord(), осуществляющей побайтовую замену с использованием S-блока функции SubBytes(). Значение Rconst[j] равно2j-1. Значение w[i] в этом случае равно:
w[i] = SubWord(RotWord(w[i-1])) ⊕ Rconst[i/Nk] ⊕ w[i-Nk].
Раундовый ключ i получается из слов массива раундового ключа от W[Nbi] и до W[Nb(i+1)].
Слайд 21

Функция зашифрования Шифр Rijndael состоит: из начального добавления раундового ключа; Nr

Функция зашифрования

Шифр Rijndael состоит: из начального добавления раундового ключа; Nr – 1 раундов; заключительного

раунда, в котором отсутствует операция MixColumns().
Слайд 22

Функция обратного дешифрования Если вместо SubBytes(), ShiftRows(), MixColumns() и AddRoundKey() в

Функция обратного дешифрования

Если вместо SubBytes(), ShiftRows(), MixColumns() и AddRoundKey() в обратной

последовательности выполнить инверсные им преобразования, можно построить функцию обратного дешифрования. При этом порядок использования раундовых ключей является обратным по отношению к тому, который используется при зашифровании.
Функция AddRoundKey() обратна сама себе, учитывая свойства используемой в ней операции XOR.
Для преобразования байта {xy} используется инверсный S-блок InvSubBytes
В преобразовании InvShiftRows последние 3 строки состояния сдвигаются вправо на различное число байтов. Строка 1 сдвигается на С1 байт, строка 2 – на С2 байт, и строка 3 – на С3 байт. Значение сдвигов С1, С2 и С3 зависят от длины блока Nb.
Слайд 23

Функция обратного дешифрования В преобразовании InvMixColumns столбцы состояния рассматриваются как многочлен

Функция обратного дешифрования

В преобразовании InvMixColumns столбцы состояния рассматриваются как многочлен над

GF(28) и умножаются по модулю x4+1 на многочлен g-1(x), выглядящий следующим образом:
g-1(x)={0b}x3+{0d}x2+{09}x+{0e}.
Это может быть представлено в матричном виде следующим образом:

В результате на выходе получаются следующие байты:
s’0c=({0e}*s0c)⊕({0b}*s1c)⊕({0d}*s2c)⊕({09}*s3c),
s’1c=({09}*s0c)⊕({0e}*s1c)⊕({0b}*s2c)⊕({0d}*s3c),
s’2c=({0d}*s0c)⊕({09}*s1c)⊕({0e}*s2c)⊕({0b}*s3c),
s’3c=({0b}*s0c)⊕({0d}*s1c)⊕({09}*s2c)⊕({0e}*s3c).

Слайд 24

Последовательность преобразований в двухраундовом варианте Rijndael

Последовательность преобразований в двухраундовом варианте Rijndael

Слайд 25

Основные особенности Rijndael Основные особенности Rijndael: новая архитектура «Квадрат», обеспечивающая быстрое

Основные особенности Rijndael

Основные особенности Rijndael:
новая архитектура «Квадрат», обеспечивающая быстрое рассеивание и

перемешивание информации, при этом за один раунд преобразованию подвергается весь входной блок;
байт ориентированная структура, удобная для реализации на 8-разрядных МК;
все раундовые преобразования представляют собой операции в конечных полях, допускающие эффективную аппаратную и программную реализацию на различных платформах.
Слайд 26

Алгоритм шифрования S_AES

Алгоритм шифрования S_AES

Слайд 27

Формат представления данных

Формат представления данных

Слайд 28

Формат секретного ключа шифрования

Формат секретного ключа шифрования

Слайд 29

Раундовое преобразование Раунд состоит из четырех различных преобразований: замена полубайтов SubHalfBytes()

Раундовое преобразование

Раунд состоит из четырех различных преобразований:
замена полубайтов SubHalfBytes() –подстановки

в S-блоках с фиксированной таблицей замен;
сдвига строк ShiftRows() –сдвига строк массива State на различное количество полубайт;
перемешивание столбцов MixColumns() – умножение столбцов состояния, рассматриваемых как многочлены над GF(24), на многочлен третьей степени g(x) по модулю x2+1;
сложение с раундовым ключом AddRoundKey() – поразрядного XOR с текущим фрагментом развернутого ключа.
Слайд 30

Применение преобразования SubBytes в AES()

Применение преобразования SubBytes в AES()

Слайд 31

Применение преобразования SubBytes в S_AES()

Применение преобразования SubBytes в S_AES()

Слайд 32

Преобразование SubBytes() Представляет собой нелинейную замену полубайтов, выполняемую независимо с каждым

Преобразование SubBytes()

Представляет собой нелинейную замену полубайтов, выполняемую независимо с каждым

полубайтом состояния. Таблицы замены S-блока являются инвертируемыми и построены из композиции следующих двух преобразования входного байта:
получение обратного элемента относительно умножения в поле GF(24), нулевой элемент {00} переходит сам в себя;
применение преобразования над GF(24), определенного следующим образом:

Суть преобразования может быть описана уравнением
bi’=bi ⊕ b(i+2)mod4⊕b(i+3)mod4 ⊕ ci,
где c0=c3=1, c1=c2=0, bi и bi’-соответственно исходное и преобразованное значение i-го бита, i меняется от 0 до 3.

Слайд 33

Таблица замен S-блока

Таблица замен S-блока

Слайд 34

Инверсная таблица замен S-блока

Инверсная таблица замен S-блока

Слайд 35

Преобразование сдвига строк в AES (ShiftRows)

Преобразование сдвига строк в AES (ShiftRows)

Слайд 36

Преобразование сдвига строк в S_AES (ShiftRows)

Преобразование сдвига строк в S_AES (ShiftRows)

Слайд 37

Величина сдвига для разной длины блоков В стандарте AES, где определен

Величина сдвига для разной длины блоков

В стандарте AES, где определен единственный

размер блока, равный 128 битам, С1 = 1, С2 = 2, С3 = 3.
Слайд 38

Преобразование перемешивания столбцов в AES(MixColumns)

Преобразование перемешивания столбцов в AES(MixColumns)

Слайд 39

Преобразование перемешивания столбцов в S_AES(MixColumns)

Преобразование перемешивания столбцов в S_AES(MixColumns)

Слайд 40

Преобразование перемешивания столбцов (MixColumns) это такое преобразование, при котором столбцы состояния

Преобразование перемешивания столбцов (MixColumns) это такое преобразование, при котором столбцы состояния

рассматриваются как многочлены над GF(24) и умножаются по модулю х2+1 на многочлен g(x), выглядящий следующим образом: g(x)={2}x+{3}.
Это может быть представлено в матричном виде следующим образом:

Преобразование перемешивания столбцов (MixColumns)

где с – номер столбца массива State.

Слайд 41

В результате такого умножения полубайты столбца S0c и S1c заменяются соответственно

В результате такого умножения полубайты столбца S0c и S1c заменяются соответственно

на полубайты:
S0c’ = ({3}∙S0c) ⊕ ({2}∙S1c),
S1c’ = ({2}∙S0c) ⊕ ({3}∙S1c).

Преобразование перемешивания столбцов (MixColumns)

Слайд 42

Добавление раундового ключа в AES(AddRoundKey)

Добавление раундового ключа в AES(AddRoundKey)

Слайд 43

Добавление раундового ключа в S_AES(AddRoundKey)

Добавление раундового ключа в S_AES(AddRoundKey)

Слайд 44

Алгоритм выработки ключей Раундовые ключи вырабатываются из исходного 16-битового секретного ключа

Алгоритм выработки ключей

Раундовые ключи вырабатываются из исходного 16-битового секретного

ключа по следующей схеме. Исходный 16-битовый ключ, как уже говорилось ранее, можно представить в виде четырех полубайтов К00, К10, К01, К11. Эти четыре полубайта формируют первый раундовый подключ: К001, К101, К011, К111. Второй и третий раундовые подключи можно получить по следующим формулам:
К00r = Sub Half-Bytes*(K11r-1) ⊕ K00r-1;
К10r = Sub Half-Bytes*(K01r-1) ⊕ K10r-1 ⊕ 2r-2;
К01r = К00r ⊕ К01r-1;
К11r = К10r ⊕ К11r-1,
где верхний индекс r – номер вырабатываемого подключа
Слайд 45

Функция зашифрования

Функция зашифрования

Слайд 46

Функция дешифрования

Функция дешифрования

Слайд 47

ПРИМЕР Зашифровать входной блок данных: {7, e, 3, b} с использованием

ПРИМЕР

Зашифровать входной блок данных: {7, e, 3, b} с использованием секретного

ключа К: {3, e, f, a}
Слайд 48

Запишем эти данные в виде двумерных массивов: Массив исходных данных: Ключ:

Запишем эти данные в виде двумерных массивов:

Массив исходных данных:

Ключ:

Слайд 49

Для начала необходимо получить раундовые подключи. Первым раундовым подключом будет являться

Для начала необходимо получить раундовые подключи. Первым раундовым подключом будет являться

сам секретный ключ, то есть:

К001 = 3;
К101 = e;
К011 = f;
К111 = a.

Слайд 50

Воспользовавшись формулами К00r = Sub Half-Bytes*(K11r-1) ⊕ K00r-1; К10r = Sub

Воспользовавшись формулами

К00r = Sub Half-Bytes*(K11r-1) ⊕ K00r-1;
К10r = Sub Half-Bytes*(K01r-1) ⊕

K10r-1 ⊕ 2r-2;
К01r = К00r ⊕ К01r-1;
К11r = К10r ⊕ К11r-1,
где верхний индекс r –
номер вырабатываемого подключа

найдем:

К002 = Sub Half-Bytes*(К111) ⊕ К001 =
= Sub Half-Bytes*(a) ⊕ 3 = f ⊕ 3 = c;
К102 = Sub Half-Bytes*(К011) ⊕ К101 ⊕ 20=
=Sub Half-Bytes*(f) ⊕ e ⊕ 1 =2 ⊕ e ⊕ 1 = d;
К012 = К002 ⊕ К011 = c ⊕ f = 3;
К112 = К102 ⊕ К111 = d ⊕ a = 7;
К003 = Sub Half-Bytes*(К112) ⊕ К002 =
= Sub Half-Bytes*(7) ⊕ c = a ⊕ c = 6;
К103 = Sub Half-Bytes*(К012) ⊕ К102 ⊕ 21
= Sub Half-Bytes*(3) ⊕ d ⊕ 2 =1 ⊕ d ⊕ 2 = e;
К013 = К003 ⊕ К012 = 6 ⊕ 3 = 5;
К112 = К103 ⊕ К112 = e ⊕ 7 = 9;

К001 = 3;
К101 = e;
К011 = f;
К111 = a.

Слайд 51

Таким образом, получили три раундовых подключа: Первый подключ К1 Второй подключ К2 Третий подключ К3

Таким образом, получили три раундовых подключа:

Первый подключ К1

Второй подключ К2

Третий

подключ К3
Слайд 52

Сложение исходных данных с первым раундовым подключом

Сложение исходных данных с первым раундовым подключом

Слайд 53

Произведем замену полубайтов с помощью таблицы замены, получим:

Произведем замену полубайтов с помощью таблицы замены, получим:

Слайд 54

Произведем сдвиг

Произведем сдвиг

Слайд 55

Произведем перемешивание столбцов с помощью операции Mix Columns*() Для начала представим

Произведем перемешивание столбцов с помощью операции Mix Columns*()

Для начала представим

табличные данные в виде многочленов.

S00 = {8} = x3,
S10 = {e} = x3 ⊕ x2 ⊕ x,
S01 = {c} = x3 ⊕ x2,
S11 = {9} = x3 ⊕ 1

Слайд 56

Теперь можно приступить к нахождению новых элементов массива: S00’ = ({3}∙S00)

Теперь можно приступить к нахождению новых элементов массива:

S00’ = ({3}∙S00) ⊕

({2}∙S10) = ((x⊕1)∙x3) ⊕
⊕ (x∙(x3⊕x2⊕x)) = (x4⊕x3) ⊕ (x4⊕x3⊕x2) = x2 = {4};
S10’ = ({2}∙S00) ⊕ ({3}∙S10)=(x∙x3) ⊕ ((x⊕1)∙(x3⊕x2⊕x))=
=(x4) ⊕ (x4⊕x3⊕x2⊕x3⊕x2⊕x) = (x4) ⊕ (x4⊕x) =
=x = {2};
S01’ = ({3}∙S01) ⊕ ({2}∙S11)=((x⊕1)∙(x3⊕x2))⊕(x∙(x3⊕1))=
=(x4⊕x3⊕x3⊕x2) ⊕ (x4⊕x) = x2 ⊕ x = {6};
S11’ = ({2}∙S01) ⊕ ({3}∙S11)=(x∙(x3⊕x2))⊕((x⊕1)∙(x3⊕1))=
=(x4⊕x3) ⊕ (x4⊕x⊕x3⊕1) = x ⊕ 1 = {3}.

{2}=x

{3}=x ⊕ 1

Значение модуля х4 ⊕ x ⊕ 1

Слайд 57

Получили массив преобразованных данных

Получили массив преобразованных данных

Слайд 58

Сложение исходных данных со вторым раундовым подключом

Сложение исходных данных со вторым раундовым подключом

Слайд 59

Произведем замену полубайтов с помощью таблицы замены, получим:

Произведем замену полубайтов с помощью таблицы замены, получим:

Слайд 60

Произведем сдвиг

Произведем сдвиг

Слайд 61

Сложение исходных данных со вторым раундовым подключом

Сложение исходных данных со вторым раундовым подключом