- •А.М. ГОЛИКОВ
- •Учебное пособие:
- •Томск 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
- •Ход работы
Процесс инициализации завершен, и шифр готов к генерации ключевой последовательности.
Генерация ключевого потока
На каждом шаге, обновляется один элемент таблицы, и генерируется один 32-битовый блок выходной последовательности. S-блок используется для генерации только 512 выходных последовательностей, затем он обновляется за следующие 512 шага. Процесс генерации ключевой последовательности HC-128 описывается следующим псевдокодом (рисунок 1).
i=0; |
|
|
|
|
|
|
repeat{ |
|
|
|
|
||
j |
i |
|
|
|
|
|
|
=imod512; |
|
|
|
||
if( mod1024)<512{ |
|
|
||||
|
Pj Pj g Pj Pj Pj |
511]); |
||||
|
[]= []+ ([ 3], [ |
10], [ |
||||
|
|
|
1 |
Pj |
|
|
|
s |
|
h Pj |
|
|
|
|
i |
= ([ 12]) |
[]; |
|
|
|
|
|
1 |
|
|
|
|
} |
|
|
|
|
|
|
else{ |
|
|
|
|
||
|
Qj Qj g Qj Qj Qj |
511]); |
||||
|
[]= []+ ([ 3], [ |
10], [ |
||||
|
|
|
2 |
Qj |
|
|
|
s |
|
h Qj |
|
|
|
|
i |
= ([ 12]) |
[]; |
|
|
|
|
|
2 |
|
|
|
}
i=i+1;
}
Рисунок 1. Псевдокод генерации ключевой последовательности
si – 32-битовый выходной блок на i-м шаге процесса генерации ключевой последовательности.
Поточный шифр Rabbit
Алгоритм Rabbit в качестве входных данных использует 128-битовый секретный ключ и, если необходимо, 64-битовый вектор IV [6]. За одну итерацию генерирует блок 128 псевдослучайных бит. Шифрование/расшифрование производится путем сложения по модулю 2 (XOR) сгенерированной псевдослучайной последовательности с открытым/зашифрованным текстом. Размер внутреннего состояния – 513 бит, поделенных между восьмью 32-разрядными переменными состояния, восьмью 32-разрядными счетчиками и одним битом переноса. Эти восемь переменных состояния обновляются посредством восьми парных нелинейных функций. Счетчики гарантируют нижнюю границу на длине периода для переменных состояния.
Внутреннее состояние поточного шифра состоит из 513 битов. 512 битов разделены между восьмью 32-разрядными переменными состояния xj,i и восьмью 32-разрядными переменными счетчика cj,i, где xj,i – переменная состояния j-ой подсистемы в i-ой итерации, а cj,i обозначает соответствующую переменную счетчика. Также есть один бит счетчика по
178
переносу 7,i, который должен сохраняться/накапливаться между итерациями. Этот бит счетчика по переносу инициализируется путем обнуления. Восемь переменных состояния и восемь счетчиков формируются из ключа при инициализации.
Инициализация
Алгоритм инициализируется разворачиванием 128-битового ключа в восемь переменных состояния и восемь счетчиков так, что есть взаимно однозначное соответствие между ключом и переменными начального состояния xj,i и начальными значениями счетчиков cj,i.
Ключ K[127.. 0] разделен на восемь 16-битовых подключей:
k0 = K[15..0], k1 = K[31..16], …, k7 = K[127..112].
Переменные состояния и счетчика инициализируются из подключей следующим образом:
x j,0 |
k j 1mod8 |
|| k j , |
для четных j |
|
|
|| k j 4 mod8 , |
для нечетных j |
|
|
|
k j 5 mod8 |
|
||
и |
|
|
|
|
x j,0 |
k j 4 mod8 |
|| k j 5 mod8 , |
для четных j |
. |
|
|
для нечетных j |
||
|
k j || k j 1mod8 , |
|
Чтобы уменьшить корреляцию между битами ключа и битами переменных внутреннего состояния система повторяется четыре раза, в соответствии с функцией следующего состояния, определенной ранее. Наконец, переменные счетчика повторно инициализируются согласно выражению:
cj,4 = cj,4 x(j+4 mod 8),4
для всех j, чтобы предотвратить восстановление ключа обратным преобразованием системы счетчика.
Обозначим внутреннее состояние после применения схемы установки ключа как основное состояние. Пусть копия этого основного состояния будет изменена в соответствии со схемой установки IV. Схема установки IV изменяет состояние счетчика как функция IV. Это реализуется путем применения операции XOR к 64-битовым IV и всеми 256 битами состояния счетчика. 64 бита IV обозначаются IV[63..0]. Счетчики изменяются следующим образом:
c0,4 = c0,4 IV[31..0],
c1,4 = c1,4 (IV[63..48] || IV[31..16]), c2,4 = c2,4 IV[63..32],
c3,4 = c3,4 (IV[47..32] || IV[15..0]), c4,4 = c4,4 IV[31..0],
179
|| IV[31..16]),
Ядром алгоритма Rabbit является повторение функции выработки следующего состояния, определенной уравнениями:
x0,i+1 = g0,i + (g7,i <<< 16) + (g6,i <<< 16),
x1,i+1 = g1,i + (g0,i <<< 8) + g7,i,
x2,i+1 = g2,i + (g1,i <<< 16) + (g0,i <<< 16),
x3,i+1 = g3,i + (g2,i <<< 8) + g1,i,
x4,i+1 = g4,i + (g3,i <<< 16) + (g2,i <<< 16),
x5,i+1 = g5,i + (g4,i <<< 8) + g3,i,
x6,i+1 = g6,i + (g5,i <<< 16) + (g4,i <<< 16),
x7,i+1 = g7,i + (g6,i <<< 8) + g5,i,
gj,i = ((xj,i + cj,i+1)2 ((xj,i + cj,i+1)2 >> 32)) mod 232,
где все операции сложения приводятся по модулю 232. Эта двойная система приведена на рисунке 2.25. Перед каждой итерацией счетчики увеличиваются в соответствии с описанным ниже правилом.
180