- •Криптографическая защита информации
- •Оглавление
- •Раздел 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.2. Ключевые функции хэширования
В криптографических приложениях к ключевым функциям хэширования предъявляются следующие основные требования:
– невозможность фабрикации;
– невозможность модификации.
Первое требование означает высокую сложность подбора сообщения с правильным значением свертки. Второе – высокую сложность подбора для заданного сообщения с известным значением свертки другого сообщения с правильным значением свертки.
Иногда эти свойства объединяют в одно более сильное свойство – свойство вычислительной устойчивости. Это требование означает высокую сложность подбора для заданного множества сообщений {х1,..,хt} (быть может, пустого) с известными значениями сверток еще одного сообщения х, х хi, i=1,...,t, с правильным значением свертки (возможен случай h(x) = h(хi), i{1,...,t}).
Заметим, что здесь и всюду ниже слова "высокая сложность" означают такую вычислительную сложность задачи, при которой ее решение с использованием вычислительной техники за реальное время невозможно.
Ключевые функции применяются в ситуациях, когда стороны доверяют друг другу и могут иметь общий секретный ключ. Обычно в этих условиях не требуется, чтобы система обеспечивала защиту в случае отказа получателя от факта получения сообщения или его подмены. Поэтому от ключевых хэш-функций не требуется устойчивости к коллизиям.
Обычные атаки на ключевые хэш-функции заключаются в имитации, то есть в передаче сфабрикованных сообщений в пустом канале, а также в подмене передаваемых сообщений с целью навязывания приемной стороне ложных сообщений.
Заметим, что из свойства вычислительной устойчивости вытекает невозможность определения ключа, используемого хэш-функцией, так как знание ключа дает возможность вычислять значение свертки для любого набора данных. В то же время обратное утверждение неверно, так как подбор значения функции хэширования возможен в некоторых случаях без предварительного определения ключа.
В качестве примера рассмотрим широко распространенную хэш-функцию, построенную на основе одношаговой сжимающей функции вида
fk(x,Н)=Еk(хН),
где Ek — алгоритм блочного шифрования.
Для вычисления значения h(M) сообщение М представляется в виде последовательности n-битовых блоков М1,М2,..,МN. Если при этом длина сообщения не кратна длине блока, то последний блок неким специальным образом дополняется до полного блока. Алгоритм вычисления свертки имеет следующий вид:
Н0 = 0, Нi = Еk (Мi Hi-1), i=1,...,N, h(M)=HN. (7.2)
Данный алгоритм фактически совпадает с режимом шифрования со сцеплением блоков (см. 6), с той лишь разницей, что в качестве результата берется не весь шифртекст Н1,Н2,..,НN, а только его последний блок. Такой режим в ГОСТе 28147-89 называется режимом выработки имитовставки.
Еще одной основой для построения ключевых хэш-функций могут служить бесключевые хэш-функции. При этом для вычисления значения свертки ключ приписывается к исходному сообщению.
Заметим, что если ключ просто дописывать в начало или в конец исходного сообщения, то это может приводить к потенциальным слабостям, позволяющим в некоторых случаях осуществлять модификацию сообщений.
Пусть, например, ключ k добавляется к началу сообщения согласно формуле hk(х) = h(k,x). Если функция h построена на основе одношаговой сжимающей функции по формуле (7.1), то по известным значениям М и H=h(k,M) можно вычислять значения этой функции для любых сообщений вида ( М, М') с дописанным произвольным окончанием М'. Это объясняется итеративностью процедуры вычисления функции, в силу которой для нахождения значения H'=h(k,M,M') не требуется знание ключа k, достаточно воспользоваться уже вычисленным "промежуточным" значением H. Поэтому такая функция не устойчива к модификации.
В случае когда ключ добавляется в конец сообщения согласно формуле H =hk (M)=h(M,k), знание коллизии для функции h, то есть пары х1,х2, х1х2, такой, что h(х1) = h(х2), позволяет вычислять значения h(х1,k) =h(х2,k) для любого ключа k. Поэтому трудоемкость модификации сообщения М= х1 оценивается не величиной 0(2n), а сравнима с трудоемкостью поиска коллизии, оцениваемой "величиной 0(2п/2}, так как в данном случае применима атака, основанная на парадоксе "дней рождений".
В связи с этим более предпочтительными являются способы введения ключа, при которых ключ вставляется в сообщение не один, а, по крайней мере, два раза. Можно указать два таких способа:
H=h(k,y,M,k),
H=h(k, y1,h(k, y2,M)),
где y, y1, у2 – дополнения ключа k до размера, кратного длине блока п. Для определенных бесключевых хэш-функций h такой подход позволяет строить эффективно вычислимые и устойчивые к атакам ключевые хэш-функции. Недостатком такого метода является слишком большая длина п свертки. Для целей проверки целостности обычно выбирают длину свертки п в пределах 32-64, а для аутентификации необходимо условие п > 128.
В заключение отметим, что существуют ключевые хэш-функции, не использующие какую-либо основу типа блочного шифрования или вычисления бесключевой хэш-функции, а разработанные независимо с учетом эффективной реализации на современных ЭВМ. Примером служит ключевая хэш-функция, используемая в алгоритме МАА (Message Authenticator Algorithm), утвержденном стандартом ISO 8731-2.