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

> Асимметричная криптография, использующая пару связанных ключей — открытый и закрытый; лежит в основе TLS, SSH, цифровых подписей и обмена ключами.

Источник: https://llmdocs.ru/wiki/public-key-cryptography/ · обновлено 2026-11-09 · лицензия CC BY-SA 4.0

- **Принцип**: пара ключей — открытый публикуется, закрытый хранится в секрете
- **Основные задачи**: обмен ключами, цифровая подпись, шифрование
- **Изобретение (открытое)**: Диффи и Хеллман (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://llmdocs.ru/wiki/tls.md) и HTTPS, [SSH](https://llmdocs.ru/wiki/ssh.md), подписи обновлений и пакетов, сертификаты и электронная подпись.

## История

В 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) |

На практике асимметричные алгоритмы медленные, поэтому большие объёмы данных ими не шифруют. Используется **гибридная схема**: с помощью асимметричного обмена стороны договариваются об общем ключе, а данные шифруются быстрым [симметричным шифром](https://llmdocs.ru/wiki/symmetric-encryption.md) — AES или ChaCha20. Так работает TLS 1.3: обмен ключами по ECDHE, подпись сервера в сертификате, данные — через AEAD-шифр.[6]

## Как это работает: обмен Диффи — Хеллмана

Упрощённо: стороны публично договариваются о параметрах. Алиса выбирает секретное число *a* и отправляет результат вычисления *g^a*, Боб — секретное *b* и отправляет *g^b*. Каждый возводит полученное значение в свою секретную степень: оба получают *g^(ab)*. Наблюдатель видит *g^a* и *g^b*, но вычислить по ним *g^(ab)* не может — это задача дискретного логарифма. В эллиптическом варианте операции выполняются над точками кривой.

Если для каждого соединения генерируются новые временные ключи, кража долговременного ключа сервера не позволит расшифровать записанный ранее трафик — это свойство **прямой секретности** (*forward secrecy*).

## Подписи и доверие

Цифровая подпись — это хеш данных (см. [Хеш-функция](https://llmdocs.ru/wiki/hash-function.md)), обработанный закрытым ключом. Проверка открытым ключом подтверждает, что данные подписал владелец ключа и что они не изменились. Но остаётся вопрос: откуда известно, что открытый ключ принадлежит именно тому, за кого себя выдаёт? Решения:

- **Инфраструктура открытых ключей (PKI)** — центры сертификации подписывают сертификаты, связывающие ключ с доменом или организацией (см. [Сертификат X.509 и центры сертификации](https://llmdocs.ru/wiki/x509-certificates.md), [Let's Encrypt и ACME](https://llmdocs.ru/wiki/lets-encrypt-acme.md)).
- **Доверие при первом подключении** (TOFU) — как в SSH: отпечаток ключа сервера запоминается при первом входе.
- **Сеть доверия** — как в PGP: пользователи подписывают ключи друг друга.

## Практика

```bash
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 включил постквантовый обмен ключами по умолчанию.

## См. также

- [TLS](https://llmdocs.ru/wiki/tls.md)
- [SSH](https://llmdocs.ru/wiki/ssh.md)
- [Хеш-функция](https://llmdocs.ru/wiki/hash-function.md)
- [Симметричное шифрование (AES, ChaCha20)](https://llmdocs.ru/wiki/symmetric-encryption.md)
- [Сертификат X.509 и центры сертификации](https://llmdocs.ru/wiki/x509-certificates.md)

## Источники

1. [W. Diffie, M. Hellman — New Directions in Cryptography (1976)](https://ee.stanford.edu/~hellman/publications/24.pdf)
2. [R. Rivest, A. Shamir, L. Adleman — A Method for Obtaining Digital Signatures and Public-Key Cryptosystems (CACM, 1978)](https://dl.acm.org/doi/10.1145/359340.359342)
3. [RFC 7748 — Elliptic Curves for Security (X25519, X448)](https://www.rfc-editor.org/rfc/rfc7748)
4. [RFC 8032 — Edwards-Curve Digital Signature Algorithm (EdDSA)](https://www.rfc-editor.org/rfc/rfc8032)
5. [NIST — FIPS 203, Module-Lattice-Based Key-Encapsulation Mechanism Standard](https://csrc.nist.gov/pubs/fips/203/final)
6. [RFC 8446 — The Transport Layer Security (TLS) Protocol Version 1.3](https://www.rfc-editor.org/rfc/rfc8446)
