О курсе
Курс «Криптографические методы защиты информации» знакомит с устройством, свойствами и правильным применением криптографических механизмов, на которых держится безопасность современных информационных систем: шифров, хеш-функций, кодов аутентификации сообщений, обмена ключами, электронной подписи, инфраструктуры открытых ключей и защищённых протоколов. Курс прикладной и рассчитан на читателя без подготовки в криптографии: каждое понятие вводится с нуля, а математика даётся в объёме, необходимом для понимания алгоритмов. Цель — понимать принципы построения и стойкости криптографических механизмов и уметь корректно применять, анализировать и проверять их при разработке защищённых систем: обоснованно выбирать примитивы и параметры, применять их средствами OpenSSL и библиотеки cryptography, читать стандарты (FIPS, RFC) и распознавать типичные ошибки применения в чужом коде.
Курс построен вокруг трёх идей. Первая — стойкость из трудной задачи: каждый механизм рассматривается вместе с тем, на чём основана его стойкость (перебор ключа, нахождение коллизии, факторизация, дискретный логарифм, решётки) и какие требования он предъявляет к ключу, одноразовому числу и данным. Вторая — «построй, сломай, исправь»: в каждой лабораторной работе сначала применяется механизм правильно и сверяет реализацию с тестовым вектором стандарта, затем реализуется учебная атака на неправильное применение — повтор nonce, режим ECB, оракул дополнения, предсказуемый генератор, «учебный» RSA, повтор nonce в ECDSA — и объясняется, какая мера её предотвращает. Третья — от примитива к системе: курс завершается протоколами (TLS 1.3, Signal), постквантовой криптографией и курсовым проектом, в котором примитивы складываются в работающий инструмент сквозного шифрования файлов.
Карта курса
Курс построен по одной линии, и каждая тема занимает в ней своё место:
модель угроз кто противник, к чему имеет доступ
↓
свойство безопасности конфиденциальность, целостность, свежесть…
↓
примитив AES, SHA-256, HMAC, RSA, X25519
↓
режим или протокол GCM, encrypt-then-MAC, TLS 1.3
↓
реализация API, время выполнения, обработка ошибок
↓
управление ключами генерация, хранение, ротация, уничтожение
Темы 1–4 дают основу: задачи и историю, формальные определения стойкости, случайность и математику. Темы 5–10 — симметричная криптография: шифры, режимы, хеши, MAC и AEAD, пароли и выработка ключей. Темы 11–14 — открытый ключ: Диффи — Хеллман, RSA, эллиптические кривые, подпись и PKI. Темы 15–16 собирают примитивы в протоколы и смотрят вперёд — на постквантовые схемы.
Нулевая тема стоит перед всей линией: она выравнивает подготовку по вероятности, логарифмам, алгебраическим структурам, байтам и инструментам, показывает карту зависимостей и фиксирует обозначения, которыми пользуются остальные шестнадцать тем. Каждая тема начинается с «паспорта»: что нужно знать до неё, что будет освоено, какая лабораторная работа это проверяет и какие разделы обязательны, а какие читаются для углубления.
Что даёт курс
- Понимание задач криптографии, принципа Керкгоффса, моделей атак и определений стойкости (IND-CPA, IND-CCA, EUF-CMA).
- Знание устройства и параметров основных примитивов: AES, ChaCha20, SHA-2, SHA-3, HMAC, AES-GCM, ChaCha20-Poly1305, PBKDF2, scrypt, Argon2, HKDF, RSA, ECDH, ECDSA, Ed25519, X25519, ML-KEM, и требований к ключам и одноразовым числам.
- Умение выбирать примитивы, режимы и параметры под требования системы и обосновывать выбор ссылками на стандарты.
- Умение шифровать, подписывать, вырабатывать ключи и проверять целостность средствами
openssl,gpgи модулей Pythoncryptography,hashlib,hmac,secrets,ssl; реализовывать учебные версии алгоритмов и проверять их по тестовым векторам. - Умение реализовать учебные атаки (частотный анализ, оракул дополнения, удлинение сообщения, восстановление ключа при повторе nonce, атаки на «учебный» RSA и малые подгруппы) и указать меры против них.
- Умение создать удостоверяющий центр, выпускать и проверять сертификаты, анализировать TLS-соединение, находить и исправлять типичные криптографические ошибки в коде.
- Навык чтения стандартов и статей об атаках, проектирования и документирования криптографической подсистемы, включая модель угроз.
Связь с другими курсами
Курс опирается на программирование на Python на уровне первого курса (функции, классы, работа с bytes и целыми числами), базовые навыки работы в командной строке Linux и дискретную математику (делимость, остатки, двоичная система счисления, основы логики и комбинаторики). Желательно общее представление о компьютерных сетях: что такое TCP-соединение и HTTP. Результаты курса пригодятся в курсах по защите информации в компьютерных сетях, безопасности веб-приложений, безопасной разработке программного обеспечения, распределённым системам и Интернету вещей.
Темы курса
Каждая тема включает лекцию (вкладка «Теория»), лабораторную работу и дополнительные материалы (вопросы для самопроверки, глоссарий, шпаргалка по инструментам, аннотированный список литературы и ресурсов).
| № | Тема | Раздел | Опирается на | Практика |
|---|---|---|---|---|
| 0 | Подготовка: карта курса, математика и инструменты | Основы | — | ЛР 0 |
| 1 | Введение в криптографию: задачи, история, классические шифры | Основы | 0 | ЛР 1 |
| 2 | Стойкость шифров: совершенная секретность, модели атак и вычислительная стойкость | Основы | 0, 1 | ЛР 2 |
| 3 | Случайные числа в криптографии | Основы | 0, 2 | ЛР 3 |
| 4 | Математические основы асимметричной криптографии | Основы | 0 | ЛР 4 |
| 5 | Поточные шифры | Симметричная криптография | 0, 2 | ЛР 5 |
| 6 | Блочные шифры: DES, AES и принципы построения | Симметричная криптография | 2 | ЛР 6 |
| 7 | Режимы работы блочных шифров | Симметричная криптография | 2, 5, 6 | ЛР 7 |
| 8 | Криптографические хеш-функции | Симметричная криптография | 0 | ЛР 8 |
| 9 | Коды аутентификации сообщений и аутентифицированное шифрование | Симметричная криптография | 2, 7, 8 | ЛР 9 |
| 10 | Пароли, выработка и управление ключами | Симметричная криптография | 0, 3, 9 | ЛР 10 |
| 11 | Обмен ключами Диффи — Хеллмана и задача дискретного логарифма | Асимметричная криптография | 4, 10 | ЛР 11 |
| 12 | RSA: шифрование и подпись | Асимметричная криптография | 4, 10 | ЛР 12 |
| 13 | Криптография на эллиптических кривых | Асимметричная криптография | 4, 11 | ЛР 13 |
| 14 | Электронная подпись и инфраструктура открытых ключей | Асимметричная криптография | 8, 12, 13 | ЛР 14 |
| 15 | Криптографические протоколы: аутентификация, TLS 1.3, SSH, мессенджеры | Протоколы и перспективы | 9, 10, 11, 14 | ЛР 15 |
| 16 | Постквантовая криптография и практика безопасного применения криптографии | Протоколы и перспективы | 15 | ЛР 16 |
Уровни материала и самопроверка
Материал разделён на три уровня, и в каждой лабораторной работе они помечены явно:
- минимум — обязательная часть: выполняется без внешней сети, только с пакетами из перечня оснащения;
- практический уровень — задания на измерение, атаку и объяснение результата;
- углубление — необязательные части: реальные сайты, дополнительные инструменты, более сложные атаки.
В теории граница проходит по разделам: в «паспорте» каждой темы указано, какие разделы обязательны, а какие читаются для углубления. Обязательный минимум даёт цельную картину курса; углубление — детали, без которых можно обойтись при первом проходе.
Для самопроверки полезно держать в голове веса, отражающие вклад разных видов работы в понимание. Это не баллы и не оценки: курс рассчитан на самостоятельное изучение, и никаких зачётов по нему не предусмотрено.
| Вид работы | Вес | Что проверяется |
|---|---|---|
| Теория и короткие доказательства | 20 % | определения, модели, вывод формул, границы применимости |
| Лабораторные работы | 35 % | воспроизведение механизма и атаки, совпадение с тестовыми векторами |
| Разбор ошибок и тестовых векторов | 15 % | умение объяснить, почему реализация дала именно такой результат |
| Аудит защищённого кода | 10 % | поиск и классификация ошибок применения, исправление |
| Курсовой проект | 20 % | связная система: модель угроз, выбор примитивов, тесты |
Ответ на теоретический вопрос считается полным, если в нём есть модель угрозы, предположения, ограничения, практическое следствие и пример ошибки применения — а не только формула.
Учебная среда
Все лабораторные работы выполняются на компьютере под управлением Linux. Рекомендуемая платформа — Ubuntu 24.04 LTS: установленная на компьютер, в виртуальной машине (VirtualBox, VMware, Hyper-V, UTM) или в подсистеме WSL2 на Windows. Большинство работ выполнимо и на macOS с OpenSSL и Python 3 из Homebrew, но различия команд там не разбираются. Права администратора нужны только для установки пакетов: учебные «серверы» и оракулы запускаются от имени пользователя на адресе 127.0.0.1.
Набор пакетов устанавливается в первой лабораторной работе:
sudo apt update
sudo apt install -y python3 python3-cryptography python3-argon2 openssl gnupg xxd curl wireshark
На Ubuntu 24.04 это даёт Python 3.12, OpenSSL 3.0 и библиотеку cryptography версии 41. Вместо системного пакета можно использовать виртуальное окружение: python3 -m venv ~/crypto-venv && ~/crypto-venv/bin/pip install cryptography argon2-cffi. Код окружений лабораторных работ совместим с cryptography начиная с версии 3.4 и с OpenSSL 3.0; постквантовые алгоритмы в OpenSSL появились с версии 3.5, поэтому в теме 16 они изучаются на учебных реализациях.
К каждой лабораторной работе прилагается архив окружения: заготовки программ с пометками TODO, автоматические проверки, данные (шифртексты, ключи, словари, изображения) и учебные серверы-оракулы. Минимальные требования: 4 ГБ ОЗУ, 2 ГБ свободного места, доступ в Интернет для установки пакетов. Обязательные части всех работ выполняются без выхода в сеть: всё необходимое для них лежит в архиве окружения; внешняя сеть и реальные сайты нужны только в необязательных частях тем 14–16.
Учебные реализации алгоритмов (собственные AES, RSA, ECDSA и другие), которые пишутся в лабораторных работах, предназначены только для понимания механизма и не пригодны для реального применения: в них нет защиты от атак по сторонним каналам и многих проверок. В реальных системах используются только проверенные библиотеки. Атаки выполняются исключительно против учебных объектов из окружений; несанкционированный доступ к чужой информации преследуется по закону (статьи 272–274 УК РФ).
Как работать с материалами
Тема изучается в следующем порядке.
- Теория. Лекция читается целиком, с остановками на схемах и числовых примерах. «Паспорт темы» в начале показывает, что понадобится из предыдущего, что будет освоено и какие разделы обязательны; к последним разделам, помеченным как углубление, можно вернуться позже. Примеры с малыми числами полезно пересчитать вручную или в интерпретаторе Python. Ссылки в тексте вида ¹ ведут к списку литературы в конце темы: к первоисточникам — стандартам и статьям об атаках — стоит обращаться, когда хочется понять, почему механизм устроен именно так.
- Дополнительно. Вопросы для самопроверки показывают, усвоен ли материал: если на вопрос не удаётся ответить своими словами, соответствующий раздел стоит перечитать. Глоссарий и шпаргалка нужны во время лабораторной работы.
- Лабораторная работа. Главный принцип — предсказать, затем проверить: прежде чем запустить атаку или эксперимент, следует записать ожидаемый результат (сколько попыток потребуется, сколько бит изменится, что произойдёт при подмене байта), а после — объяснить расхождение. Реализация считается верной только после совпадения с тестовым вектором стандарта. Части помечены уровнями: минимум — обязательная часть, практический уровень — задания с атакой и измерением, углубление — необязательные опыты.
Темы следует проходить по порядку: каждая опирается на предыдущие, а тема 4 (математика) нужна для тем 11–13. Если хочется сократить путь, минимальная траектория, дающая цельную картину, — темы 0, 1, 2, 3, 6, 7, 8, 9, 10 и 15.
Итоговые вопросы для самопроверки
Вопросы охватывают весь курс; если на вопрос не удаётся ответить своими словами, стоит вернуться к соответствующей теме.
- Задачи криптографии: конфиденциальность, целостность, аутентичность, неотрекаемость. Принцип Керкгоффса. Модели противника.
- Шифры простой замены и Виженера. Криптоанализ: частотный анализ, метод Касиски, индекс совпадений.
- Совершенная секретность по Шеннону. Одноразовый блокнот, его ограничения и последствия повторного использования ключа.
- Расстояние единственности и избыточность языка. Расчёт для простой замены.
- Вычислительная стойкость, уровень стойкости в битах. Модели атак: только шифртекст, известный, выбранный открытый текст, выбранный шифртекст. Неразличимость IND-CPA.
- Генераторы случайных чисел: истинные, псевдослучайные, криптографически стойкие. Почему Mersenne Twister непригоден для криптографии. ГСЧ ядра Linux.
- Реальные провалы генерации случайных чисел: Debian OpenSSL 2008, ключи RSA с общими простыми множителями.
- Расширенный алгоритм Евклида, обратный элемент по модулю, китайская теорема об остатках.
- Малая теорема Ферма и теорема Эйлера. Тест Миллера — Рабина. Генерация больших простых чисел.
- Группы, порядок элемента, порождающий элемент. Задача дискретного логарифмирования и алгоритм «шаг младенца — шаг великана».
- Конечные поля GF(p) и GF(2^n). Умножение в GF(2^8).
- Поточные шифры. LFSR, линейная сложность, алгоритм Берлекэмпа — Мэсси. Слабости RC4.
- ChaCha20: состояние, четверть-раунд, роль счётчика и nonce. Ковкость поточного шифрования.
- Сеть Фейстеля. DES: параметры, история, атака «встреча посередине» на двойное шифрование.
- AES: структура раунда, операции SubBytes, ShiftRows, MixColumns, AddRoundKey, расписание ключей.
- Режимы ECB, CBC, CTR: схемы, требования к IV, распространение ошибок, ковкость.
- Дополнение PKCS#7 и атака оракула дополнения.
- Свойства криптографических хеш-функций. Парадокс дней рождения. Конструкция Меркла — Дамгора и атака удлинения сообщения.
- SHA-2 и SHA-3: устройство, различия, губка Keccak. История взлома MD5 и SHA-1.
- Коды аутентификации сообщений. CBC-MAC, CMAC, HMAC. Почему
H(key || message)— плохой MAC. - Сочетание шифрования и MAC: encrypt-and-MAC, MAC-then-encrypt, encrypt-then-MAC. Атака по времени на сравнение тегов.
- Аутентифицированное шифрование с присоединёнными данными. AES-GCM и ChaCha20-Poly1305. Последствия повтора nonce.
- Хранение паролей: соль, перебор по словарю, радужные таблицы. PBKDF2, bcrypt, scrypt, Argon2 и выбор параметров.
- Функции выработки ключей. HKDF: этапы extract и expand, разделение ключей по назначению. Иерархия ключей и шифрование конвертом.
- Проблема распределения ключей. Протокол Диффи — Хеллмана, задачи CDH и DDH, выбор параметров.
- Атаки на протокол Диффи — Хеллмана: человек посередине, малые подгруппы, Logjam. Прямая секретность.
- RSA: генерация ключей, шифрование и расшифрование, корректность, ускорение через КТО.
- Атаки на «учебный» RSA: малый показатель, атака Хостада, общий модуль, общие простые множители. Дополнения OAEP и PKCS#1 v1.5, атака Блейхенбахера.
- Подпись RSA: «учебная» подпись и её подделка, PKCS#1 v1.5 и PSS.
- Эллиптические кривые над GF(p): групповой закон, скалярное умножение, ECDLP. Сравнение длин ключей RSA и ECC.
- ECDH, ECDSA и EdDSA. Восстановление закрытого ключа при повторе nonce в ECDSA.
- Сертификат X.509: поля и расширения. Построение и проверка цепочки сертификатов.
- Отзыв сертификатов: CRL, OCSP, OCSP stapling. Certificate Transparency. Инциденты с удостоверяющими центрами.
- Атаки на криптографические протоколы: повтор, отражение, человек посередине, понижение версии. Атака Лоу на протокол Нидхема — Шрёдера.
- TLS 1.3: рукопожатие, расписание ключей, возобновление сессии и 0-RTT. Отличия от TLS 1.2.
- Протокол Signal: X3DH и Double Ratchet, свойства прямой и обратной секретности.
- Угроза квантовых вычислений: алгоритмы Шора и Гровера. Стандарты ML-KEM, ML-DSA, SLH-DSA. Гибридный обмен ключами.
- Задача LWE и схема шифрования Регева. Одноразовая подпись Лэмпорта и деревья Меркла.
- Типичные ошибки применения криптографии в программном коде и способы их предотвращения.
Рекомендуемая литература
Основная
- Katz J., Lindell Y. Introduction to Modern Cryptography. 3rd ed. — CRC Press, 2020.
- Aumasson J.-P. Serious Cryptography: A Practical Introduction to Modern Encryption. 2nd ed. — No Starch Press, 2024.
- Boneh D., Shoup V. A Graduate Course in Applied Cryptography. — Открытое издание: toc.cryptobook.us.
- Paar C., Pelzl J. Understanding Cryptography: A Textbook for Students and Practitioners. — Springer, 2010. Видеолекции авторов: crypto-textbook.com.
- Алфёров А. П., Зубов А. Ю., Кузьмин А. С., Черёмушкин А. В. Основы криптографии. — М.: Гелиос АРВ, 2002.
Дополнительная
- Menezes A. J., van Oorschot P. C., Vanstone S. A. Handbook of Applied Cryptography. — CRC Press, 1996. Свободная версия: cacr.uwaterloo.ca/hac.
- Ferguson N., Schneier B., Kohno T. Cryptography Engineering: Design Principles and Practical Applications. — Wiley, 2010.
- Wong D. Real-World Cryptography. — Manning, 2021.
- Шнайер Б. Прикладная криптография. Протоколы, алгоритмы, исходные тексты на языке Си. — М.: Триумф, 2002.
- Черёмушкин А. В. Криптографические протоколы. Основные свойства и уязвимости. — М.: Академия, 2009.
- Сингх С. Книга шифров. Тайная история шифров и их расшифровки. — М.: АСТ, 2007.
Интернет-ресурсы
- NIST Computer Security Resource Center — стандарты FIPS и рекомендации NIST SP 800, в том числе постквантовые FIPS 203–205.
- RFC Editor и IRTF CFRG — криптографические RFC: ChaCha20-Poly1305, HKDF, X25519, Ed25519, TLS 1.3.
- Документация OpenSSL и документация pyca/cryptography.
- Cryptopals Crypto Challenges — наборы задач на атаки против неправильного применения криптографии; хорошее продолжение лабораторных работ курса.
- IACR Cryptology ePrint Archive — препринты научных статей по криптографии.
- BlueKrypt: Cryptographic Key Length Recommendation — сводка рекомендаций по длинам ключей разных организаций.
- Matthew Green. A Few Thoughts on Cryptographic Engineering и блог Cloudflare — разборы реальных атак и внедрения новых протоколов.
- Технический комитет по стандартизации ТК 26 «Криптографическая защита информации» — отечественные криптографические стандарты и рекомендации.