- •1 Группа 3
- •2 Группа 16
- •3 Группа 23
- •1 Группа
- •1. Алгебраические структуры. Свойства алгебраических структур. Группы, подгруппы. Теория.
- •Практика.
- •2. Циклические группы. Теория.
- •Практика.
- •3. Кольца. Кольца классов вычетов. Теория.
- •Практика.
- •6. Простейшие шифры: простой замены, перестановочный, аффинный.
- •7. Шифры гаммирования. Шифр Виженера/Вернама (одноразовый блокнот).
- •9. Электронная подпись.
- •2 Группа
- •1. Шифр Хилла.
- •2. Генерация простых чисел.
- •3. Генерация псевдослучайных последовательностей и их тесты.
- •4. Криптография с открытым ключом.
- •5. Ранцевая криптосистема.
- •6. Криптосистема rsa. Теория.
- •Практика.
- •7. Криптосистема Эль-Гамаля. Теория.
- •Практика.
- •8. Протокол Диффи-Хеллмана. Модификация эллиптическими кривыми.
- •9. Алгоритмы работы с большими числами.
- •3 Группа
- •1. Стандарт шифрования des.
- •2. Стандарт шифрования aes.
- •3. Гост р 34.12-2015. Шифр «Магма».
- •4. Гост р 34.12-2015. Шифр «Кузнечик».
- •5. Гост р 34.10-2012.
2. Стандарт шифрования aes.
Схема, как примерно работает
AES – симметричный блочный алгоритм, преобразует 128/192/256-битные блоки с помощью 128/192/256-битного ключа за 10/12/14 раундов (кол-во раундов зависит от длины блока и длины ключа).
1) На вход подается блок информации, который преобразуется в матрицу состояний (каждый элемент матрицы это байт), и начальный ключ. Затем матрица XORится с начальным ключом функцией AddRoundKey(). В каждом раунде происходит преобразование с помощью функций SubBytes(), ShiftRows(), MixColumns() и AddRoundKey().
SubBytes() – аффинное преобразование, т.е. замена байтов матрицы по таблице S-box.
ShiftRows() – сдвиг элементов матрицы влево в рамках строки, сдвиг зависит от размера блока информации и порядкового номера строки.
MixColumns() – перемножение столбцов матрицы состояний на фиксированную матрицу.
AddRoundKey() – XOR элементов матрицы с раундовым ключом.
На последнем раунде не используется функция MixColumns().
2) Для генерации раундовых ключей w используется функция KeyExpansion(). Исходный ключ разбивается на блоки по 4 байта, Почти все ключи получается после XOR предыдущего w[i-1] и блока, стоящего на n позиций раньше w[i-n] (n = количество полученных блоков из исходного ключа), каждый первый блок каждого нового раундового ключа подвергается преобразованию с помощью функций RotByte(), SubBytes(результат предыдущей функции) и RC().
RotBytes() – байты блока сдвигаются циклически влево на 1 байт.
RC() – XOR результата SubBytes() с константой раунда.
3. Гост р 34.12-2015. Шифр «Магма».
Схема, как примерно работает
Магма (ГОСТ 34.12.2018) – симметричный блочный алгоритм, работает по принципу сети Фейстеля. На вход подается 64-битный блок информации и 256-битный начальный ключ, который затем разбивается на восемь 32-битных раундовых ключей. Блок делится пополам, правая половина складывается с раундовым ключом по модулю 232, проходит через замену по таблице S-box и циклически сдвигается. Полученное значение XORится с левым блоком, после чего становится новым правым блоком. Предыдущий правый блок становится левым блоком в новом раунде.
Порядок использования ключей раундов распределен по 32 раундам, с 1 по 24 раунд ключи используются в прямом порядке, с 25 по 32 раунд – в обратном.
4. Гост р 34.12-2015. Шифр «Кузнечик».
Схема, как примерно работает
1) Кузнечик (ГОСТ 34.12.2018) – симметричный блочный алгоритм, на вход подается 128-битный блок информации и 256-битный начальный ключ. В каждом раунде блок XORится с раундовым ключом, проходит через замену по таблице S-box и линейно преобразуется с помощью умножения вектора состояний (типо как в AES штука) на константную матрицу. Всего в алгоритме используется 10 раундов.
2) Раундовые ключи генерируются на основе начального ключа. Начальный ключ разбивается пополам, первый раундовый ключ – это левая половина изначального ключа, второй раундовый ключ – правая половина начального ключа. Остальные восемь ключей получаются с помощью сети Фейстеля: правая половина преобразуется с помощью функции F и константы, а затем XORится с левой частью. Полученное значение становится новой правой половиной, а предыдущая правая – левой.
3) Функция F преобразует правый блок с помощью XOR с раундовой константой, замены по таблице S-box и нелинейного преобразования (по сути, умножение в поле Галуа).
