Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Лекция 9 - Продолжение лекции 8 - Шифрование

.pdf
Скачиваний:
2
Добавлен:
18.02.2024
Размер:
1.56 Mб
Скачать

Алгоритмы на основе сети Фейстеля

Сеть Фейстеля подразумевает разбиение обрабатываемого блока данных на несколько субблоков (чаще всего - на два), один из которых обрабатывается некоей функцией 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/ если хочется покодить