- •А.М. ГОЛИКОВ
 - •Учебное пособие:
 - •Томск 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-Р отличается от цикла порядком использования 32-битовых элементов ключа. В цикле 32-Р этот порядок следующий: K0, …, K7, K7, …, K0, K7, …, K0, K7, …, K0.
Ниже приведено описание двух поточных режимов работы криптографического алгоритма ГОСТ 28147-89, а именно: гаммирование и гаммирование с обратной связью.
Гаммирование
Криптосхема, реализующая алгоритм зашифрования в режиме гаммирования, имеет вид,
указанный на рисунке 2.32а.  | 
	
  | 
	
  | 
	
  | 
	
  | 
	
  | 
	
  | 
	
  | 
	
  | 
	
  | 
	
  | 
	
  | 
	
  | 
	
  | 
||||||||||
  | 
	
  | 
	
  | 
	
  | 
	
  | 
	
  | 
	
  | 
	
  | 
	
  | 
	
  | 
	
  | 
	
  | 
	
  | 
	
  | 
	
  | 
	
  | 
	
  | 
	
  | 
	
  | 
	
  | 
	
  | 
	
  | 
	
  | 
|
  | 
	
  | 
	
  | 
	N = S  | 
	
  | 
	
  | 
	
  | 
	
  | 
	
  | 
	N = S  | 
	
  | 
	
  | 
||||||||||||
  | 
	
  | 
	
  | 
	
  | 
	
  | 
	
  | 
	
  | 
	
  | 
	
  | 
	
  | 
	
  | 
	
  | 
	
  | 
	
  | 
	
  | 
	
  | 
	
  | 
	
  | 
	
  | 
	
  | 
	
  | 
	
  | 
	
  | 
	
  | 
  | 
	
  | 
	
  | 
	
  | 
	
  | 
	
  | 
	
  | 
	
  | 
	
  | 
	
  | 
	
  | 
	
  | 
	
  | 
	
  | 
	
  | 
	
  | 
	
  | 
	
  | 
	
  | 
	
  | 
	
  | 
	
  | 
	
  | 
	
  | 
  | 
	
  | 
	
  | 
	
  | 
	
  | 
	
  | 
	
  | 
	
  | 
	
  | 
	
  | 
	
  | 
	
  | 
	
  | 
	
  | 
	
  | 
	
  | 
	
  | 
	
  | 
	
  | 
	
  | 
	
  | 
	
  | 
	
  | 
	
  | 
  | 
	
  | 
	
  | 
	N = Цикл 32-З(N )  | 
	
  | 
	
  | 
	
  | 
	
  | 
	
  | 
	N = Цикл 32-З(N )  | 
	
  | 
	
  | 
||||||||||||
  | 
	
  | 
	
  | 
	
  | 
	
  | 
	
  | 
	
  | 
	
  | 
	
  | 
	
  | 
	
  | 
	
  | 
	
  | 
	
  | 
	
  | 
	
  | 
	
  | 
	
  | 
	
  | 
	
  | 
	
  | 
	
  | 
	
  | 
	
  | 
i = 1, …, m  | 
	
  | 
	
  | 
	i = 1, …, m  | 
	
  | 
|||||||||||||||||||
  | 
	
  | 
	
  | 
	
  | 
	
  | 
	
  | 
	
  | 
	
  | 
	
  | 
	
  | 
	
  | 
	
  | 
	
  | 
	
  | 
	
  | 
	
  | 
	
  | 
	
  | 
	
  | 
	
  | 
	
  | 
	
  | 
	
  | 
	
  | 
  | 
	
  | 
	
  | 
	
  | 
	
  | 
	
  | 
	
  | 
	
  | 
	
  | 
	
  | 
	
  | 
	
  | 
	
  | 
	
  | 
	
  | 
	
  | 
	
  | 
	
  | 
	
  | 
	
  | 
	
  | 
	
  | 
	
  | 
|
  | 
	
  | 
	
  | 
	N1=(N1+C2)mod 232  | 
	
  | 
	N1=(N1+C2)mod 232  | 
||||||||||||||||||
  | 
	
  | 
	
  | 
	N2=(N2+C1)mod(232–1)  | 
	
  | 
	
  | 
	
  | 
	
  | 
	N2=(N2+C1)mod(232–1)  | 
	
  | 
||||||||||||||
  | 
	
  | 
	
  | 
	
  | 
	
  | 
	
  | 
	
  | 
	
  | 
	
  | 
	
  | 
	
  | 
	
  | 
	
  | 
	
  | 
	
  | 
	
  | 
	
  | 
	
  | 
	
  | 
	
  | 
	
  | 
	
  | 
	
  | 
|
  | 
	
  | 
	
  | 
	
  | 
	
  | 
	
  | 
	
  | 
	
  | 
	
  | 
	
  | 
	
  | 
	
  | 
	
  | 
	
  | 
	
  | 
	
  | 
	
  | 
	
  | 
	
  | 
	
  | 
	
  | 
	
  | 
	
  | 
	
  | 
  | 
	
  | 
	
  | 
	N = Цикл 32-З(N )  | 
	
  | 
	
  | 
	
  | 
	
  | 
	
  | 
	N = Цикл 32-З(N )  | 
	
  | 
|||||||||||||
  | 
	
  | 
	
  | 
	
  | 
	
  | 
	
  | 
	
  | 
	
  | 
	
  | 
	
  | 
	
  | 
	
  | 
	
  | 
	
  | 
	
  | 
	
  | 
	
  | 
	
  | 
	
  | 
	
  | 
	
  | 
	
  | 
	
  | 
	
  | 
  | 
	
  | 
	
  | 
	
  | 
	
  | 
	
  | 
	
  | 
	
  | 
	
  | 
	
  | 
	
  | 
	
  | 
	
  | 
	
  | 
	
  | 
	
  | 
	
  | 
	
  | 
	
  | 
	
  | 
	
  | 
	
  | 
	
  | 
|
  | 
	
  | 
	
  | 
	
  | 
	
  | 
	
  | 
	
  | 
	
  | 
	
  | 
	
  | 
	
  | 
	
  | 
	
  | 
	
  | 
	
  | 
	
  | 
	
  | 
	
  | 
	
  | 
	
  | 
	
  | 
	
  | 
	
  | 
	
  | 
  | 
	
  | 
	
  | 
	
  | 
	
  | 
	
  | 
	
  | 
	
  | 
	
  | 
	Тоi  | 
	
  | 
	
  | 
	
  | 
	
  | 
	
  | 
	
  | 
	
  | 
	
  | 
	
  | 
	
  | 
	Тшi  | 
|||
  | 
	
  | 
	
  | 
	
  | 
	
  | 
	
  | 
	
  | 
	
  | 
	
  | 
	
  | 
	
  | 
|||||||||||||
  | 
	
  | 
	
  | 
	
  | 
	
  | 
	
  | 
	
  | 
	
  | 
	
  | 
	
  | 
	
  | 
	
  | 
	
  | 
	
  | 
||||||||||
  | 
	
  | 
	
  | 
	
  | 
	
  | 
	
  | 
	
  | 
	
  | 
	
  | 
	
  | 
	
  | 
	
  | 
	
  | 
	
  | 
	
  | 
	
  | 
	
  | 
	
  | 
	
  | 
	
  | 
	
  | 
	
  | 
||
  | 
	
  | 
	
  | 
	
  | 
	
  | 
	
  | 
	
  | 
	
  | 
	
  | 
	
  | 
	
  | 
	
  | 
	
  | 
	
  | 
	
  | 
	
  | 
	
  | 
	
  | 
	
  | 
|||||
  | 
	
  | 
	
  | 
	
  | 
	
  | 
	
  | 
	
  | 
	
  | 
	
  | 
	
  | 
	
  | 
	
  | 
	
  | 
	
  | 
	
  | 
	
  | 
	
  | 
	
  | 
	
  | 
|||||
  | 
	
  | 
	
  | 
	
  | 
	
  | 
	
  | 
	
  | 
	
  | 
	
  | 
	
  | 
	
  | 
	
  | 
	
  | 
	
  | 
	
  | 
	
  | 
	
  | 
	
  | 
||||||
  | 
	
  | 
	
  | 
	
  | 
	Тшi  | 
	
  | 
	
  | 
	
  | 
	
  | 
	
  | 
	
  | 
	Тоi  | 
	
  | 
|||||||||||
  | 
	
  | 
	
  | 
	
  | 
	
  | 
	
  | 
	
  | 
	
  | 
	
  | 
	
  | 
	
  | 
	
  | 
	
  | 
	
  | 
	
  | 
	
  | 
	
  | 
	
  | 
	
  | 
	
  | 
||||
  | 
	
  | 
	
  | 
	
  | 
	
  | 
	а)  | 
	
  | 
	
  | 
	
  | 
	
  | 
	
  | 
	б)  | 
||||||||||||
Рис. 2.32. Схема алгоритма зашифрования (а) и расшифрования (б) в режиме гаммирования
Открытые данные, разбитые на 64-разрядные блоки Тоi, зашифровываются в режиме гаммирования путем поразрядного суммирования по модулю 2 с гаммой шифра Гш, которая вырабатывается блоками по 64 бита Гшi, i = 1, …, m. m определяется объемом шифруемых данных. Число двоичных разрядов в блоке Тоm может быть меньше 64, при этом неиспользованная для зашифрования часть гаммы шифра из блока Гшm отбрасывается.
Для инициализации процесса генерации гаммы используется 64-разрядная двоичная последовательность (синхропосылка) S. К синхропосылке применяется цикл зашифрования 32-З. Результат шифрования N разбивается на две части: старшую (N2) и младшую (N1). Значение N2 суммируется по модулю (232 – 1) с 32-разрядной константой C1 = 0101010416. Значение N1 суммируется по модулю 232 с 32-разрядной константой C2 = 0101010116. К полученному значению N применяется цикл зашифрования 32-З. Полученное в результате зашифрования значение N образует первый 64-разрядный блок гаммы шифра Гш1, который суммируется поразрядно по модулю 2 с первым 64-разрядным блоком открытых данных То1. В результате суммирования получается 64-разрядный блок зашифрованных данных Тш1. Для
201
получения следующего 64-разрядного блока гаммы шифра Гш2 старшая часть N2 значения N суммируется по модулю (232 – 1) с константой C1, а младшая часть N1 суммируется по модулю 232 с константой C2. К полученному значению применяется цикл зашифрования 32-З. Полученное в результате зашифрования значение N образует второй 64-разрядный блок гаммы шифра Гш2, который суммируется поразрядно по модулю 2 со вторым блоком открытых данных То2. Аналогично вырабатываются блоки гаммы шифра Гш3, Гш4, …, Гшm и зашифровываются блоки открытых данных То3, То4, …, Тоm. Если длина последнего m-го блока открытых данных Тоm меньше 64 бит, то из последнего m-го блока гаммы шифра Гшm для зашифрования используется только соответствующее число разрядов гаммы шифра, остальные разряды отбрасываются.
Аналогичным образом производится расшифрование в режиме гаммирования (рисунок 2.32б).
Гаммирование с обратной связью
Криптосхема, реализующая алгоритм зашифрования в режиме гаммирования с обратной связью, имеет вид, указанный на рисунке 3а.
Открытые данные, разбитые на 64-разрядные блоки Тоi, зашифровываются в режиме гаммирования с обратной связью путем поразрядного суммирования по модулю 2 с гаммой шифра Гш, которая вырабатывается блоками по 64 бита Гшi, i = 1, …, m. m определяется объемом шифруемых данных. Число двоичных разрядов в блоке Тоm может быть меньше 64.
N = S  | 
	N = S  | 
i = 1, …, m  | 
	i = 1, …, m  | 
N = Цикл 32-З(N )  | 
	N = Цикл 32-З(N )  | 
Тоi  | 
	Тшi  | 
N = Тшi  | 
	N = Тоi  | 
а)  | 
	б)  | 
Рис. 2.33. Схема алгоритма зашифрования (а) и расшифрования (б) в режиме гаммирования с обратной связью
Исходное значение – синхропосылка S зашифровывается с помощью цикла зашифрования 32-З. Полученное в результате зашифрования значение N образует первый 64разрядный блок гаммы шифра Гш1, который суммируется поразрядно по модулю 2 с первым 64-разрядным блоком открытых данных То1. В результате получается 64-разрядный блок зашифрованных данных Тш1.
202
