
- •Криптографическая защита информации
- •Оглавление
- •Раздел 1. Общие подходы к криптографической защите информации
- •Тема 1. Теоретические основы криптографии
- •1.1. Криптография
- •1.2. Управление секретными ключами
- •1.3. Инфраструктура открытых ключей.
- •1.4. Формальные модели шифров
- •1.5. Модели открытых текстов
- •Тема 2. Простейшие и исторические шифры и их анализ
- •Тема 3. Математические основы криптографии
- •3.1. Элементы алгебры и теории чисел
- •3.1.1. Модулярная арифметика. Основные определения.
- •3.1.2. Алгоритм Евклида нахождения наибольшего общего делителя
- •3.1.3. Взаимно простые числа
- •3.1.4. Наименьшее общее кратное
- •3.1.5. Простые числа
- •3.1.6. Сравнения
- •3.1.7. Классы вычетов
- •3.1.8. Функция Эйлера
- •3.1.9. Сравнения первой степени
- •3.1.10. Система сравнений первой степени
- •3.1.11. Первообразные корни
- •3.1.12. Индексы по модулям рk и 2рk
- •3.1.13. Символ Лежандра
- •3.1.14. Квадратичный закон взаимности
- •3.1.15. Символ Якоби
- •3.1.16. Цепные дроби
- •3.1.17. Подходящие дроби
- •3.1.18. Подходящие дроби в качестве наилучших приближений
- •3.2. Группы
- •3.2.1. Понятие группы
- •3.2.2. Подгруппы групп
- •3.2.3. Циклические группы
- •3.2.4. Гомоморфизмы групп
- •3.2.5. Группы подстановок
- •3.2.6. Действие группы на множестве
- •3.3. Кольца и поля
- •3.3.1. Определения
- •3.3.2. Подкольца
- •3.3.3. Гомоморфизмы колец
- •3.3.4. Евклидовы кольца
- •3.3.5. Простые и максимальные идеалы
- •3.3.6. Конечные расширения полей
- •3.3.7. Поле разложения
- •3.3.8. Конечные поля
- •3.3.9. Порядки неприводимых многочленов
- •3.3.10. Линейные рекуррентные последовательности
- •3.3.11. Последовательности максимального периода
- •3.3.12. Задания
- •Тема 4. Классификация шифров
- •4.1. Классификация шифров по типу преобразования
- •4.2. Классификация шифров замены
- •4.3 Шифры перестановки
- •4.3.1. Маршрутные перестановки
- •4.3.2. Элементы криптоанализа шифров перестановки
- •4.4. Шифры замены
- •4.4.1. Поточные шифры простой замены
- •4.4.2. Криптоанализ поточного шифра простой замены
- •4.4.3. Блочные шифры простой замены
- •4.4.4. Многоалфавитные шифры замены
- •4.4.5. Дисковые многоалфавитные шифры замены
- •4.5. Шифры гаммирования
- •4.5.1. Табличное гаммирование
- •4.5.2. О возможности восстановления вероятностей знаков гаммы
- •4.5.3. Восстановление текстов, зашифрованных неравновероятной гаммой
- •5.5.4. Повторное использование гаммы
- •4.5.5. Криптоанализ шифра Виженера
- •Тема 5. Поточные шифры
- •5.1. Принципы построения поточных шифрсистем
- •Примеры поточных шифрсистем
- •5.3. Линейные регистры сдвига
- •5.4. Алгоритм Берлекемпа-Месси
- •5.5. Усложнение линейных рекуррентных последовательностей
- •5.6. Методы анализа поточных шифров
- •6. Блочные шифры
- •6.1. Принципы построения блочных шифров
- •6.2. Примеры блочных шифров
- •6.3. Режимы использования блочных шифров
- •6.4. Комбинирование алгоритмов блочного шифрования
- •6.5. Методы анализа алгоритмов блочного шифрования
- •6.6. Рекомендации по использованию алгоритмов блочного шифрования
- •7. Криптографические хэш-функции
- •7.1. Функции хэширования и целостность данных
- •7.2. Ключевые функции хэширования
- •7.3. Бесключевые функции хэширования
- •7.4. Целостность данных и аутентификация сообщений
- •7.5. Возможные атаки на функции хэширования
- •Тема 8. Криптосистемы с открытым ключом
- •8.1. Шифрсистема rsa
- •8.2. Шифрсистема Эль-Гамаля
- •8.3. Шифрсистема Мак-Элиса
- •8.4. Шифрсистемы на основе "проблемы рюкзака"
7.3. Бесключевые функции хэширования
Обычно требуется, чтобы бесключевые хэш-функции обладали следующими свойствами:
1) однонаправленность,
2) устойчивость к коллизиям,
3) устойчивость к нахождению второго прообраза,
означающими соответственно высокую сложность нахождения сообщения с заданным значением свертки; пары сообщений с одинаковыми значениями свертки; второго сообщения с тем же значением свертки для заданного сообщения с известным значением свертки.
Например, хэш-функция CRC-32, представляющая собой контрольную сумму, является линейным отображением и поэтому не удовлетворяет ни одному из этих трех свойств.
Использование в качестве бесключевой хэш-функции рассмотренной выше функции (2), построенной на основе алгоритма блочного шифрования в режиме выработки имитовставки, также нецелесообразно, так как обратимость блочного шифрования позволяет подбирать входное сообщение для любого значения свертки при фиксированном и общеизвестном ключе.
Для построения примера хэш-функции, удовлетворяющей свойству 1), рассмотрим функцию, заданную формулой gk(х)=Еk(х)x, где Еk - алгоритм блочного шифрования. Такая функция является однонаправленной по обоим аргументам. Поэтому на ее основе можно построить хэш-функцию по правилу (7.1), определив одношаговую сжимающую функцию одной из следующих формул:
f(х,H)=ЕH(х)x
или
f(х,H)=Еx(H)H.
Первая из этих функций лежит в основе российского стандарта хэш-функции, а вторая – в основе американского стандарта SHA.
Справедливо следующее
Утверждение 1. Если функция хэширования h построена на основе одношаговой сжимающей функции f по правилу (7.1), то из устойчивости к коллизиям функции f следует устойчивость к коллизиям функции h.
Укажем взаимозависимость между свойствами 1) и 2).
Утверждение 2. Если хэш-функция устойчива к коллизиям, то она устойчива к нахождению второго прообраза.
Утверждение 3. Устойчивая к коллизиям хэш-функция не обязана быть однонаправленной.
В качестве примера несжимающей функции приведем функцию h(x)=x, которая, очевидно, является устойчивой к коллизиям и к нахождению второго прообраза, но не является однонаправленной.
В качестве примера сжимающей хэш-функции рассмотрим функцию h, определенную условиями
h(x) = (1, х), если битовая длина х равна п,
h(x) = (0, g(x)), если битовая длина х больше п,
где g(x) – сжимающая п-битовая функция, устойчивая к коллизиям. Функция h также является устойчивой к коллизиям и к нахождению второго прообраза, но, очевидно, не является однонаправленной.
Утверждение 4. Пусть h': X —>Y – хэш-функция и |Х| > 2|Y|. Тогда если существует эффективный алгоритм обращения функции h, то существует вероятностный алгоритм нахождения коллизии функции h с вероятностью успеха, большей 1/2.
Заметим, что трудоемкость подбора прообраза для однонаправленной функции или трудоемкость поиска второго прообраза оцениваются величиной 0(2п). В то же время трудоемкость поиска коллизии оценивается величиной 0(2п/2), так как в данной ситуации применима атака, основанная на парадокce "дней рождений".
Рассмотрим конкретные примеры хэш-функций, построенных на основе некоторых алгоритмов преобразования блоков.
Пусть Ek – алгоритм блочного шифрования, п – размер блока, l – размер ключа и G – некоторое отображение, ставящее в соответствие вектору длины п вектор длины l. Рассмотрим следующие одношаговые сжимающие функции, построенные на основе алгоритма Ek:
а) f(х,H)=Ex (H)H (Дэвис-Мейер);
б) f(х,H)=EG(H) (x)x (Матиас-Мейер-Осеас);
в) f(х,H)=EG(H) (x)xН (Миагучи-Принель).
Значением любой из хэш-функции, построенных по правилу (7.1) из приведенных одношаговых сжимающих функций, является вектор длины п, равной размеру блока. В случае если эта величина оказывается недостаточной, ее можно увеличить, заменив одношаговую функцию f на функцию f' с удвоенной размерностью значений. Это можно сделать, например, путем двукратного применения функции f с последующим перемешиванием полублоков согласно формуле:
f '(х, Н1, Н2)= ( f (х, Н1), f (х, Н1)),
в которой переставляет произвольные полублоки а, b, с, d по правилу ((а,b),(с,d)) = (a,d,c,b). Такой подход, использующий схему (б), реализован в конструкции одношаговой функции MDC-2.
Другие примеры бесключевых хэш-функций дают известные алгоритмы MD-4, MD-5 и SHA. Они оперируют с блоками длины п, совпадающей с длиной результирующего значения свертки, причем п = 128 для алгоритма MD-4 и п= 160 для MD-5 и SHA. Указанные алгоритмы спроектированы специально с учетом эффективной реализации на 32-разрядных ЭВМ.
При их использовании исходное сообщение М разбивается на блоки длиной т= 512 бит. Последний блок формируется путем дописывания к концу сообщения комбинации 10...0 до получения блока размера 448 бит, к которому затем добавляется комбинация из 64 бит, представляющая битовую длину сообщения. Затем вычисляется значение свертки согласно процедуре (7.1) с использованием одношаговой сжимающей функции, заданной формулой f(x,H)= Ex (H)H , где х — блок сообщения длины т = 512 бит, Н— блок из п бит, a Ex — некоторое преобразование множества блоков. Значение начального вектора определяется в описании преобразования Ex.
В стандарте хэш-функций ГОСТ Р 34.11-94 приняты значения п = т = 512. Одношаговая сжимающая функция f(x,H), используемая для вычисления последовательности значений Нi = f(хi, Нi-1), построена на базе четырех параллельно работающих схем блочного шифрования (ГОСТ 28147-89), каждая из которых имеет 256-битовый ключ и оперирует с блоками размера 64 бита. Каждый из ключей вычисляется в соответствии с некоторой линейной функцией от блока исходного сообщения хi и значения Hi-1. Значение Нi является линейной функцией от результата шифрования, блока исходного сообщения хi и значения Нi-1. После вычисления значения HN для последовательности блоков М1,М2,..,МN применяют еще два шага вычисления согласно формуле
Н = h(М) = f(Z МN, f(L, НN )),
где Z - сумма по модулю два всех блоков сообщения, a L – длина сообщения.