- •А.М. ГОЛИКОВ
- •Учебное пособие:
- •Томск 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
- •Ход работы
|
|
|
|
Рис. 2.25. Графическое представление системы |
|||||
Работа счетчиков определяется следующим образом: |
|||||||||
c0,i+1 = c0,i |
+ a0 + 7,i mod 232, |
|
|
|
|||||
c1,i+1 = c1,i |
+ a0 + 0,i+1 mod 232, |
|
|
|
|||||
c2,i+1 = c2,i |
+ a0 + 1,i+1 mod 232, |
|
|
|
|||||
c3,i+1 = c3,i |
+ a0 + 2,i+1 mod 232, |
|
|
|
|||||
c4,i+1 |
= c4,i |
+ a0 |
+ 3,i+1 mod 232, |
|
|
|
|||
c5,i+1 |
= c5,i |
+ a0 |
+ 4,i+1 mod 232, |
|
|
|
|||
c6,i+1 |
= c6,i |
+ a0 |
+ 5,i+1 mod 232, |
|
|
|
|||
c7,i+1 |
= c7,i |
+ a0 |
+ 6,i+1 mod 232, |
|
|
|
|||
где бит счетчика по переносу j,i+1 задан выражением |
|||||||||
|
1 |
åñëè c |
a |
0 |
|
232 |
j 0 |
||
|
|
|
0,i |
|
7,i |
|
|
|
|
|
åñëè c j,i |
aj |
j 1,i 1 2 |
32 |
j 0 |
||||
j,i 1 1 |
|
||||||||
|
0 |
во всех остальных |
случаях |
||||||
|
|
|
|
|
|
|
|
|
|
Кроме того, константы aj определены как: a0 = 0x4D34D34D, a1 = 0xD34D34D3,
a2 = 0x34D34D34, a3 = 0x4D34D34D, a4 = 0xD34D34D3, a5 = 0x34D34D34, a6 = 0x4D34D34D, a7 = 0xD34D34D3.
После каждой итерации результат извлекается следующим образом:
si15..0 |
x015,i ..0 x531,i ..16 |
, |
|
si 31..16 |
x031,i ..16 x315,i |
..0 , |
|||||||
si 47..32 |
|
x215,i ..0 |
x731,i ..16 |
|
, |
si 63..48 |
x231,i |
..16 x515,i ..0 |
, |
||||
si 79..64 |
|
x415,i ..0 |
x1,31i |
..16 |
|
, |
si 95..80 |
x431,i |
..16 x715,i ..0 |
, |
|||
si111..96 |
x615,i ..0 x331,i |
..16 |
, si127..112 x631,i ..16 x115,i |
..0 . |
Поточный шифр Salsa20
Ядром шифра Salsa20 является хеш-функция с 64-байтовым входом и 64-байтовым выходом [6]. Хеш-функция в режиме счетчика используется как поточный шифр: Salsa20 шифрует 64-байтовый блок открытого текста хешированием ключа, в данном случае, и номера блока, складывая результат по модулю 2 (XOR) с открытым текстом.
Хеш-функция Salsa20
Хеш-функция Salsa20(x) определяется следующим выражением:
181
Salsa20(x) = x + doubleround10(x),
где каждая 4-байтовая последовательность x рассматривается как слово в форме littleendian.
Если b = (b0, b1, b2, b3) – 32-битовое слово, где b3 и b0 обозначают соответственно самый старший байт и самый младший байт величины b, тогда
littleendian(b) = 224b3 + 216b2 + 28b1 + b0.
Функция doubleround(x) вычисляется путем последовательного применения к последовательности x из 16 слов (слово – 32-битовый элемент) функций columnround(x) и rowround(x):
doubleround(x) = rowround(columnround(x)).
Функций columnround(x) и rowround(x) в свою очередь строятся на основе функции quarterround(y). Функция quarterround(y) оперирует последовательностями из 4 слов.
Если y = (y0, y1, y2, y3), тогда quarterround(y) = (z0, z1, z2, z3), где z1 = y1 ((y0 + y3) <<< 7),
z2 = y2 ((z1 + y0) <<< 9), z3 = y3 ((z2 + z1) <<< 13), z0 = y0 ((z3 + z2) <<< 18).
Функцию quarterround можно представить как изменение y следующим образом: сначала y1 изменяется на z1, затем y2 изменяется на z2, затем y3 изменяется на z3, затем y0 изменяется на z0. Каждое изменение является обратимым, таким образом, вся функция является обратимой.
Функция rowround(y) оперирует последовательностями из 16 слов. Если y = (y0, y1, y2, y3, …, y15), тогда rowround(y) = (z0, z1, z2, z3, …, z15), где (z0, z1, z2, z3) = quarterround (y0, y1, y2, y3),
(z5, z6, z7, z4) = quarterround (y5, y6, y7, y4), (z10, z11, z8, z9) = quarterround (y10, y11, y8, y9),
(z15, z12, z13, z14) = quarterround (y15, y12, y13, y14).
Можно представить вход (y0, y1, …, y15) в виде квадратной матрицы:
y0y4y8y12
y1 |
y2 |
y3 |
|
|
y5 |
y6 |
y7 |
|
|
|
||||
y |
9 |
y |
y |
|
|
10 |
11 |
|
|
y |
|
y |
y |
|
13 |
14 |
15 |
|
Функция rowround изменяет строки матрицы параллельно, пропуская перестановку каждой строки через функцию quarterround. В первой строке функция rowround изменяет y1, затем y2, затем y3, затем y0; во второй строке функция rowround изменяет y6, затем y7, затем y4,
182
затем y5; в третьей строке функция rowround изменяет y11, затем y8, затем y9, затем y10; в четвертой строке функция rowround изменяет y12, затем y13, затем y14, затем y15.
Функция columnround(x) также как и функция rowround(y) оперирует последовательностями из 16 слов.
Если x = (x0, x1, x2, x3, …, x15) тогда columnround(x) = (y0, y1, y2, y3, …, y15), где (y0, y4, y8, y12) = quarterround (x0, x4, x8, x12),
(y5, y9, y13, y1) = quarterround (x5, x9, x13, x1), (y10, y14, y2, y6) = quarterround (x10, x14, x2, x16), (y15, y3, y7, y11) = quarterround (x15, x3, x7, x11).
Эквивалентная формула: (y0, y4, y8, y12, y1, y5, y9, y13, y2, y6, y10, y14, y3, y7, y11, y15) = rowround(x0, x4, x8, x12, x1, x5, x9, x13, x2, x6, x10, x14, x3, x7, x11, x15).
Можно представить вход (x0, x1, …, x15) в виде квадратной матрицы:
x0x4x8x12
x1 |
x2 |
x3 |
|
|
x5 |
x6 |
x7 |
|
|
|
||||
x |
9 |
x |
x |
|
|
10 |
11 |
|
|
x |
|
x |
x |
|
13 |
14 |
15 |
|
Функция columnround с этого ракурса представляется просто заменой (транспонированием) функции rowround. Функция columnround, изменяет столбцы матрицы параллельно, пропуская перестановку каждого столбца через функцию quarterround. В первом столбце, функция columnround изменяет y4, затем y8, затем y12, затем y0; во втором столбце, функция columnround изменяет y9, затем y13, затем y1, затем y5; в третьем столбце, функция columnround изменяет y14, затем y2, затем y6, затем y10; в четвертом столбце, функция columnround изменяет y3, затем y7, затем y11, затем y15.
Инициализация
Если ключ k – 32-байтовая или 16-байтовая последовательность, а iv – 16-байтовая последовательность, тогда Salsa20k(iv) является 64-байтовой последовательностью.
Определим 0 = (101, 120, 112, 97), 1 = (110, 100, 32, 51), 2 = (50, 45, 98, 121), и 3 = (116, 101, 32, 107). Если k0, k1, iv являются 16-байтовыми последовательностями, тогда
Salsa20k0,k1(iv) = Salsa20( 0, k0, 1, iv, 2, k1, 3).
Определим 0 = (101, 120, 112, 97), 1 = (110, 100, 32, 49), 2 = (54, 45, 98, 121), и 3 = (116, 101, 32, 107). Если k, iv являются 16-байтовыми последовательностями, тогда
Salsa20k(iv) = Salsa20( 0, k, 1, iv, 2, k, 3).
Константы 0 1 2 3 и 0 1 2 3, равны “expand 32-byte k” и “expand 16-byte k” (в ASCII) соответственно.
183