
- •230100 «Информатика
- •Лекция 1. Основные понятия
- •1.1 Терминология
- •1.2 Стеганография
- •Лекция 2. Докомпьютерные шифры
- •2.1 Подстановочные и перестановочные шифры
- •1.4 Простое xor
- •1.5 Одноразовые блокноты
- •Лекция 3. Криптографические протоколы
- •1 Введение в протоколы
- •2.2 Передача информации с использованием симметричной криптографии
- •2.3 Однонаправленные функции
- •2.4 Однонаправленные хэш-функции
- •2.5 Передача информации с использованием криптографии с открытыми ключами
- •Лекция 4. Цифровые подписи
- •1. Подпись документа с использованием симметричных криптосистем и посредника
- •2.7 Цифровые подписи и шифрование
- •2.8. Генерация случайных и псевдослучайных последовательностей
- •Лекция 5. Основные протоколы
- •1 Обмен ключами
- •Лекция 6. Алгоритмы аутентификации пользователей (Удостоверение подлинности)
- •3.3 Удостоверение подлинности и обмен ключами
- •3.4 Формальный анализ протоколов проверки подлинности и обмена ключами
- •Лекция 7. Цифровые подписи.
- •1. Неотрицаемые цифровые подписи
- •4.4 Подписи уполномоченного свидетеля
- •4.5 Подписи по доверенности
- •4.6 Групповые подписи
- •4.7 Подписи с обнаружением подделки
- •Лекция 8. Длина ключа
- •1 Длина симметричного ключа
- •7.2 Длина открытого ключа
- •7.3 Сравнение длин симметричных и открытых ключей
- •7.4 Вскрытие в день рождения против однонаправленных хэш-функций
- •7.5 Каков должны быть длина ключа?
- •Лекция 9. Управление ключами
- •1 Генерация ключей
- •8.2 Нелинейные пространства ключей
- •8.3 Передача ключей
- •8.4 Проверка ключей
- •8.5 Использование ключей
- •8.6 Обновление ключей
- •8.7 Хранение ключей
- •8.8 Резервные ключи
- •8.9 Скомпрометированные ключи
- •8.10 Время жизни ключей
- •8.11 Разрушение ключей
- •8.12 Управление открытыми ключами
- •Лекция 10. Типы алгоритмов и криптографические режимы
- •9.1 Режим электронной шифровальной книги
- •9.2 Повтор блока
- •9.3 Режим сцепления блоков шифра
- •9.4 Потоковые шифры
- •9.5 Самосинхронизирующиеся потоковые шифры
- •9.6 Режим обратной связи по шифру
- •9.7 Синхронные потоковые шифры
- •9.8 Режим выходной обратной связи
- •9.9 Режим счетчика
- •9.10 Другие режимы блочных шифров
- •Лекции 12. Математические основы
- •11.1 Теория информации
- •Энтропия и неопределенность
- •Норма языка
- •Безопасность криптосистемы
- •Расстояние уникальности
- •Практическое использование теории информации
- •Путаница и диффузия
- •11.2 Теория сложности
- •Сложность алгоритмов
- •Сложность проблем
- •11.3 Теория чисел
- •Арифметика вычетов
- •Простые числа
- •Наибольший общий делитель
- •Обратные значения по модулю
- •Решение для коэффициентов
- •Малая теорема Ферма
- •Функция Эйлера
- •Китайская теорема об остатках
- •Квадратичные вычеты
- •Символ Лежандра
- •Символ Якоби
- •Целые числа Блюма
- •Генераторы
- •Вычисление в поле Галуа
- •11.4 Разложение на множители
- •Квадратные корни по модулю п
- •11.5 Генерация простого числа
- •Практические соображения
- •Сильные простые числа
- •11.6 Дискретные логарифмы в конечном поле
- •Вычисление дискретных логарифмов в конечной группе
- •Лекция 13. Стандарт шифрования данных des (Data Encryption Standard)
- •12.1 Введение
- •Разработка стандарта
- •Принятие стандарта
- •Проверка и сертификация оборудования des
- •12.2 Описание des
- •Начальная перестановка
- •Преобразования ключа
- •Перестановка с расширением
- •Подстановка с помощью s-блоков
- •Перестановка с помощью р-блоков
- •Заключительная перестановка
- •Дешифрирование des
- •Режимы des
- •Аппаратные и программные реализации des
- •15.1 Двойное шифрование
- •15.3 Удвоение длины блока
- •15.4 Другие схемы многократного шифрования
- •15.5 Уменьшение длины ключа в cdmf
- •15.6 Отбеливание
- •15.7 Многократное последовательное использование блочных алгоритмов
- •15.8 Объединение нескольких блочных алгоритмов
- •16.1 Линейные конгруэнтные генераторы
- •Константы для линейных конгруэнтных генераторов
- •16.2 Сдвиговые регистры с линейной обратной связью
- •16.3 Проектирование и анализ потоковых шифров
- •16.4 Потоковые шифры на базе lfsr
- •18.1 Основы
- •18.7 Алгоритм безопасного хэширования (Secure Hash Algorithm, sha)
- •Лекция 17. Алгоритмы с открытыми ключами
- •19.2 Алгоритмы рюкзака
- •Иностранные патенты на алгоритм рюкзака Меркла-Хеллмана
- •Шифрование rsa
- •Скорости rsa для различных длин модулей при 8-битовом открытом ключе (на sparc II)
- •Лекция 19. Безопасность вычислительных сетей Атакуемые сетевые компоненты
- •Уровни сетевых атак согласно модели osi
2.2 Передача информации с использованием симметричной криптографии
Как двум сторонам безопасно обмениваться информацией? Конечно же, шифрую свои сообщения. Посмотрим, что должно произойти, когда Алиса посылает шифрованное сообщение Бобу (полный протокол гораздо сложнее).
(1) Алиса и Боб выбирают систему шифрования.
(2) Алиса и Боб выбирают ключ.
(3) Алиса шифрует открытый текст своего сообщения с использованием алгоритма шифрования и ключа, получая шифрованное сообщение.
(4) Алиса посылает шифрованное сообщение Бобу.
(5) Боб дешифрирует шифротекст сообщения с использованием алгоритма шифрования и ключа, получая открытый текст сообщения.
Что может Ева, находясь между Алисой и Бобом, узнать, подслушивая этот протокол? Если она может подслушать только передачу на этапе (4), ей придется подвергнуть шифротекст криптоанализу. Это пассивное вскрытие представляет собой вскрытие с использованием только шифротекста, применяемые алгоритмы устойчивы (насколько нам известно) по отношению к любым вычислительным мощностям, который может заполучить Ева для решения проблемы.
Ева, однако, не глупа. Она может также подслушать и этапы (1) и (2). Тогда ей станут известны алгоритм и ключ - также как и Бобу. Когда она перехватит сообщение на этапе (4), то ей останется только дешифровать его самостоятельно.
В хорошей криптосистеме безопасность полностью зависит от знания ключа и абсолютно не зависит от знания алгоритма. Именно поэтому управление ключами так важно в криптографии. Используя симметричный алгоритм, Алиса и Боб могут открыто выполнить этап (1), но этап (2) они должны сохранить в тайне. Ключ должен оставаться в секрете перед, после и в течение работы протокола - до тех пор, пока должно оставаться в тайне передаваемое сообщение - в противном случае сообщение тут же будет раскрыто. (О криптографии с открытыми ключами, решающей эту проблему иначе, рассказывается в разделе 2.5.)
Мэллори, активный взломщик, может сделать кое-что другое. Он может попытаться нарушить линию связи не этапе (4), сделав так, что Алиса вообще не сможет передавать информацию Бобу. Мэллори также может перехватить сообщение Алисы и заменить его своим собственным. Если ему удалось узнать ключ (перехватив обмен информацией на этапе (2) или взломав криптосистему), он сможет зашифровать свое сообщение и отправить его Бобу вместо перехваченного, и Боб не сможет узнать, что сообщение отправлено не Алисой. Если Мэллори не знает ключа, он может только создать сообщение, превращающееся при дешифровке в бессмыслицу. Боб, считая, что сообщение отправлено Алисой, может решить, что либо у Алисы, либо в сети возникли серьезные проблемы.
А Алиса? Что она может сделать, чтобы испортить протокол? Она может передать копию ключа Еве, и тогда Ева сможет читать все, что говорит Боб, и напечатать его слова в Нью-Йорк Тайме. Это серьезно, но проблема не в протоколе. Алиса и так может передавать Еве любые открытые тексты, передаваемые с использованием протокола. Конечно, то же самое может сделать и Боб. Протокол предполагает, что Алиса и Боб доверяют друг другу. Итак, симметричным криптосистемам присущи следующие проблемы:
— Распределение ключей должно проводиться в секрете. Ключи столь же важны, как и все сообщения, зашифрованные этими ключами, так как знание ключа позволяет раскрыть все сообщения. Для распространенных систем шифрования задача распределения ключей - серьезнейшая задача. Часто курьеры лично доставляют ключи по назначению.
— Если ключ скомпрометирован (украден, разгадан, выпытан, получен за взятку и т.д.), то Ева сможет расшифровать все сообщения, зашифрованные этим ключом. Она сможет также выступить в качестве одной из сторон и создавать ложные сообщения, дурача другую сторону.
— В предположении, что каждая пара пользователей сети использует отдельный ключ, общее число ключей быстро возрастает с ростом числа пользователей. Сеть из п пользователей требует п(п - 1)/2 ключей. Например, для общения 10 пользователей между собой нужно 45 различных ключей, для 100 пользователей потребуется 4950 ключей. Решение проблемы - в уменьшении числа пользователей, но это не всегда возможно.