- •А.М. ГОЛИКОВ
- •Учебное пособие:
- •Томск 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
- •Ход работы
Для слов, позиция которых кратна Nk, перед применением операции XOR слово w[i–l] подвергается воздействию двух дополнительных функций: RotWord, осуществляющей побайтовый сдвиг 32-разрядного слова по формуле {a0 a1 a2 a3} {a1 a2 a3 a0}, и SubWord, осуществляющей побайтовую замену с использованием S-блока функции SubBytes. Затем к полученному значению прибавляется раундовая константа Rcon[j] = 2j–1. В итоге значение w[i] равно
w[i] = SubWord(RotWord(w[i – 1])) Rcon[i/Nk] w[i – Nk].
i-ый раундовый ключ получается из слов массива раундового ключа от w[Nbi] и до w[Nb(i+1)].
Функция расшифрования
Если преобразования, используемые в функции зашифрования, инвертировать и затем применить в обратном порядке, то можно произвести обратное расшифрование. При расшифровании используются следующие преобразования: InvShiftRows, InvSubBytes,
InvMixColumns и AddRoundKey (рисунок 4а).
InvShiftRows – инверсия преобразования ShiftRows. Байты в последних трех строках состояния циклически сдвигаются вправо на различное число байт. Первая строка (r = 0) не сдвигается. Вторая строка (r = 1) сдвигается на 1 байт, третья строка (r = 2) – на 2 байта, четвертая строка (r = 3) – на 3 байта.
InvSubBytes – инверсия преобразования замены байта, в котором к каждому байту состояния применяется обратный S-блок.
InvMixColumns – инверсия преобразования MixColumns. InvMixColumns оперирует состоянием столбец за столбцом, обрабатывая каждый столбец как 4-элементный полином, как описано в ранее. Столбцы рассматривают как полиномы над GF(28) и умножаются по модулю x4 + 1 на фиксированный полином a–1(x)
a–1(x) = {0b}x3 + {0d}x2 + {09}x + {0e}.
Это может быть представлено в матричном виде:
s0cs1cs2cs3c
|
0e |
0b 0d |
09 s0c |
|
|
|
||
|
|
09 |
0e 0b 0d |
s |
|
, |
0 c 3. |
|
|
|
0d |
09 0e |
0b |
1c |
|
||
|
|
s2c |
|
|
|
|||
|
|
0b |
0d 09 0e |
|
|
|
|
|
|
|
s3c |
|
|
|
В результате на выходе получаются следующие байты: s'0c = ({0e} • s0c) ({0b} • s1c) ({0d} • s2c) ({09} • s3c), s'1c = ({09} • s0c) ({0e} • s1c) ({0b} • s2c) ({0d} • s3c), s'2c = ({0d} • s0c) ({09} • s1c) ({0e} • s2c) ({0b} • s3c),
207
s'3c = ({0b} • s0c) ({0d} • s1c) ({09} • s2c) ({0e} • s3c).
Преобразование AddRoundKey является собственной инверсией, т.к. использует только операцию XOR.
В функции обратного расшифрования (рисунок 4а) последовательность преобразований отличается от последовательности преобразований при зашифровании, в то время как форма расширенных ключей для зашифрования и расшифрования остается той же самом. Однако, несколько свойств алгоритма AES позволяют функции расшифрования иметь ту же самую последовательность преобразований как и при зашифровании (с преобразованиями, замененными их инверсиями) (рисунок 2.37б). Это достигается при внесении изменений в расширенный ключ.
|
Входной блок |
|
Входной блок |
||
|
|
|
|
|
|
|
|
|
|
|
|
|
AddRoundKey |
|
AddRoundKey |
||
round |
|
|
round |
|
|
= 1 .. 9 |
|
= 1 .. 9 |
|
InvShiftRows |
InvSubBytes |
InvSubBytes |
InvShiftRows |
AddRoundKey |
InvMixColumns |
InvMixColumns |
AddRoundKey |
InvShiftRows |
InvSubBytes |
InvSubBytes |
InvShiftRows |
AddRoundKey |
AddRoundKey |
Выходной блок |
|
Выходной блок |
а) |
|
б) |
Рис. 2.37. Схемы функций обратного (а) и прямого (б) расшифрования
Существует два свойства, которые делают возможным использование функции прямого расшифрования:
1.Преобразования SubBytes и ShiftRows можно переставлять местами, т.е. можно сначала применить преобразование SubBytes, а затем ShiftRows, и наоборот – сначала ShiftRows, а затем SubBytes. То же самое верно и для их инверсий InvSubBytes и InvShiftRows.
2.Операции смешивания столбцов MixColumns и InvMixColumns являются линейными относительно входных данных, т.е.
InvMixColumns(State XOR Round Key) =
= InvMixColumns(State) XOR InvMixColumns(Round Key).
Эти свойства позволяют изменить порядок преобразований InvSubBytes и InvShiftRows. Порядок преобразований AddRoundKey и InvMixColumns также может быть полностью
208
изменен, при условии, что предварительно, используя преобразование InvMixColumns, будут изменены столбцы (слова) развернутого ключа расшифрования.
Режим обратной связи по шифртексту (CFB)
Врежиме обратной связи по шифртексту (CFB) выходные блоки зашифрованного текста за счет обратной связи становятся входными блоками для последующего шифрования. Чтобы получить зашифрованный текст, открытый текст складывается, с помощью операции XOR, со сгенерированными выходными блоками. В качестве начального входного блока в режиме CFB используется значение вектора инициализации IV. Значение IV может быть открытым, но при этом должно быть непредсказуемым.
Врежиме CFB используется целочисленный параметр s, 1 ≤ s ≤ b, где b – размер блока (в байтах) открытого и зашифрованного текстов. Значение s иногда включается в название режима, например, 1-битовый режим CFB, 8-битовый режим CFB, 64-битовый режим CFB, или 128-битовый режим CFB.
При зашифровании в режиме CFB первым входным блоком является значение IV (рисунок 2.38). Чтобы произвести первый входной блок к значению IV применяется операция шифрования. Первая доля зашифрованного текста производится операцией XOR между первой долей открытого текста и s старшими битами первого выходного блока. Оставшиеся (b–s) бит первого выходного блока отбрасываются. Затем (b–s) младших бита значения IV соединяются операцией конкатенации с s битами первой доли зашифрованного текста, для формирования второго входного блока. Другими словами для формирования второго входного блока биты первого входного блока циклически сдвигаются на s позиции влево, и затем доля зашифрованного текста заменяет s младших бит.
209
|
IV |
|
зашифрование |
Входной блок |
|
Шифрование |
||
|
||
|
Выходной блок |
|
|
Открытый |
|
|
текст 1 |
|
|
Шифртекст 1 |
|
|
IV |
|
расшифрование |
Входной блок |
|
Шифрование |
||
|
||
|
Выходной блок |
|
|
Шифр- |
|
|
текст 1 |
|
|
Открытый текст |
Входной блок |
Входной блок |
Шифрование |
Шифрование |
Выходной блок |
Выходной блок |
Открытый |
Открытый |
текст 2 |
текст n |
Шифртекст 2 |
Шифртекст n |
Входной блок |
Входной блок |
Шифрование |
Шифрование |
Выходной блок |
Выходной блок |
Шифр- |
Шифр- |
текст 2 |
текст n |
Открытый текст |
Открытый текст |
Рис. 2.38. Режим CFB
Процесс повторяется до тех пор, пока от каждой доли открытого текста не будет получена доля зашифрованного текста. Чтобы сформировать долю зашифрованного текста s старших бит каждого выходного блока складываются, с помощью операции XOR, с соответствующей долей открытого текста. Каждая доля зашифрованного текста (кроме последней) подается назад, как описано выше, чтобы сформировать новый входной блок. Обратная связь может быть описана в терминах отдельных бит следующим образом: если i1i2…ib – j-й входной блок, а c1c2…cs – j-ая доля зашифрованного текста, то (j+1)-й входной блок: i1i2…ibc1c2…cs.
При расшифровании в режиме CFB значение IV является первым входным блоком. Каждый последующий входной блок формируется как при CFB зашифровании, соединяя операцией конкатенации (b–s) младших бит предыдущего входного блока с s старшими битами предыдущего зашифрованного текста. Чтобы произвести выходные блоки к каждому входному блоку применяется функция шифрования. Чтобы получить доли открытого текста
210