Лекция 9 - Продолжение лекции 8 - Шифрование
.pdfАлгоритмы на основе сети Фейстеля
Сеть Фейстеля подразумевает разбиение обрабатываемого блока данных на несколько субблоков (чаще всего - на два), один из которых обрабатывается некоей функцией f() и накладывается на один или несколько субблоков.
Дополнительный аргумент функции f() Ki называется ключом раунда. Ключ раунда является результатом обработки ключа шифрования процедурой расширения ключа, задача которой - получение необходимого количества ключей Ki из исходного ключа шифрования относительно небольшого размера.
•Наложение обработанного субблока на необработанный чаще всего выполняется с помощью логической операции "исключающее или"
– XOR.
•Достаточно часто вместо XOR используется сложение по модулю 2n, где n - размер субблока в битах.
•После наложения субблоки меняются местами, то есть в следующем раунде алгоритма обрабатывается уже другой субблок данных.
•На сети Фейстеля основано большинство современных алгоритмов шифрования: DES, RC5, Blowfish, TEA, CAST-128 и т.д
•Алгоритмы на основе сети Фейстеля могут быть сконструированы таким образом, что для зашифрования и расшифрования может использоваться один и тот же код алгоритма, отличающийся порядком применения ключей Ki. Такое свойство алгоритма наиболее полезно при его аппаратной реализации или на платформах с ограниченными ресурсами
Алгоритмы на основе подстановочно-
перестановочных сетей
(SP-сеть - Substitution-permutation network).
SP-сети обрабатывают за один раунд шифруемый блок целиком. Обработка данных к заменам, когда, например, фрагмент входного значения заменяется другим фрагментом в соответствии с таблицей замен, которая может зависеть от значения ключа Ki, и перестановкам, зависящим от ключа Ki.
SP-сети распространены существенно реже, чем сети Фейстеля. Примеры алгоритмов: Serpent, SAFER+
Алгоритмы со структурой квадрат
(Square)
Идея: представление шифруемого блока данных в виде двумерного байтового массива. Криптографические преобразования могут выполняться над отдельными байтами массива, а также над его строками или столбцами.
Пример: Rijndael (AES)
DES
Размер ключа |
Возможные |
|||
комбинации |
||||
|
|
|
||
|
|
|
||
1 |
бит |
2 |
||
|
|
|
||
2 |
биты |
4 |
||
|
|
|||
4 биты |
16 |
|||
|
|
|
||
8 |
биты |
256 |
||
|
|
|
||
16 |
биты |
65536 |
||
|
|
|||
32 биты |
4.2 х 109 |
|||
56 |
бит (DES) |
7.2 х 1016 |
||
64 |
биты |
1.8 х 1019 |
||
128 бит (AES) |
3.4 х 1038 |
|||
192 бит (AES) |
6.2 х 1057 |
|||
256 бит (AES) |
1.1 х 1077 |
AES
Шифрование:
Предварительно входные данные разбиваются на блоки по 16 байт (если полный размер не кратен 16 байтам, то данные дополняется до размера, кратного 16 байтам)
Блоки представляются в виде матрицы 4x4 — state. Расширение ключа - KeyExpansion;
Начальный раунд - сложение state с основным ключом;
9 раундов шифрования, каждый из которых состоит из преобразований:
•SubBytes - замена байтов state по таблице S-box.
•ShiftRows - циклический сдвиг строк state.
•MixColumns - умножения каждого столбца state на фиксированную матрицу.
•AddRoundKey - раундовый ключ поэлементно добавляется к state с помощью поразрядного XOR
Финальный раунд, состоящий из преобразований:
•SubBytes - замена байтов state по таблице S-box.
•ShiftRows - циклический сдвиг строк state.
•AddRoundKey - раундовый ключ поэлементно добавляется к state с помощью поразрядного XOR.
KeyExpansion — процедура расширения основного ключа для создания раундовых ключей, которые затем используются в раундах шифрования. Расширенный ключ состоит из 44 четырехбайтовых слов (wi): 4 слова на основной ключ и по 4 слова на 10 раундовых ключей. Таким образом, полная длина расширенного ключа составляет 1408 бит.
Операция расширения ключа использует массив Rcon Алгоритм:
1.Четыре слова основного ключа переносятся в первые четыре слова расширенного ключа.
2.Если число i без остатка делится на 4, то
wi = SubBytes(RotByte(wi-1 )) xor Rconi/4 .
1. Иначе: wi = wi-4 xor wi-1 .
Операция RotByte производит циклическую перестановку байта исходного слова:
{x0, x1, x2, x3} → {x3 , x0 , x1 , x2}.
SubBytes. Каждый байт представляется в виде двух шестнадцатеричных чисел b = (x, y), где x определяется 4 старшими разрядами b, а y — 4 младшими. В таблице S-box размера 16x16 находятся значения для замены исходного байта: значение b' на пересечении строки x и столбца y S-box используется в качестве замены исходному байту b.
ShiftRows. Нулевая строка остается на месте, первая смещается влево на 1 байт, вторая на 2 байта и третья на 3 соответственно.
MixColumns — умножения каждого столбца state на фиксированную матрицу, т.е. линейное преобразование над столбцами state.
AddRoundKey — раундовый ключ поэлементно добавляется к state с помощью поразрядного XOR.
Спасибо https://habr.com/ru/post/534620/, Мэтт Альгрен и еще есть почитать https://habr.сom/ru/post/112733/ если хочется покодить