Публичный ключ — одна из двух частей асимметричной криптографической пары «публичный ключ / приватный ключ». Публичный ключ можно свободно распространять; данные, зашифрованные публичным ключом, расшифровываются только соответствующим приватным ключом. В контексте TLS/SSL публичный ключ сервера передаётся клиенту в составе сертификата X.509.
Как работает асимметричная криптография
Алгоритм RSA (Rivest–Shamir–Adleman, 1977): два простых числа p и q перемножаются, давая модуль n = p×q. Публичный ключ — пара (n, e); приватный — (n, d), где d — секретный показатель. Математическая сложность факторизации большого числа n на множители p и q обеспечивает безопасность. Минимальный размер RSA-ключа для новых систем — 2048 бит; рекомендуется 4096 бит для долгосрочных ключей. RSA-512 взломан в 1999 году; RSA-768 — в 2009 году; RSA-1024 считается небезопасным с 2012 года.
Эллиптическая криптография (ECC): ключи 256 бит обеспечивают безопасность, эквивалентную RSA-3072. Алгоритм ECDSA на кривой P-256 (NIST) используется в большинстве Let's Encrypt-сертификатов. Ed25519 (кривая Curve25519, RFC 8032) — современная альтернатива с высокой скоростью и простой безопасной реализацией; используется в SSH-ключах на современных системах. В TLS 1.3 асимметричная криптография применяется только для Handshake (обмен ключами через ECDHE); сам трафик шифруется симметричным AES-GCM.
История
Концепцию асимметричной криптографии описали Уитфилд Диффи и Мартин Хеллман в 1976 году («New Directions in Cryptography», Stanford University). RSA реализован Ривестом, Шамиром и Адлеманом в 1977 году в MIT — первая практическая реализация идеи Диффи–Хеллмана. В 1983 году RSA запатентован; патент истёк в 2000 году, что сделало RSA свободным. ECDSA (Elliptic Curve Digital Signature Algorithm) стандартизирован NIST в FIPS 186-2 (2000). Эллиптическая криптография вытесняет RSA с 2015 года: меньший размер ключей при той же стойкости, более высокая производительность на мобильных устройствах.
Публичный ключ в SSH
SSH использует пары ключей для беспарольной аутентификации: публичный ключ (~/.ssh/id_rsa.pub или ~/.ssh/id_ed25519.pub) добавляется на сервер в ~/.ssh/authorized_keys. При подключении клиент подписывает вызов (challenge) сервера своим приватным ключом, сервер проверяет подпись публичным ключом. Для VDS и выделенных серверов аутентификация по ключу безопаснее пароля: брутфорс бессмыслен без доступа к приватному ключу. Генерация Ed25519-пары: ssh-keygen -t ed25519 -C "comment". Скопировать публичный ключ на сервер: ssh-copy-id user@server.
Публичный ключ в инфраструктуре TLS
В TLS-сертификате X.509 публичный ключ хранится в поле subjectPublicKeyInfo. Центр сертификации (CA) подписывает сертификат своим приватным ключом, подтверждая, что публичный ключ принадлежит указанному домену. Браузер проверяет подпись CA через цепочку доверия до корневого сертификата. Протокол ACME автоматизирует этот процесс: Let's Encrypt подтверждает, что запрашивающий контролирует домен, и выдаёт сертификат без участия человека.
На что обращать внимание
Приватный ключ никогда не передаётся — только публичный. Компрометация приватного ключа означает, что злоумышленник может расшифровать прошлый трафик (при RSA без Forward Secrecy) или подписывать данные от вашего имени. Для TLS используйте PEM-формат хранения ключей с ограниченными правами: chmod 600 privkey.pem. Хранение приватных ключей в секретных менеджерах (HashiCorp Vault, AWS Secrets Manager) предпочтительнее хранения в файлах. Никогда не коммитьте ключи в git — даже удалённый коммит остаётся в истории репозитория навсегда.