- •А.М. ГОЛИКОВ
- •Учебное пособие:
- •Томск 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
- •Ход работы
Первая TMDTO атака, предложенная Хеллманом в, применялась к блочным шифрам. TMDTO атака для поточных шифров была предложена Баббаджем в и Голичем в. Рассмотрим эту атаку подробнее. Предполагается, что поточный шифр имеет ключ размером k бит и внутреннее состояние размером s бит.
TMDTO атака состоит из двух частей: этап предвычисления и рабочий (on-line) режим. На шаге предвычисления формируется таблица, состоящая 2m различных внутренних состояний и соответствующих им ключевых потока. Таким образом таблица должна содержать M = 2m строк и, для удобства, отсортирована по второму компоненту, т.е. ключевому потоку.
На on-line этапе по очереди перебираются D = 2d различных ключевых потока, каждый из которых сравнивается с табличными значениями. Если соответствие найдено, то значит найдено и внутреннее состояние поточного шифра.
Требуемый объем памяти M для TMDTO атаки равен M = N/D, где N = 2s – количество возможных внутренних состояний. В соответствии с парадоксом “дней рождения” есть хороший шанс определить исходное внутреннее состояние поточного шифра. В случае m = d = s/2, если размер внутреннего состояния s меньше, чем двойной размер ключа 2k, то сложность TMDTO атаки будет ниже, чем у атаки исчерпывающим поиском. Следовательно, для увеличения уровня безопасности шифра, необходимо увеличить его внутреннее состояние по крайней мере до удвоенного размера ключа.
6. Корреляционная атака
Корреляционные атаки – это один из самых важных классов атак на поточные шифры, основанные на LFSR. Впервые корреляционная атака была предложена Сиджентайлером в 1985 году. В основе корреляционной атаки лежит следующий принцип. Допустим , что криптоаналитик может найти корреляцию между выходом одного из LFSR генератора и ключевым потоком. Тогда криптоаналитик может организовать атаку типа разделяй-и- властвуй и попробовать определить начальное состояние всех LFSR один за другим.
Предположим, что мы наблюдаем последовательность ключевого потока z, длиной N, z = z1, z2, ..., zN. Ключевая последовательность производится генератором, состоящим из n различных LFSR. Пусть между ключевым потоком и выходной последовательностью одного из LFSR, называемого целевым LFSR, можно определить корреляцию. Также предположим, что известен полином обратных связей g(x) целевого LFSR. Предположим, что рассматриваемый LFSR имеет длину l и корреляция между последовательностью ключевого потока и выходной последовательностью LFSR равна (1–p), где p < 0,5.
220
Для двоичного LFSR длины l существует 2l возможных начальных состояний. Для каждого такого состояния u0 = (u1, u2, ..., ul) генерируется выходная последовательность u = (u1, u2, ..., uN).
Определим
= N – dH(u, z),
где dH(u, z) – расстояние Хэмминга между u и z, т.е. число позиций, по которым отличаются u и z.
Если перебираются все 2l возможных начальных состояния, то при большом значении N,будет иметь с высокой вероятностью наибольшее значение, когда u0 будет соответствовать правильному начальному состоянию.
Если корреляция может быть найдена для каждого LFSR генератора, то вычислительная
сложность восстановления ключа уменьшается с n 2l j 1 , что соответствует полному
j 1
перебору {исчерпывающему поиску}, до n 2l j 1 , где lj – длина j-го LFSR.
j 1
Некоторые комбинирующие или фильтрующие функции более восприимчивы к корреляционной атаке, чем другие, поэтому была введена идея функции, имеющей корреляционный иммунитет m-го порядка [38_Siegenthaler_imm]. Считается, что функция имеет корреляционный иммунитет m-го порядка, если в корреляционной атаке необходимо одновременно рассматривать не менее (m+1) внутренних последовательностей.
Быстрая корреляционная атака
Впервые быстрая корреляционная атака была предложена Мейером и Стафельбахером в 1988 году.
Быстрые корреляционные атаки применяются к генераторам ключевого потока, основанных на LFSR, в том же самом контексте, что и просто корреляционные атаки, только они значительно быстрее. Быстрые корреляционные атаки основываются на том же самом принципе, что и корреляционные атаки: они используют корреляцию между ключевым потоком и выходом отдельного (целевого) LFSR, начальное состояние которого зависит от битов секретного ключа. В оригинальной корреляционной атаке начальное состояние целевого LFSR восстанавливалось с помощью полного перебора {исчерпывающего поиска}. Быстрые корреляционные атаки уходяят от перебора всех возможных начальных состояний целевого LFSR путем использования некоторых эффективных методик с исправлением
221
ошибок. Но при этом они требуют знания более длинной последовательности ключевого потока.
В Мэйер и Сафельбахер представили два алгоритма для быстрых корреляционных атак. Вместо полного перебора {исчерпывающего поиска}, используемого в корреляционной атаке, данные алгоритмы основаны на использовании уравнений проверки четности, созданных из полинома обратных связей LFSR. Алгоритмы состоят из двух частей. Вначале определяется набор уравнений проверки четности. Затем эти уравнения используются в алгоритме быстрого декодирования для восстановления начального состояния LFSR.
Уравнения проверки четности создаются в два этапа. Обозначим g(x) = 1 + c1x + c2x2 + … + clxl – полином обратных связей, t – число отводов LFSR, т.е. количество ненулевых коэффициентов полинома g(x) равно (t+1). Тогда i-й символ ui выходной последовательности LFSR u может быть записан как ui = c1ui–1 + c2ui–2 + … + clui–l. Так как вес полинома g(x) равен (t+1), то мы получаем (t+1) различных уравнения проверки четности для ui. Затем, используя тот факт, что g(x)j = g(xj), для j = 2k, уравнения проверки четности генерируются многократным возведением полинома g(x) в квадрат. Общее количество m уравнений проверки четности, которое может быть найдено на двух этих этапах равно
m t 1 log2 |
|
N |
|
|
|
. |
|
|
|||
|
|
2l |
Уравнения проверки четности могут быть записаны в виде ui + b1 = 0
ui + b2 = 0
...
ui + bm = 0,
где bj – сумма t различных символов в последовательности u.
Если мы заменим символы ui последовательности u на символы zi наблюдаемого ключевого потока, то получим следующие выражения
zi + y1 = L1 zi + y2 = L2
...
zi + ym = Lm,
где yi – сумма t различных символов ключевого потока z, Li F2, 1 i m.
Во второй части алгоритма, m уравнений проверки четности для каждого ui, 1 i N, используются в алгоритме декодирования.
Если вероятность P(zi = ui) = (1 – p) = 1/2 + , то вероятность s = P(yj = bj) может быть вычислена как
222