Криптография с открытым ключом
| Принцип | пара ключей — открытый публикуется, закрытый хранится в секрете |
|---|---|
| Основные задачи | обмен ключами, цифровая подпись, шифрование |
| Изобретение (открытое) | Диффи и Хеллман (1976), RSA (1977) |
| Алгоритмы | RSA, ECDH/X25519, ECDSA, Ed25519 |
| Постквантовые стандарты | ML-KEM (FIPS 203), ML-DSA (FIPS 204), SLH-DSA (FIPS 205), 2024 |
| Применение | TLS, SSH, PGP, подпись кода и обновлений, криптовалюты |
Криптография с открытым ключом (асимметричная криптография) — раздел криптографии, в котором используются пары математически связанных ключей: открытый (публичный) ключ можно свободно распространять, а закрытый (приватный) владелец хранит в секрете. Что зашифровано открытым ключом, расшифрует только владелец закрытого; что подписано закрытым ключом, любой может проверить открытым. Вычислить закрытый ключ по открытому практически невозможно.
Асимметричная криптография решила задачу, веками ограничивавшую шифрование: как договориться о секретном ключе с незнакомцем по открытому каналу. На ней построены TLS и HTTPS, SSH, подписи обновлений и пакетов, сертификаты и электронная подпись.
История
В 1976 году Уитфилд Диффи и Мартин Хеллман опубликовали статью «Новые направления в криптографии», где описали обмен ключами по открытому каналу и идею цифровой подписи.[1] В 1977 году Рональд Ривест, Ади Шамир и Леонард Адлеман предложили алгоритм RSA, пригодный и для шифрования, и для подписи.[2] Позже выяснилось, что в британской спецслужбе GCHQ Джеймс Эллис, Клиффорд Кокс и Малкольм Уильямсон пришли к тем же идеям несколькими годами раньше, но работа была засекречена до 1997 года. Авторы RSA получили премию Тьюринга в 2002 году, Диффи и Хеллман — в 2015-м.
В 1985 году Нил Коблиц и Виктор Миллер независимо предложили криптографию на эллиптических кривых, дающую ту же стойкость при гораздо более коротких ключах. Кривые Curve25519 и Ed25519 Дэниела Бернстайна и коллег стали стандартом де-факто в современных протоколах.[3][4]
Три основные задачи
| Задача | Что делает | Алгоритмы |
|---|---|---|
| Обмен ключами | две стороны вырабатывают общий секрет по открытому каналу | Диффи — Хеллман, ECDH, X25519, ML-KEM |
| Цифровая подпись | доказывает авторство и целостность данных | RSA-PSS, ECDSA, Ed25519, ML-DSA |
| Шифрование | зашифровать данные для владельца ключа | RSA-OAEP, гибридные схемы (HPKE) |
На практике асимметричные алгоритмы медленные, поэтому большие объёмы данных ими не шифруют. Используется гибридная схема: с помощью асимметричного обмена стороны договариваются об общем ключе, а данные шифруются быстрым симметричным шифром — AES или ChaCha20. Так работает TLS 1.3: обмен ключами по ECDHE, подпись сервера в сертификате, данные — через AEAD-шифр.[6]
Как это работает: обмен Диффи — Хеллмана
Упрощённо: стороны публично договариваются о параметрах. Алиса выбирает секретное число a и отправляет результат вычисления g^a, Боб — секретное b и отправляет g^b. Каждый возводит полученное значение в свою секретную степень: оба получают g^(ab). Наблюдатель видит g^a и g^b, но вычислить по ним g^(ab) не может — это задача дискретного логарифма. В эллиптическом варианте операции выполняются над точками кривой.
Если для каждого соединения генерируются новые временные ключи, кража долговременного ключа сервера не позволит расшифровать записанный ранее трафик — это свойство прямой секретности (forward secrecy).
Подписи и доверие
Цифровая подпись — это хеш данных (см. Хеш-функция), обработанный закрытым ключом. Проверка открытым ключом подтверждает, что данные подписал владелец ключа и что они не изменились. Но остаётся вопрос: откуда известно, что открытый ключ принадлежит именно тому, за кого себя выдаёт? Решения:
- Инфраструктура открытых ключей (PKI) — центры сертификации подписывают сертификаты, связывающие ключ с доменом или организацией (см. Сертификат X.509 и центры сертификации, Let's Encrypt и ACME).
- Доверие при первом подключении (TOFU) — как в SSH: отпечаток ключа сервера запоминается при первом входе.
- Сеть доверия — как в PGP: пользователи подписывают ключи друг друга.
Практика
ssh-keygen -t ed25519 -C "alice@laptop" # пара ключей для SSH
openssl genpkey -algorithm ed25519 -out key.pem # закрытый ключ
openssl pkey -in key.pem -pubout -out pub.pem # открытый ключ из закрытого
git config --global gpg.format ssh # подпись коммитов Git SSH-ключом
Закрытый ключ нужно хранить с правами только для владельца, по возможности защищать паролем или держать в аппаратном модуле (YubiKey, TPM, HSM). Утечка закрытого ключа означает, что ключ нужно немедленно отозвать и заменить.
Квантовая угроза
Алгоритм Шора (1994) позволит достаточно мощному квантовому компьютеру взломать RSA и эллиптическую криптографию. Таких компьютеров пока нет, но зашифрованный трафик можно записать сейчас и расшифровать позже. В 2024 году NIST утвердил первые постквантовые стандарты: ML-KEM для обмена ключами и ML-DSA и SLH-DSA для подписей.[5] Браузеры и крупные сервисы уже используют гибридный обмен ключами X25519 + ML-KEM в TLS, а OpenSSH включил постквантовый обмен ключами по умолчанию.
См. также
Источники
- W. Diffie, M. Hellman — New Directions in Cryptography (1976)
- R. Rivest, A. Shamir, L. Adleman — A Method for Obtaining Digital Signatures and Public-Key Cryptosystems (CACM, 1978)
- RFC 7748 — Elliptic Curves for Security (X25519, X448)
- RFC 8032 — Edwards-Curve Digital Signature Algorithm (EdDSA)
- NIST — FIPS 203, Module-Lattice-Based Key-Encapsulation Mechanism Standard
- RFC 8446 — The Transport Layer Security (TLS) Protocol Version 1.3