
- •А.М. ГОЛИКОВ
- •Учебное пособие:
- •Томск 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
- •Ход работы
c = cn2n + cn–12n–1 + … + c121 – 1.
Последовательность максимального периода, генерируемая FCSR, называется l- последовательностью. l-последовательность генерируется FCSR с числом обратной связи c, для которого 2 является корнем примитивным.
Поточные шифры Обозначения
Ниже используются следующие обозначения:
+: (x + y) означает x + y (mod 232), где 0 x < 232 и 0 y < 232.
: поразрядное исключающее ИЛИ (XOR).
: поразрядное И (AN),ключи).ВD).
&: логическое И.
||: конкатенация.
>>: оператор сдвига вправо. x >> n означает, что x сдвигается вправо на
n бит.
<<: оператор сдвига влево. x << n означает, что x сдвигается влево на n
бит.
>>>: оператор циклического сдвига вправо. x >>> n означает ((x >> n) (x << (32 – n)), где 0 n < 32, 0 x <232.
<<<: оператор циклического сдвига влево. x <<< n означает ((x << n) (x >> (32 – n)), где 0 n < 32, 0 x <232.
: (x
y) означает x – y (mod 512).
A[g..h] обозначает биты с g по h переменной A.
Поточный шифр HC-128
Поточный шифр HC-128 [6] – упрощенная версия поточного шифра HC-256 для 128битового уровня безопасности. HC-128 – простой и свободно доступный шифр, ориентированный на программную реализацию. Поточный шифр HC-128 использует 128 битовые ключ и вектор инициализации IV.
HC-128 состоит из двух секретных таблиц, каждая из которых содержит 512 32разрядных элемента. На каждом шаге один элемент таблицы обновляется с помощью нелинейной функции обратной связи. Все элементы этих двух таблиц обновляются каждые
176
1024 шага. На каждом шаге, нелинейной функцией фильтрации выхода генерируется один 32-разрядный выходной блок.
Инициализация
Процесс инициализации HC-128 состоит в расширении ключа и вектора инициализации в таблицы P и Q (подобно SHA-256) и выполнении цикла шифрования (1024 раза), без генерации выходной последовательности (выходные последовательности используются для обновления P и Q).
В процессе инициализации выполняются следующие шаги:
1. Пусть K = K0||K1||K2||K3 и IV = IV0||IV1||IV2||IV3, где Ki and IVi обозначают 32-битовые числа. Ключ и IV расширяются в массив Wi (0 i 1279):
|
|
|
|
Ki |
|
|
|
0 i 7 |
|
|
|
|
IVi 8 |
|
|
8 i 15 |
|
Wi |
|
W |
W |
W |
|
|||
f |
f |
W |
i |
16 i 1279 |
||||
|
2 |
i 2 |
i 7 |
1 |
i 15 |
i 16 |
|
|
где функции f1(x) и f2(x) при x = x3||x2||x1||x0, (x – 32-битное слово, x0, x1, x2, и x3 – четыре байта. x3 и x0 обозначают соответственно самый старший байт и самый младший байт величины x) определяются как
f1(x) = (x >>> 7) (x >>> 18) (x >> 3), f2(x) = (x >>> 17) (x >>> 19) (x >> 10).
2.Обновить таблицы P и Q массивом W. P[i] = Wi+256, для 0 ≤ i ≤ 511,
Q[i] = Wi+768, для 0 ≤ i ≤ 511.
3.Выполнить цикл шифрования 1024 раза и использовать выходные последовательности
для замены элементов таблицы следующим образом:
for i = 0 to 511 do
P[i] = (P[i] + g1(P[i3], P[i
10], P[i
511])) h1(P[i
12]);
for i = 0 to 511 do
Q[i] = (Q[i] + g2(Q[i3], Q[i
10], Q[i
511])) h2(Q[i
12]);
где функции g1(x), g2(x), h1(x) и h2(x) при x = x3||x2||x1||x0 определяются как g1(x, y, z) = ((x >>> 10) (z >>> 23)) + (y >>> 8),
g2(x, y, z) = ((x <<< 10) (z <<< 23)) + (y <<< 8), h1(x) = Q[x0] + Q[256 + x2],
h2(x) = P[x0] + P[256 + x2].
Для функции h1(x) таблица Q используется как S-блок. Для функции h2(x), таблица P используется как S-блок.
177