как начать заново проходить курс, если уже пройдено несколько лекций со сданными тестами? |
Современные симметричные алгоритмы шифрования
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). В результате расширения из ключа длиной слов получается расширенный ключ, слова которого обозначим через .
- Выбор раундовых подключей из расширенного ключа. В результате получаются раундовые ключи .
Расширение ключа. При расширении ключа нам потребуются следующие операции, применяемые к словам , состоящим из байт (будем использовать обозначение ):
Кроме того, определим константы-слова . Напомним, что под байтом понимается элемент поля , то байт состоит из коэффициентов из остатка от деления на неприводимый многочлен .
Под сложением слов будем понимать их побитовое сложение по модулю два, что эквивалентно побайтовому сложению в поле . Иногда также пишут .
Первые слова расширенного ключа совпадают со словами ключа шифрования. Последующие слова вычисляются последовательно при по следующему алгоритму:
- Возьмём .
- Если кратно и , то положим .
- Если и , то положим .
- Положим .
Выбор раундовых подключей. Ключ -го раунда () состоит из слов . Например, при получаем:
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 |