Криптография с открытым ключом

Материал из llmdocs — справочник разработчика
Криптография с открытым ключом
Принциппара ключей — открытый публикуется, закрытый хранится в секрете
Основные задачиобмен ключами, цифровая подпись, шифрование
Изобретение (открытое)Диффи и Хеллман (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 включил постквантовый обмен ключами по умолчанию.

См. также

Источники

  1. W. Diffie, M. Hellman — New Directions in Cryptography (1976)
  2. R. Rivest, A. Shamir, L. Adleman — A Method for Obtaining Digital Signatures and Public-Key Cryptosystems (CACM, 1978)
  3. RFC 7748 — Elliptic Curves for Security (X25519, X448)
  4. RFC 8032 — Edwards-Curve Digital Signature Algorithm (EdDSA)
  5. NIST — FIPS 203, Module-Lattice-Based Key-Encapsulation Mechanism Standard
  6. RFC 8446 — The Transport Layer Security (TLS) Protocol Version 1.3