1.06M
Категория: ИнформатикаИнформатика

Шифр Магма

1.

Алгоритм блочного шифрования Магма
Шифр МАГМА относится к DES-подобным криптосистемам и представляет собой
блочный шифр, основанный на сети Фейстеля, и является доработанной версией
шифра СССР, описанного в стандарте 1989 года – ГОСТ 28147-89
Шифр МАГМА входит в стандарт Российской Федерации ГОСТ 34.12-2018 [6] как
шифр, с длинной шифруемого блока равной 64 битам. Шифр МАГМА в
стандарте 2018 года имеет ряд отличий от шифра, представленного в стандарте
1989 года, однако структура шифра и набор операций шифрования в целом
остались неизменными. Основным отличием стала фиксированная таблица
подстановки, что избавило данный шифр от потенциальных уязвимостей,
возникающих при некорректном формировании таблицы подстановки. Шифр
ориентирован на блок в 64 бита, имеет ключ размером 256 бит и 32 раунда
шифрования, что определяет его криптостойкость.

2.

Описание шифра МАГМА или чему нас
учит ГОСТ 34.12—2018

3.

Продолжение

4.

Второе продолжение

5.

Окончательное продолжение

6.

Структура шифра МАГМА
Структурная схема состоит из предварительного
разбиения 64-битного блока на два подблока по 32
бита, и и 32-х раундов шифрования, по окончании
которых полученные два блока объединяются в
выходной блок. На каждом раунде шифрования, 32
бита правого блока поступают на функцию
шифрования, вместе с 32 битами раундового ключа.
Результат функции шифрования, после сложения по
модулю 2 (операция исключающее ИЛИ) с 32
битами левого бока становится правым блоком
следующей итерации. Исходный правый блок
текущей итерации становится левым блоком
следующей итерации.

7.

Функция шифрования
На вход функции шифрования поступает шифруемый
блок размером 32 бита, представляющий собой
правый блок сети Фейстеля и раундовый ключ
размером 32 бита. Далее, два блока складываются
друг с другом по модулю 232.
Результат сложения разбивается на 8 блоков по 4
бита, которые поступают на соответствующие блоки
подстановки S. В каждом из блоков подстановки 4
бита входных данных заменяются 4-мя битами в
соответствии с таблицами подстановки. Результаты
подстановки объединяются в 32 битный блок, после
чего к нему применяется операция циклического
сдвига влево на 11 позиций. Полученный результат
передаётся на выход функции шифрования.

8.

Генерация раундовых ключей
Рассмотрим генерацию раундовых ключей. Ключ в шифре Магма имеет
размер 256 бит. Для генерации раундовых ключей данный ключ
разбивается на 8 блоков по 32 бита. Обозначим их как Key1..Key8. Тогда 32
раундовых ключа K1..K32 могут быть определены в соответствии с таблицей
(следующий слайд). То есть, каждый раундовый ключ – это фрагмент
исходного ключа, выбранный по заданному алгоритму. Так первым восьми
раундовым ключам K1..K8 соответствуют ключи Key1..Key8, вторым восьми
раундовым ключам K9..K16 также соответствуют ключи Key1..Key8,
следующим восьми раундовым ключам K17..K24 снова соответствуют ключи
Key1..Key8, а вот последним восьми раундовым ключам соответствуют
ключи Key, но в обратном направлении – Key8..Key1.

9.

Определение раундовых ключей
шифра Магма
Ключ(256 бит)={Key1, Key2, Key3, Key4, …,Key8}
K1
K2
K3
K4
K5
K6
K7
K8
Key1 Key2 Key3
Key4
Key5 Key6
Key7
Key8
K9
K11
K12
K13
K14
K15
K16
Key1 Key2 Key3
Key4
Key5 Key6
Key7
Key8
K17
K19
K20
K21
K22
K23
K24
Key1 Key2 Key3
Key4
Key5 Key6
Key7
Key8
K25
K28
K29
K30
K31
K32
Key8 Key7 Key6 Key5 Key4 Key3
Key2
Key1
K10
K18
K26
K27

10.

Алгоритмическая и программная реализация
шифра МАГМА – генерация ключей
12345678 12345678 12345678 87654321

11.

Модель функции генерации
раундовых ключей
Не смотря на простоту алгоритма генерации раундовых ключей,
его практическая реализация выглядит достаточно неочевидно,
особенно при представлении ключей в виде массивов из ячеек.
Однако, реализаций можно придумать достаточно много.
Естественная последовательность действий может быть
представлена в следующем виде:
Разбить исходный ключ размером 256 бит на 8 блоков Key по 32
бита.
Записать побитно данные блоки в 32 ячейки, как указано в
таблице.

12.

Программная реализация генерации
раундовых ключей

13.

Модель функции шифрования f
Функция шифрования, в соответствии с рисунком включает в
себя три основных действия:
– Сложение двух 32 битных блоков по модулю 232.
– Подстановку.
– Циклический регистровый сдвиг влево на 11 разрядов.
Данные операции нам частично знакомы. Создадим три
функции для каждой из этих операций, а потом соберём их
вместе в виде функции шифрования.

14.

32
Функция сложения по модулю 2 .
Рассмотрим операцию сложения по модулю 232. Данную
операцию можно представить в следующем виде:
r = (a + b) mod 232.

15.

Реализация сложения в десятичной
системе

16.

Реализация сложения для массива бит

17.

Принцип сложения для массива бит
Пример сложения
в десятичной системе
в двоичной системе

18.

Таблица истинности с тремя входами
А032
B32
PR
C032
PRn
0
0
0
0
0
0
1
0
1
0
1
0
0
1
0
1
1
0
0
1
0
0
1
1
0
0
1
1
0
1
1
0
1
0
1
1
1
1
1
1

19.

Функция подстановки (нелинейное
биективное преобразование)
Фактически, функция подстановки замещает каждые четыре бита входного
блока на другие 4 бита, в соответствии с таблицей подстановки. Каждая
строка π соответствует S блоку. Таким образом, 4 бита поступающие на вход S
блока определяют порядковый номер ячейки в строке π, а содержимое
ячейки является подставляемым числом.

20.

Реализация функции подстановки

21.

Реализация функции циклического
регистрового сдвига на 11 позиций V1

22.

Реализация функции циклического
регистрового сдвига на 11 позиций V2

23.

Реализация функции циклического
регистрового сдвига на 11 позиций V3

24.

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

25.

Моделирование шифра Магма

26.

Проверка работы шифра
Для проверки работы шифра Магма воспользуемся тестовыми данными из стандарта. В
стандарте указано, что для ключа:
ffeeddccbbaa99887766554433221100f0f1f2f3f4f5f6f7f8f9fafbfcfdfeff
и шифруемого блока
fedcba9876543210
результат шифрования будет:
4ee901e5c2d8ca3d
English     Русский Правила