как начать заново проходить курс, если уже пройдено несколько лекций со сданными тестами? |
Современные симметричные алгоритмы шифрования
7.4 Шифр "Магма" ГОСТ Р 34.12-2015
В июне 2015 года приняты два новых криптографических стандарта Российской Федерации: ГОСТ Р 34.12-2015 "Информационная технология. Криптографическая защита информации. Блочные шифры" и ГОСТ Р 34.13-2015 "Информационная технология. Криптографическая защита информации. Режимы работы блочных шифров", которые вступают в действие с 1 января 2016 года.
ГОСТ Р 34.12-2015 содержит описание двух блочных шифров с длинами блока 128 и 64 бит. Шифр ГОСТ 28147-89 с зафиксированными блоками нелинейной подстановки включен в новый ГОСТ Р 34.12-2015 в качестве 64-битового шифра под названием "Магма" ("Magma"). Стандартом определены следующие блоки замен:
Приведенный в стандарте набор S-блоков обеспечивает наилучшие характеристики, определяющие стойкость криптоалгоритма к дифференциальному и линейному криптоанализу.
Фиксация блоков нелинейной подстановки сделает алгоритм ГОСТ 28147-89 более унифицированным и исключает использование "слабых" блоков нелинейной подстановки. Кроме того, фиксация в стандарте всех долговременных параметров шифра отвечает принятой международной практике. Новый стандарт ГОСТ Р 34.12-2015 терминологически и концептуально связан с международными стандартами ИСО/МЭК 10116 "Информационные технологии. Методы обеспечения безопасности. Режимы работы для n-битовых блочных шифров" (ISO/IEC 10116:2006 Information technology -- Security techniques - Modes of operation for an n-bit block cipher) и серии ИСО/МЭК 18033 "Информационные технологии. Методы и средства обеспечения безопасности. Алгоритмы шифрования": ИСО/МЭК 18033-1:2005 "Часть 1. Общие положения" (ISO/IEC 18033-1:2005 Information technology -- Security techniques -- Encryption algorithms -- Part 1: General) и ИСО/МЭК 18033-3:2010 "Часть 3. Блочные шифры" (ISO/IEC 18033-3:2010 (Information technology -- Security techniques -- Encryption algorithms – Part 3: Block ciphers).
В стандарт ГОСТ Р 34.12-2015 включен также новый блочный шифр ("Кузнечик") с размером блока 128 бит,см.ниже. Ожидается, что этот шифр будет устойчив ко всем известным на сегодняшний день атакам на блочные шифры.
7.5 Блочный шифр Rijndael
Блочный шифр Rijndael в октябре 2000 года стал победителем проведенного Национальным Институтом Стандартов и Технологий (NIST) США конкурса на замену признанного ненадежным алгоритма шифрования DES (Data Encryption Standart). В феврале 2001 года прошел через открытое обсуждение и в апреле 2001 года был объявлен новым федеральным стандартом шифрования США AES (Advanced Encryption Standart), см. [4].
Алгоритм шифрования Rijndael имеет переменную длину блоков и различные длины ключей. Длина ключа и длина блока могут быть равны независимо друг от друга 128, 192 или 256 битам. В стандарте AES определена длина блока данных, равная 128 битам.
Промежуточные результаты преобразований, выполняемых в рамках крипто-алгоритма, называют состояниями (State). Состояние можно представить в виде прямоугольного массива байтов.
При размере блока, равном 128 битам, этот 16-байтовый массив (таблицы 7.5, 7.6) имеет 4 строки и 4 столбца (каждая строка и каждый столбец в этом случае могут рассматриваться как 32-разрядные слова). Входные данные для шифра обозначаются как байты состояния в порядке .
После завершения действия шифра выходные данные получаются из байтов состояния в том же порядке. В общем случае число столбцов равно длине блока, деленной на 32.
В таблице 7.5 представлен пример 128-разрядного блока данных в виде массива state.
Ключ шифрования также представлен в виде прямоугольного массива с четырьмя строками (таблица 7.6. Число столбцов этого массива равно длине ключа, деленной на 32. В стандарте определены ключи всех трех размеров ---128 бит, 192 бита и 256 бит, то есть соответственно 4, 6 и 8 32-разрядных слова (или столбца --- в табличной форме представления). В некоторых случаях ключ шифрования рассматривается как линейный массив 4-байтовых слов. Слова состоят из 4 байтов, которые находятся в одном столбце (при представлении в виде прямоугольного массива).
Зависимость числа раундов в алгоритме Rijndael от чисел
и
32-битных слов, соответственно, в блоке и ключе, отражена в таблице 7.7.
7.5.1 Раундовое преобразование
Раунд состоит из четырех различных преобразований:
- замена байтов SubBytes() --- побайтовая подстановка в S-блоках с фиксированной таблицей замен размерностью 8x256;
- сдвиг строк ShiftRows() --- побайтовый сдвиг строк массива State на различное количество байт;
-
перемешивание столбцов MixColumns() --- умножение столбцов состояния, рассматриваемых как многочлены над
, на многочлен третьей степени g(x) по модулю
;
- сложение с раундовым ключом AddRoundKey() --- поразрядное XOR с текущим фрагментом развернутого ключа.
Алгоритм Rijndael оперирует байтами, которые рассматриваются как элементы конечного поля . Для построения такого поля используется неприводимый многочлен 8-й степени над полем
(см. параграф 1.12). В алгоритме Rijndael используется многочлен
.
Для каждого байта построим многочлен
, который можно считать элементом построенного нами поля
. Далее отождествим следующие представления байта:

где ,
--- цифры шестнадцатеричного представления байта.
Операция сложения над элементами поля представляет собой поразрядное сложение по модулю 2, умножение представляет собой операцию умножения со взятием результата по модулю многочлена .
Преобразование SubBytes() представляет собой нелинейную замену байтов, выполняемую независимо с каждым байтом состояния.
- построим многочлен
, найдём к нему обратный многочлен
, и составим новый байт
из коэффициентов
;
- получим байт
с помощью линейного преобразования:

Пример 7.8 Применим преобразование SubBytes() к байту .
Многочлен, коэффициентами которого являются биты данного числа: . Вначале найдём обратный к нему многочлен относительно умножения в поле
. Как уже отмечалось ранее, операция умножения в поле
является операцией умножения многочленов с взятием результата по модулю неприводимого многочлена
восьмой степени с использованием операции XOR (сложения по модулю 2) при приведении подобных членов. Так как авторами алгоритма шифрования Rijndael был выбран неприводимый многочлен
, то нам необходимо найти такой многочлен
, который бы при умножении на многочлен
по модулю
давал единицу, то есть
.
С помощью расширенного алгоритма Евклида находим:

Отсюда . Соответствующий байт:
.
Теперь совершим второй этап преобразования.

Результатом проведенного преобразования является значение .
Преобразование сдвига строк ShiftRows() выглядит следующим образом: последние 3 строки состояния циклически сдвигаются влево на различное число байтов. Строка 1 сдвигается на байт, строка 2 --- на
байт, и строка 3 --- на
байт. Значение сдвигов
,
и
в Rijndael зависят от длины блока
. Их величины приведены в таблице 7.8.
В стандарте AES, где определен единственный размер блока, равный 128 битам, ,
,
.
Преобразование перемешивания столбцов (MixColumns) действует отдельно на каждом -м столбце таблицы состояния, как линейное преорбазование:
![]() |
( 7.2) |

В результате такого умножения байты заменятся, соответственно, на байты
![]() |
( 7.3) |
![]() |
( 7.4) |
![]() |
( 7.5) |
![]() |
( 7.6) |
Применение этой операции ко всем четырем столбцам состояния обозначают через MixColumns().
Пример 7.9 Применим операцию MixColumns() к столбцу: ,
,
,
.
Представим элементы полиномами:

Находим по формулам (7.3)-(7.6). Вычислим многочлен:

и возьмём остаток от его деления на . Имеем:

Аналогично находим остальные компоненты столбца:

На рисунке 7.5 показано преобразование исходного столбца в столбец
с помощью операции MixColumns().
В операции добавления подключа (AddRoundKey) подключ раунда
добавляется к данным с помощью операции побитового сложения по модулю два (операция XOR). Это сложение также можно рассматривать как сложение элементов поля
:

7.5.2 Алгоритм выработки раундовых ключей
Подключи вырабатываются из исходного секретного ключа шифрования с помощью алгоритма выработки ключей (Key Schedule). Длина подключа (в 32-разрядных словах) равна длине блока слов.
Подключи, используемые в каждом раунде шифрования, получаются из исходного секретного ключа шифрования с помощью алгоритма выработки подключей. Он содержит два компонента.
- Расширение ключа (Key Expansion). В результате расширения из ключа длиной
слов получается расширенный ключ, слова которого обозначим через
.
- Выбор раундовых подключей из расширенного ключа. В результате получаются раундовые ключи
.
Расширение ключа. При расширении ключа нам потребуются следующие операции, применяемые к словам , состоящим из байт
(будем использовать обозначение
):

Кроме того, определим константы-слова . Напомним, что под байтом
понимается элемент поля
, то байт состоит из коэффициентов из
остатка
от деления
на неприводимый многочлен
.
Под сложением слов будем понимать их побитовое сложение по модулю два, что эквивалентно побайтовому сложению в поле
. Иногда также пишут
.
Первые слова расширенного ключа совпадают со словами ключа шифрования. Последующие слова
вычисляются последовательно при
по следующему алгоритму:
- Возьмём
.
- Если
кратно
и
, то положим
.
- Если
и
, то положим
.
- Положим
.
Выбор раундовых подключей. Ключ
-го раунда (
) состоит из слов
. Например, при
получаем:
![w=\{w[0],w[1],w[2],w[3], \underbrace{w[4],w[5],w[6],w[7]}_{\text{Подключ} K^{(1)}}, \underbrace{w[8],w[9],w[10],w[11]}_{\text{Подключ} K^{(2)}},\ldots \}.](/sites/default/files/tex_cache/6bb01c85cefc34bd92a9aab0267112b9.png)
7.5.3 Дополнение. О выборе блоков замен для AES и аналогичных алгоритмов
Как известно, для оценки качества блоков замен используются различные критерии. Одним из таких критериев является максимум модуля коэффициентов корреляции, имеет значение также количество нулей корреляционной матрицы. Для выбранного в алгоритме Rijndael неприводимого многочлена корреляционная матрица следующая:

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