- •А.М. ГОЛИКОВ
- •Учебное пособие:
- •Томск 2018
- •Учебное пособие
- •История развития криптографии
- •Основные характеристики открытого текста
- •Классификация шифров
- •Шифры перестановки
- •Шифр Хилла
- •Шифры сложной замены
- •Линейный конгруэнтный генератор
- •Регистр сдвига с линейной обратной связью
- •Блочные и поточные системы шифрования
- •Принципы построения блочных шифров
- •Основной шаг криптопреобразования.
- •Базовые циклы криптографических преобразований.
- •Основные режимы шифрования.
- •Простая замена
- •Гаммирование
- •Гаммирование с обратной связью
- •Выработка имитовставки к массиву данных.
- •Американский стандарт шифрования данных DES
- •Основные режимы шифрования
- •Блочный криптоалгоритм RIJNDAEL и стандарт AES
- •Математические предпосылки
- •Сложение
- •Описание криптоалгоритма
- •Раундовое преобразование
- •Атака “Квадрат”
- •Предпосылки
- •Базовая атака “Квадрат” на 4 раунда
- •Добавление пятого раунда в конец базовой атаки “Квадрат”
- •Добавление шестого раунда в начало базовой атаки “Квадрат”
- •Поточные системы шифрования
- •Поточные режимы блочных шифров
- •Строительные блоки поточных шифров
- •Регистры сдвига с обратной связью
- •Регистры сдвига с линейной обратной связью
- •Генераторы на основе LFSR
- •Регистры сдвига с нелинейной обратной связью
- •Регистры сдвига с обратной связью по переносу
- •Поточный шифр HC-128
- •Инициализация
- •Генерация ключевого потока
- •Поточный шифр Rabbit
- •Инициализация
- •Поточный шифр Salsa20
- •Хеш-функция Salsa20
- •Инициализация
- •Функция шифрования Salsa20
- •Поточный шифр SOSEMANUK
- •SERPENT и его производные
- •Инициализация
- •Генерация ключевого потока
- •Поточный шифр F-FCSR-H
- •Генерация ключевого потока
- •Инициализация
- •Поточный шифр Grain-128
- •Генерация ключевого потока
- •Инициализация
- •Поточный шифр MICKEY-128
- •Инициализация
- •Генерация ключевого потока
- •Поточный шифр Trivium
- •Инициализация
- •Генерация ключевого потока
- •Гаммирование
- •Гаммирование с обратной связью
- •Блочный шифр AES в поточном режиме
- •Функция зашифрования
- •Расширение ключа
- •Функция расшифрования
- •Режим обратной связи по шифртексту (CFB)
- •Режим обратной связи по выходу (OFB)
- •Режим счетчика (Counter mode)
- •Методы оценки качества алгоритмов поточного шифрования
- •1. Период
- •2. Криптоанализ шифров
- •3. Линейная сложность
- •4. Исчерпывающий поиск ключа
- •5. Time-memory-data trade-off атака
- •6. Корреляционная атака
- •Быстрая корреляционная атака
- •Алгебраическая атака
- •Атака различением
- •Статистический анализ гаммы шифров
- •Статистические свойства
- •Тестирование
- •Набор статистических тестов НИСТ
- •Частотный тест
- •Частотный тест внутри блока
- •Тест последовательностей
- •Тест наибольших последовательностей единиц в блоке
- •Тест рангов двоичных матриц
- •Спектральный тест
- •Тест сравнения непересекающихся шаблонов
- •Тест сравнения пересекающихся шаблонов
- •Тест сжатия алгоритмом Зива-Лемпела
- •Тест линейной сложности
- •Тест серий
- •Энтропийный тест
- •Тест совокупных сумм
- •Тест случайных отклонений
- •Вариант теста случайных отклонений
- •Анализ результатов тестирования
- •Исследование производительности шифров
- •Rabbit
- •Salsa20/12
- •Salsa20/12
- •Sosemanuk
- •Выводы
- •Цель работы Изучить криптографический стандарт шифрования ГОСТ 28147-89 и его особенности, познакомиться с различными режимами блочного шифрования.
- •Порядок выполнения работы
- •Контрольные вопросы
- •Интерфейс учебно-программного комплекса
- •Главное окно
- •Пункт меню “Файл”
- •Пункт меню “AES”
- •Режимы ECB, CBC, CFB, OFB
- •Режим ECB (Electronic Code Book – режим электронной кодовой книги)
- •Режим CBC (Ciphertext Block Chaining – режим сцепления блоков шифротекста)
- •Режим CFB (Ciphertext Feedback – обратная связь по шифротексту)
- •Режим OFB (Output Feedback – режим обратной связи по выходу)
- •Описание алгоритма
- •Безопасность
- •Программная реализация
- •Заключение
- •Общее описание лабораторной работы
- •Общий вид окна учебной программы
- •Требования к размещению файлов
- •Необходимые знания
- •Загрузка варианта
- •Выбор вероятных составляющих
- •Нахождение вероятной части ключа
- •Определение положения отводов
- •Поиск начального заполнения
- •Получение гаммы
- •Получение открытого текста
- •Отчет о проделанной работе
- •Сообщения выдаваемые в процессе работы
- •Сообщения об ошибках
- •Сообщения-вопросы
- •Критические ошибки
- •Пример
- •Асимметричные криптосистемы [8 -14]
- •Предпосылки появления асимметричных криптосистем
- •Обобщенная схема асимметричной крипосистемы
- •Алгебраическая обобщенная модель шифра
- •Односторонние функции
- •Факторизация
- •Дискретный логарифм
- •Криптосистема RSA
- •Основные определения и теоремы
- •Алгоpитм RSA
- •Процедуры шифрования и расшифрования в криптосистеме RSA
- •Криптосистема Эль-Гамаля
- •Комбинированный метод шифрования
- •Метод экспоненциального ключевого обмена Диффи-Хеллмана
- •Алгоритмы практической реализации криптосистем с открытым ключом
- •Возведение в степень по модулю m
- •Алгоритм Евклида вычисления НОД
- •Вычисление обратных величин в кольце целых чисел
- •Генерация простых чисел
- •Атаки на алгоритм RSA
- •Практическая часть
- •Лабораторная работа 1
- •Ход работы
Блок зашифрованных данных Тш1 одновременно является также исходным состоянием N для выработки второго блока гаммы шифра Гш2 и по обратной связи передается на вход. Новое значение N зашифровывается с помощью цикла зашифрования 32-З. Полученное в результате зашифрования значение N образует второй 64-разрядный блок гаммы шифра Гш2, который суммируется поразрядно по модулю 2 со вторым блоком открытых данных То2.
Выработка последующих блоков данных шифра Гшi и зашифрование соответствующих блоков открытых данных Тоi (i = 3, …, m) производится аналогично. Если длина последнего m-го блока открытых данных Тоm меньше 64 бит, то из последнего m-го блока гаммы шифра Гшm используется только соответствующее число разрядов гаммы шифра, остальные разряды отбрасываются.
Аналогичным образом производится расшифрование в режиме гаммирования с обратной связью (рисунок 2.33б).
Блочный шифр AES в поточном режиме
В основе стандарта шифрования AES лежит алгоритм Rijndael. Rijndael – это итерационный блочный шифр, имеющий архитектуру “Квадрат”. Шифр имеет переменную длину блоков и различные длины ключей. Длина ключа и длина блока могут быть равны независимо друг от друга 128, 192 или 256 битам. В стандарте AES-128 определена длина блока данных, равная 128 битам.
Операции алгоритма AES выполнены на основе двумерного массива байтов, называемого состоянием (state). Состояние состоит из четырех строк, каждая из которых содержит Nb байт, где Nb – длина блока в битах, деленная на 32. В массиве состояния, обозначенном символом s, каждый байт имеет два индекса: номер строки r, 0 ≤ r < 4, и номер столбца c, 0 ≤ c < Nb. Это позволяет обращаться к отдельному байту состояния как src. Для AES-128 Nb = 4, т.е. 0 ≤ c < 4.
Перед применением операции зашифрования или расшифрования, входной блок данных, представленный в виде массива байтов in0, …, in15, копируется в массив состояния (рисунок 2.34):
src = inr+4c, 0 ≤ r < 4, 0 ≤ c < Nb,
ав конце операций зашифрования или расшифрования, данные из состояния копируются
ввыходной массив (рисунок 2.34):
outr+4c = src, 0 ≤ r < 4, 0 ≤ c < Nb.
203
in0 |
in4 |
in8 |
in12 |
|
s00 |
s01 |
s02 |
s03 |
|
|
out0 |
out4 |
out8 |
out12 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
in1 |
in5 |
in9 |
in13 |
|
s10 |
s11 |
s12 |
s13 |
|
out1 |
out5 |
out9 |
out13 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
in2 |
in6 |
in10 |
in14 |
|
s20 |
s21 |
s22 |
s23 |
|
out2 |
out6 |
out10 |
out14 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
in3 |
in7 |
in11 |
in15 |
|
s30 |
s31 |
s32 |
s33 |
|
out3 |
out7 |
out11 |
out15 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Входной |
блок |
Промежуточное состояние |
Выходной блок |
Рис. 2.34. Входной и выходной блоки данных, промежуточное состояние Ключ шифрования также представляется в виде прямоугольного массива с четырьмя
строками (рисунок 2). Число столбцов Nk этого массива равно длине ключа в битах, деленной на 32. В стандарте определены ключи всех трех размеров – 128 бит, 192 бита и 256 бит, то есть соответственно 4, 6 и 8 32-разрядных слова (или столбца – в табличной форме представления). В некоторых случаях ключ шифрования рассматривается как линейный массив 4-байтовых слов. Слова состоят из 4 байтов, которые находятся в одном столбце (при представлении в виде прямоугольного массива).
k00 k01 k02 k03
k10 k11 k12 k13
k20 k21 k22 k23
k30 k31 k32 k33
Рис. 2.35. Формат представления ключа шифрования
Для алгоритма AES длина входного и выходного блоков, а также блока состояния – 128 битов, т.е. Nb = 4. Длина ключа шифрования равна 128, 192 или 256 битов, т.е. Nk = 4, 6 или 8. Количество раундов, которые будут выполнены в течение выполнения алгоритма, зависит от размера ключа. Число раундов обозначается Nr, где Nr = 10 при Nk = 4, Nr = 12 при Nk = 6 и Nr
=14 при Nk = 8.
Идля шифрования, и для расшифрования, алгоритм AES использует раундовую функцию, которая составлена из четырех различных преобразований над байтами: 1) замена байта, используя таблицу замены (S-блок), 2) сдвиг строк массива состояния на различные смещениями, 3) смешивание данных в пределах каждого столбца массива состояния, и 4) добавление раундового ключа к состоянию. Эти преобразования (и их инверсии) описаны ниже.
204
Функция зашифрования
Перед зашифрованием входные данные копируются в массив состояния. После начального добавления раундового ключа, массив состояния преобразуется с помощью раундовой функции 10, 12 или 14 раз (в зависимости от длины ключа). Заключительный раунд немного отличается от первых Nr – 1 раундов. Затем полученное состояние копируется в выходной массив.
Раундовая функция состоит из 4 различных преобразований: SubBytes, ShiftRows, MixColumns и AddRoundKey. Все Nr раундов идентичны за исключением последнего, который не включает преобразование MixColumns (рисунок 2.36).
Входной блок
AddRoundKey round = 1 .. 9
SubBytes
ShiftRows
MixColumns
AddRoundKey
SubBytes
ShiftRows
AddRoundKey
Выходной блок
Рис. 2.36. Схема функции зашифрования (Nb = 4, Nk = 4) Преобразование SubBytes – нелинейная замена байта, которая работает независимо на
каждом байте состояния, используя таблицу замены (S-блок). Эта таблица замен создается с использованием двух преобразований:
1.получение обратного элемента относительно умножения в поле GF(28), нулевой элемент переходит сам в себя;
2.применение преобразования над GF(2), определенного сле-
дующим образом:
b'i = bi b(i+4)mod8 b(i+5)mod8 b(i+6)mod8 b(i+7)mod8 ci,
где c0 = c1 = c5 = c6 = 1, c2 = c3 = c4 = c7 = 0, bi и b'i – соответственно исходное и
преобразованное значение i-го бита, i = 0, …, 7.
В преобразовании ShiftRows байты в последних трех строках состояния циклически
сдвигаются влево на различное число байт. Первая строка (r = 0) не сдвигается. Вторая 205
строка (r = 1) сдвигается на 1 байт, третья строка (r = 2) – на 2 байта, четвертая строка (r = 3)
– на 3 байта.
Преобразование MixColumns работает с состоянием столбец за столбцом, обрабатывая каждый столбец как 4-элементный полином. Столбцы рассматриваются как полиномы над GF(28) и умножаются по модулю x4 + 1 на фиксированный полином a(x), приведенный ниже
a(x) = {03}x3 + {01}x2 + {01}x + {02}.
Это может быть представлено в матричном виде:
s0c |
|
02 |
03 |
01 |
01 s0c |
|
|
|
|||
s |
|
|
01 02 |
03 |
01 s |
|
, |
0 c 3. |
|||
|
1c |
|
|
|
|
02 |
|
1c |
|
||
s |
|
01 01 |
03 s |
2c |
|
|
|
||||
|
2c |
|
|
|
|
|
02 s |
|
|
|
|
s |
|
|
03 |
01 |
01 |
3c |
|
|
|
||
|
3c |
|
|
|
|
|
|
|
|
|
Врезультате этого умножения байты столбца заменяются следующими: s'0c = ({02} • s0c) ({03} • s1c) s2c s3c,
s'1c = s0c ({02} • s1c) ({03} • s2c) s3c, s'2c = s0c s1c ({02} • s2c) ({03} • s3c), s'3c = ({03} • s0c) s1c s2c ({02} • s3c).
Впреобразовании AddRoundKey раундовый ключ добавляется к состоянию простой
поразрядной операцией XOR. Каждый раундовый ключ состоит из Nb 4-байтовых слов развернутого ключа. Сложение раундового ключа и состояния производится следующим образом:
[s'0c, s'1c, s'2c, s'3c] = [s0c, s1c, s2c, s3c] [wround Nb+c], 0 ≤ с < Nb,
где [wi] – слова развернутого ключа, описанного ниже, round – номер раунда, 0 ≤ round ≤ Nr. При зашифровании, перед первым применением раундовой функции, происходит начальное добавление раундового ключа (round = 0). Применение преобразования AddRoundKey в Nr раундах зашифрования происходит при 1 ≤ round ≤ Nr.
Расширение ключа
В алгоритме AES для получения раундовых ключей используется алгоритм расширения ключа. Расширенный ключ представляет собой линейный массив w[i] из Nb(Nr + 1) 4- байтовых слов, i = 0, …, Nb(Nr + 1). Алгоритм выработки ключей зависит от величины Nk. Первые Nk слов расширенного ключа заполняются ключом шифрования. Каждое последующее слово w[i] получается посредством XOR предыдущего слова w[i–1] и слова на Nk позиций ранее w[i – Nk]
w[i] = w[i – 1] w[i – Nk].
206