Как на самом деле работает криптография с открытым ключом
Практический разбор асимметричного шифрования, пар ключей и цифровых подписей без отвлекающих математических аналогий.
Каждый раз, когда вы подключаетесь по SSH к серверу или загружаете HTTPS-сайт, два математически связанных ключа выполняют основную работу. Один открытый, один закрытый, и взаимосвязь между ними — это то, что делает защищённую коммуникацию по неверённой сети вообще возможной.
Основная идея
При симметричном шифровании один ключ и шифрует, и расшифровывает данные. Это работает, если обе стороны уже делят общий секрет, но безопасное распространение этого секрета — это сложная часть. Криптография с открытым ключом (асимметричное шифрование) решает эту проблему, генерируя математически связанную пару: открытый ключ, который вы раздаёте всем, и закрытый ключ, которым вы никогда не делитесь.
Данные, зашифрованные открытым ключом, можно расшифровать только соответствующим закрытым ключом. Данные, подписанные закрытым ключом, может проверить любой, у кого есть открытый ключ. Эти два свойства покрывают почти всё, для чего мы это используем: конфиденциальность и аутентификацию.
RSA, классический пример
RSA полагается на то, что умножение двух больших простых чисел быстро, а факторизация произведения обратно в эти простые числа вычислительно требует значительных ресурсов в больших масштабах. RSA-ключ на 2048 бит строится из двух простых чисел примерно по 1024 бита каждое. Открытый ключ — это (n, e): n — произведение простых чисел, e — фиксированный показатель, например 65537. Закрытый ключ вычисляется через функцию Эйлера от n и требует знания исходных простых чисел.
Шифрование — это модульное возведение в степень: c = m^e mod n. Расшифровка обращает это с приватным показателем d: m = c^d mod n. На практике никто не шифрует большие объёмы данных прямо RSA — это медленно и имеет ограничения по размеру, связанные с длиной ключа. Вместо этого RSA обычно оборачивает симметричный ключ сессии (например, AES-256), а симметричный шифр обрабатывает основные данные. Это гибридный подход, который использует TLS.
Эллиптическая криптография и почему она захватывает рынок
ECC даёт вам эквивалентную RSA безопасность с намного меньшими ключами. ECC-ключ на 256 бит (например, curve secp256r1 или Curve25519) примерно сравним по стойкости с RSA-ключом на 3072 бита. Меньшие ключи означают быстрые рукопожатия и меньше трафика, что является причиной, почему современные TLS-конфигурации, SSH-реализации и протокол Signal полагаются на ECC.
Математика другая — она основана на задаче дискретного логарифма над точками эллиптической кривой, а не на факторизации целых чисел — но связь открытого и закрытого ключей и гарантии концептуально одинаковы.
Цифровые подписи: другая половина уравнения
Шифрование сохраняет данные конфиденциальными. Подписи доказывают подлинность и целостность. Чтобы подписать сообщение, вы хешируете его (обычно SHA-256) и шифруете этот хеш закрытым ключом. Любой, у кого есть ваш открытый ключ, может сам захешировать сообщение, расшифровать вашу подпись и проверить, что оба хеша совпадают.
Это ровно то, что происходит, когда вы запускаете git commit -S с GPG-ключом, или когда Certificate Authority подписывает TLS-сертификат. Закрытый ключ CA подписывает ваш сертификат; браузеры поставляются с открытым ключом CA, доверяющимся по умолчанию, поэтому они могут проверить подлинность вашего сертификата без прямого контакта с CA.
Где это встречается в повседневной работе
Aутентификация по SSH-ключу — это прямое применение: ssh-keygen -t ed25519 генерирует пару ключей, вы кладёте открытую половину в ~/.ssh/authorized_keys на сервере, и аутентификация происходит через challenge-response с использованием закрытого ключа, пароль никогда не передаётся.
TLS-рукопожатия используют асимметричную криптографию кратковременно, просто для установки общего симметричного ключа (через ECDHE-обмен ключами в современных конфигурациях), а затем переходят на быстрое симметричное шифрование для реальной сессии. PGP/GPG-шифрование писем следует гибридному подходу — шифруется сообщение случайным AES-ключом, затем этот AES-ключ шифруется открытым RSA или ECC-ключом получателя.
Что на самом деле ломается на практике
Математика за RSA и ECC не была взломана классическими вычислениями. Проблемы почти всегда в реализации: слабое создание случайных чисел при генерации ключей (баг Debian OpenSSL 2008 года — учебный случай), переиспользованные nonce в подписях ECDSA, утекающих закрытые ключи, или атаки через padding oracle против плохо реализованного RSA (атака Bleichenbacher против PKCS#1 v1.5 padding). Квантовые вычисления — это долгосрочная теоретическая угроза — алгоритм Шора сломал бы и RSA, и ECC, если бы существовал достаточно большой квантовый компьютер — поэтому NIST уже стандартизировал постквантовые алгоритмы, такие как ML-KEM (ранее Kyber), для миграции в будущем.
Если вы хотите углубиться в эту тему, трек криптографии Korra Studio подробнее охватывает протоколы обмена ключей и устройство хеш-функций, а сегменты о сетях рассмотрят, как всё это подходит в реальное TLS-рукопожатие байт за байтом.
Написано с помощью ИИ, проверено и опубликовано Михалом Пильхом (CISSP), Korra Studio.
Это одна заметка из базы знаний Korra Studio — платформа сочетает каждую тему с наставничеством один на один.
Начать бесплатноarrow_forward