- •А.М. ГОЛИКОВ
- •Учебное пособие:
- •Томск 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
- •Ход работы
Вычисление дискретных логарифмов (когда заданы a, y и n) примерно такая же труднорешаемая задача, как и разложение на множители.
Определение. Односторонняя функция f: X Y называется односторонней функцией с ловушкой, если f -1(у) можно вычислить за полиномиальное время, имея некоторую дополнительную информацию, т. е. существует функция g(у,t), вычислимая за полиномиальное время и такая, что g(y,t) = f -1(у) для некоторой ловушки t.
Эффективное вычисление обратной функции возможно, если известен "потайной ход" (секретное число, строка или другая информация, ассоциирующаяся с данной функцией). В качестве примера однонаправленной функции с "потайным ходом" можно привести использование функции Эйлера в криптосистеме RSA.
Криптосистема RSA
Алгоритм RSA стал первым полноценным алгоритмом с открытым ключом, который может работать как в режиме шифрования данных, так и в режиме электронной цифровой подписи. Основанная на этом алгоритме популяpная криптосистема RSA pазpаботана в 1977 году и получила название в честь ее создателей: Рональда Ривеста (в настоящее вpемя он возглавляет компанию RSA Data Security), Ади Шамира и Леонарда Эйдельмана.
В настоящее время RSA является наиболее распространенной криптосистемой с открытым ключом — стандартом де-факто для многих криптографических прложений. Статус де-факто послужил причиной включения криптосистемы RSA в принятые ранее криптографические стандарты, например в финансовые стандарты США и Франции, австралийский стандарт управления ключами и многие другие. Криптосистема RSA применяется в различных протоколах Internet. В криптографические стандарты, действующие на территории России, RSA не входит, что осложняет ее применение с точки зрения правовых норм. Тем не менее, выбор этой криптосистемы признается оправданным отечественными авторами [8].
Основные определения и теоремы
Надежность алгоритма основывается на трудновычислимых задачах факторизации (разложения на множители) больших чисел и вычисления дискретных логарифмов. Определения и теоремы из алгебры, использованные при создании данной криптосистемы рассмотрены в приложении. Приведем здесь только основные утверждения.
1. Криптографические системы являются стойкими, если определенные их параметры являются простыми числами. Число а называется простым, если оно не имеет целых
340
делителей, кроме единицы. Числа а и b называются взаимно простыми, если их наибольший общий делитель НОД(а, b)=1.
2. Функцией Эйлера φ(n) называется число положительных целых чисел меньших n и взаимно простых с n.
Вычисление функции Эйлера φ(n) для больших n в общем случае представляет собой трудоемкую процедуру перебора всех чисел меньших n и проверки для каждого взаимной простоты с n. Однако, эта функция обладает следующими свойствами:
φ(p) = p -тест, 1 p – простого числа.
φ(a, b) = φ(а) φ(b) для любых натуральных взаимно простых а и b,
которые позволяют легко вычислить значение функции Эйлера φ(n) с помощью трех арифметических действий, если известно разложение числа n на простые сомножители p и q:
φ(n)=(p-тест,1)(q-тест,1).
3. В RSA используется теорема, которая носит название китайской теоремы об остатках, так как этот результат был известен еще в древнем Китае, где теорема была предложена китайским математиком первого века Сун Це. Она утверждает, что любое неотрицательное целое число, не превосходящее произведения модулей, можно однозначно восстановить, если известны его вычеты по этим модулям, и названа так потому, что результатом приведения числа а по модулю n является остаток от деления а на n.
Фактически в RSA используется следствие из этой теоремы, утверждающее, что если известно разложение числа n на простые множители n=n1n2...nk, где все ni попарно взаимно просты, и результат приведения числа x по модулю ni i=1,…,k одинаков, то результатом приведения числа x по модулю n будет то же число. То есть x,a – целых чисел
x a mod n x a mod ni i=1,…,k.
4. Теорема Эйлера. Если n>1, то х Zn* (х взаимно простого с n), выполняется сравнение
xφ(n) 1 mod n.
Следствие. х < n и взаимно простого с n можно легко вычислить обратный элемент x-1 в кольце вычетов Zn из сравнения
x-1 xφ(n)-1 mod n.
Малая теорема Ферма. x GF(p), х 0, выполняется сравнение
хр-тест,1 1 mod p.
Малая теорема Ферма является следствием из теоремы Эйлера, хотя исторически она была доказана раньше, затем Эйлер её обобщил.
Следствие 1: Если p — простое число, то х, взаимно простого с p:
341
xp = х mod p.
Следствие 2: если НОД(е,φ(n))=1 (е - простое относительно φ(n) ) то d-целое, такое, что
ed = 1 mod n.
На этих математических фактах основан алгоритм RSA.
Алгоpитм RSA
В криптосистеме RSA сообщение m, криптограмма c, открытый ключ Kо, и секретный ключ Кс, принадлежат множеству целых чисел Zn={0, 1, 2,..., n-1}. Множество Zn с операциями сложения и умножения по модулю n образует кольцо.
Модуль n определяется как составное число равное произведению n=p·q двух больших простых чисел p·и q. Модуль n является открытым параметром алгоритма, а чисела p·и q — секретными параметрами. То есть множители p и q хранят в секрете, а их произведение n известно всем, кто пользуется данной криптосистемой. Здесь используется односторонняя функция с ловушкой. Зная секретные параметры алгоритма p и q можно легко вычислить функцию Эйлера (n) по формуле
(n)=(p-l)(q-1),
тогда как вычисление (n) только по большому числу n является трудновычислимой задачей.
Функция Эйлера используется в RSA при вычислении ключей. Открытый ключ Кo = е выбирают случайным образом из множества Z* (n) — чисел меньших (n) и взаимно простых с (n).
Иначе условие е Z* (n) раносильно выполнению двух условий 1<Kо (n), и НОД(Ко, (n))=1,
которым должено удовлетворять случайно выбранное число Кo = е, чтобы оно могло служить открытым ключом в RSA.
Секретный ключ Kc = d вычисляют так, чтобы выполнялось условие Kc · Ко = е · d 1 mod (n). (*)
То есть, секретный ключ d является обратным элементом к открытому ключу е в множестве Z (n): d = е -1 mod (n). Решение сравнения (*) можно найти с помощью расширенного алгоритма Евклида.
Заметим, что d и n также взаимно простые числа. Вычисление секретного ключа по открытому является трудновычислимой задачей, если неизвестны секретные параметры
342
алгоритма p и q, так как при этом трудно вычислить значение функции Эйлера, то есть модуля, по которому приводятся результаты операций при вычислении ключей.
При выполнении шифрования и дешифрования вычисления приводятся по модулю n. Открытый ключ Ко и модуль n сообщают всем, с кем предполагают обмениваться сообщениями и используют для шифрования данных, а секретный ключ Кс хранят в секрете на стороне получателя и используют для дешифрования.
Преобразование шифрования определяет криптограмму c через пару (открытый ключ Ко, сообщение m) в соответствии со следующей формулой:
с =ЕКо (m) = mКо mod n.
В качестве алгоритма быстрого вычисления значения c используют ряд последовательных возведений в квадрат целого m и умножений на m с приведением по модулю n.
Обращение функции с = mКо mod n, т.е. определение значения m по известным значениям с, Кo и n, является задачей дискретного логарифмирования и практически неосуществимо при
n 2512.
Однако задачу расшифрования криптограммы с, можно легко решить, используя секретный ключ Кc, по следующей формуле:
m = DKc (с) = сKc mod n.
Докажем, что в результате возведения криптограммы с в степень секретного ключа Кc получается исходный текст m. Процесс расшифрования можно записать так:
DKc(EKо(m)) = DKc(me) mod n= (me)d mod n= med mod n.
По условию выбора ключей |
|
e · d 1 mod (n) |
(*) |
мы можем написать, что k такое что, с учетом свойств (n) : e·d = k · (n) +1 = k (p-тест,1)(q-тест,1) +1.
Подставим это выражение в показатель степени:
med m (m (p-тест,1)) k (q-тест,1) = (m(q-тест,1))k (p-тест,1).
По малой теореме Ферма (хр-тест,1 1 mod p, p – простое): med mod p m (1) k (q-тест,1) mod p = m mod p. Аналогично, заменив p на q, получим:
med mod q m (1) k (p-тест,1) mod q = m mod q.
Далее, по следствию из китайской теоремы об остатках так как n=pq: med mod n = m mod n, ч.т.д.
Таким образом, если криптограмму с возвести в степень Кс: 343