- •А.М. ГОЛИКОВ
- •Учебное пособие:
- •Томск 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
- •Ход работы
Пусть r0 … r159 будет состоянием регистра R до тактирования, а r’0 … r’159 будет состоянием регистра R после тактирования.
Feedback_bit = r159 Input_bit_R
For 1 i 159 {r’i = ri–1; r’0 = 0;}
For 0 i 159 {if i Rtaps, r’i = r’i Feedback_bit}
If Control_bit_R = 1
oFor 0 i 159 {r’i = r’i ri}
Rtaps – это набор позиций отводов обратной связи для R:
Rtaps = {0, 4, 5, 8, 10, 11, 14, 16, 20, 25, 30, 32, 35, 36, 38, 42, 43, 46, 50, 51, 53, 54, 55, 56, 57, 60, 61, 62, 63, 65, 66, 69, 73, 74, 76, 79, 80, 81, 82, 85, 86, 90, 91, 92, 95, 97, 100, 101, 105, 106, 107, 108, 109, 111, 112, 113, 115, 116, 117, 127, 128, 129, 130, 131, 133, 135, 136, 137, 140, 142, 145, 148, 150, 152, 153, 154, 156, 157}.
Операция тактирования регистра S clock_S(S, Input_bit_S, Control_bit_S) определяется следующим псевдокодом:
Пусть s0 … s159 будет состоянием регистра S до тактирования, а s’0 … s’159 будет состоянием регистра после тактирования. Также, для упрощения описания шифра, мы будем использовать как промежуточные переменные.
Feedback_bit = s159 Input_bit_R
For 1 i 158 { si = si–1 ((si comp0i) (si+1 comp1i)); si = 0; s159 =
s158;}
If Control_bit_S = 0:
oFor 0 i 159 {s’i = si (fb0i Feedback_bit)}
If instead Control_bit_S = 1
oFor 0 i 159 {s’i = si (fb1i Feedback_bit)}
Значения comp0, comp1, fb0 и fb1, определенные разработчиками, приведены в [6].
Поточный шифр Trivium
Trivium – синхронный поточный шифр, использующий 80-битовый ключ и 80-битовый вектор инициализации IV [6].
Инициализация
Алгоритм инициализируется загрузкой 80-битового ключа и 80-битового IV в 288битовое начальное состояние и устанавливает все оставшиеся биты в 0, за исключением s286,
197
s287, и s288. Затем состояние изменяется за 4 полных цикла (без генерации бит ключевого потока). В итоге это можно представить в виде псевдокода, приведенного ниже:
(s1, s2, …, s93) (K1, …, K80, 0, …, 0) (s94, s95, …, s177) (IV1, …, IV80, 0, …, 0) (s178, s279, …, s288) (0, …, 0, 1, 1, 1) for i = 0 to 4 288 do
{
t1 s66 s91 s92 s93 s171
t2 s162 s175 s176 s177 s264 t3 s243 s286 s287 s288 s69
(s1, s2, …, s93) (t3, s1, …, s92)
}
(s94, s95, …, s177) (t1, s94, …, s176) (s178, s279, …, s288) (t2, s178, …, s287)
Генерация ключевого потока
Предложенная конструкция содержит 288-битовое внутреннее состояние, обозначенное (s1, …, s288). Генерация ключевого потока состоит из итерационного процесса, который извлекает значения 15 определенных битов состояния и использует их для обновления 3 битов состояния и вычисления 1 бита ключевого потока zi. Затем биты состояния циклически сдвигаются и процесс повторяет, пока не будут сгенерированы требуемые N бит ключевого потока. Полное описание дается следующим простым псевдокодом:
for i = 1 to N do
{
t1 s66 s93 t2 s162 s177
t3 s243 s288
zi t1 t2 t3
t1 t1 s91 s92 s171 t2 t2 s175 s176 s264 t3 t3 s286 s287 s69
(s1, s2, …, s93) (t3, s1, …, s92)
(s94, s95, …, s177) (t1, s94, …, s176)
(s178, s279, …, s288) (t2, s178, …, s287)
}
Графическое представление процесса генерации ключевого потока приведено на рис. 2.30.
198
Рис. 2.30. Поточный шифр Trivium
Блочные шифры в поточных режимах Российский блочный шифр ГОСТ 28147-89 в поточном режиме
В России в качестве стандарта шифрования принят алгоритм криптографического преобразования ГОСТ 28147-89. Этот алгоритм предназначен для аппаратной и программной реализации, удовлетворяет необходимым криптографическим требованиям и не накладывает ограничений на степень секретности защищаемой информации.
Для шифрования используются 256 битовый ключ, который разбивается на 8 32-битовых подключа: K0, K1, …, K7, и таблица блока подстановки H. Заполнение таблиц блока подстановки H является долговременным ключевым элементом.
Алгоритм криптографического преобразования ГОСТ 28147-89 опирается на цикл шифрования (рисунок 2.31). Цикл шифрования построен по принципу сети Фейстеля.
199
N2 |
|
|
N1 |
|
|
|
|
|
|
|
|
|
|
|
L = N1 + Xj mod 232 |
|
|
Xj |
|
|
m = 0, …, 7
Rm = Km(L)
R <<< 11
N2 |
|
N1 |
Рис. 2.31. Цикл шифрования Один цикл шифрования преобразует 64-битовый блок данных, используя один 32-
битовый элемент ключа Kj и блок подстановки H.
Преобразуемый 64-битовый блок данных (N) разбивается на две части: старшую (N2) и младшую (N1). Значение N1 суммируется по модулю 232 с одним из 32-битовых элементов ключа Kj, j = 0, …, 7. Результат суммирования преобразуется в блоке подстановки H. Блок подстановки H состоит из 8 узлов замены H1, …, H8 размером 64 бита каждый. Поступающий на блок подстановки 32-разрядный блок разбивается на восемь последовательно идущих 4- разрядных блоков, каждый из которых преобразуется в 4-разрядный блок соответствующим узлом замены, представляющим собой таблицу из шестнадцати строк, содержащих по четыре бита заполнения в строке. Входной блок определяет адрес строки в таблице, заполнение данной строки является выходным блоком. Затем 4-разрядные выходные блоки последовательно объединяются в 32-разрядный блок. Полученное значение R циклически сдвигается на 11 шагов в сторону старших разрядов. Результат сдвига суммируется поразрядно по модулю 2 со значением N2. Полученный результат N2 записывается в N1, при этом старое значение N1 переписывается в N2.
Многократное повторение цикла шифрования, при использовании различных элементов ключа, позволяет построить циклы зашифрования (32-З) и расшифрования (32-Р). В цикле зашифрования 32-З отдельный цикл шифрования повторяется 32 раза, используя 32-битовые элементы ключа в следующем порядке: K0, …, K7, K0, …, K7, K0, …, K7, K7, …, K0. Цикл
200