Криптография с открытым ключом - способ защищать данные с помощью пары математически связанных ключей: открытый можно передавать всем, а закрытый хранит только владелец. Открытый ключ используют для шифрования или проверки подписи, закрытый - для расшифровки или создания подписи. Благодаря этому не требуется заранее передавать секретный ключ.
Практические выводы и ориентиры
- Если нужно отправить секрет владельцу ключа, то используйте его открытый ключ, а расшифровывать сможет только соответствующий закрытый.
- Если требуется подтвердить автора и целостность файла, то применяйте электронную цифровую подпись, созданную закрытым ключом.
- Если нужно защитить соединение, то обычно сочетайте асимметричное шифрование с быстрым симметричным алгоритмом.
- Если открытый ключ опубликован без проверки принадлежности, то возможна атака с подменой собеседника.
- Если закрытый ключ потерян или скомпрометирован, то его следует отозвать и заменить, а не просто перестать использовать.
Распространённые мифы о криптографии с открытым ключом
Миф: открытый ключ нужно скрывать
Открытый ключ специально предназначен для распространения. Секретным является закрытый ключ: его нельзя передавать собеседникам, размещать в общедоступном репозитории или хранить без защиты.
Миф: открытый ключ сам по себе подтверждает личность
Ключ показывает, с каким криптографическим объектом выполняется операция, но не доказывает, кому он принадлежит. Для связывания ключа с человеком, сайтом или организацией применяют сертификаты, доверенные центры сертификации или проверку отпечатка ключа по независимому каналу.
Миф: асимметричное шифрование заменяет все остальные методы
Асимметричное шифрование удобно для установления доверия и обмена секретами, но обычно медленнее симметричного. Поэтому на практике открытые ключи применяют для согласования сеансового секрета, а сами данные защищают симметричным шифром.
Миф: RSA шифрование означает автоматическую безопасность
Безопасность зависит не только от названия алгоритма. Важны размер и тип ключа, режим работы, генератор случайных чисел, формат данных, проверка сертификатов и корректная реализация.
Как в действительности работают открытые и закрытые ключи
Пара ключей создаётся совместно. Открытый ключ можно публиковать, а закрытый остаётся у владельца. Криптографическая стойкость строится на том, что вычислить закрытый ключ по открытому практически невозможно при корректных параметрах и реализации.
- Получатель создаёт пару ключей: открытый и закрытый.
- Получатель публикует открытый ключ через доверенный канал или сертификат.
- Отправитель проверяет, что ключ действительно принадлежит нужному получателю.
- Отправитель шифрует секрет или небольшой сеансовый ключ открытым ключом.
- Получатель использует закрытый ключ для расшифровки.
- При подписании владелец вычисляет хеш документа и создаёт подпись закрытым ключом.
- Проверяющая сторона применяет открытый ключ и сопоставляет результат с хешем документа.
Шифрование с открытым ключом обеспечивает конфиденциальность только при условии, что открытый ключ получателя подлинный. Электронная цифровая подпись решает другую задачу: помогает проверить целостность данных и владение закрытым ключом, но сама по себе не скрывает содержимое.
Ключевые алгоритмы и когда их применять: RSA, ECC, ElGamal
Выбор алгоритма зависит от протокола, библиотеки, требований к совместимости и управления ключами. В прикладной системе алгоритм редко выбирают изолированно: важна вся схема, включая форматы, режимы и проверку параметров.
- RSA. Если нужна широкая совместимость с существующими системами, то RSA может быть практичным выбором для шифрования небольших секретов и создания подписей при корректном современном режиме.
- ECC. Если важны компактные ключи и эффективная работа на ограниченных устройствах, то используют схемы на эллиптических кривых. ECC применяется в современных протоколах обмена ключами и подписи.
- ElGamal. Если система уже построена вокруг соответствующей математической группы и требуется вероятностная схема шифрования, то ElGamal может быть уместен, но его параметры и реализация требуют особого внимания.
- Гибридное шифрование. Если нужно передать большой файл, то открытым ключом защищают случайный сеансовый ключ, а файл шифруют симметричным алгоритмом.
- Подпись документов. Если нужно подтвердить автора и неизменность документа, то используют алгоритм подписи, а не обычное шифрование.
Протоколы обмена ключами и роль цифровой подписи в реальных задачах
Обмен ключами позволяет двум сторонам получить общий секрет через потенциально наблюдаемую сеть. Однако сам факт обмена не всегда подтверждает личность собеседника: без аутентификации возможна атака посредника.
Когда подход подходит
- Если стороны не могут заранее передать общий секрет, то применяйте протокол согласования ключа.
- Если нужно защитить веб-сеанс, то используйте готовый проверенный протокол, а не собственную схему.
- Если необходимо доказать происхождение сообщения, то добавляйте электронную цифровую подпись.
- Если требуется подтвердить принадлежность ключа сайту или организации, то проверяйте сертификат и цепочку доверия.
Какие ограничения учитывать
- Если открытый ключ подменён, то злоумышленник может установить отдельный защищённый канал с каждой стороной.
- Если закрытый ключ украден, то подписи и расшифровка могут быть скомпрометированы.
- Если случайные числа предсказуемы, то даже сильный алгоритм может стать небезопасным.
- Если срок действия сертификата или статус отзыва не проверяется, то доверие может сохраняться к уже недействительному ключу.
Управление жизненным циклом ключей: генерация, хранение, ротация и отзыв
Криптографическая защита начинается не с выбора алгоритма, а с управления ключами. Если закрытый ключ хранится в обычном файле без контроля доступа, то стойкость математической схемы не спасает систему.
- Если создаёте ключ, то используйте проверенный генератор случайных чисел и библиотеку с актуальной поддержкой.
- Если храните закрытый ключ, то защищайте его аппаратным модулем, менеджером секретов или шифрованием с отдельным контролем доступа.
- Если ключ используется долго или изменились требования безопасности, то планируйте ротацию заранее.
- Если ключ потерян, раскрыт или связан с уволенным сотрудником, то немедленно запускайте процедуру отзыва.
- Если ключ больше не нужен, то удаляйте копии, резервные экземпляры и временные файлы по утверждённой процедуре.
Ротация не отменяет необходимость хранить старые ключи там, где требуется проверять ранее созданные подписи или расшифровывать архивы. Для таких случаев заранее определяют правила архивирования и сроки доверия.
Типичные уязвимости и векторы атак на схемы с открытым ключом
На практике атакуют не только математический алгоритм. Частые цели - подмена открытого ключа, неправильная проверка сертификата, повторное использование ключей, утечка закрытого ключа и ошибки в протоколе.
Мини-кейс: подмена ключа
Предположим, клиент получает открытый ключ сервера по незащищённому каналу и сразу использует его. Если злоумышленник подменит ключ, клиент зашифрует данные для злоумышленника, а тот затем передаст их настоящему серверу. Содержимое останется доступным атакующему.
получить_ключ()
если не проверить_сертификат_или_отпечаток:
доверять_ключу_нельзя
иначе:
зашифровать_сеансовый_секрет(открытым_ключом)
передать_серверу()
Если приложение работает с сертификатами, то проверяйте имя узла, срок действия, цепочку доверия и статус отзыва. Если используется прямой обмен ключами, то сверяйте отпечаток по независимому каналу.
Частые сомнения и краткие ответы
Можно ли отправлять открытый ключ по электронной почте?
Да, если получатель может проверить его подлинность по сертификату, заранее известному отпечатку или другому независимому каналу.
Что именно делает шифрование с открытым ключом?
Оно позволяет зашифровать данные открытым ключом так, чтобы расшифровать их мог соответствующий закрытый ключ. Для больших объёмов обычно защищают открытым ключом только сеансовый секрет.
Чем подпись отличается от шифрования?
Шифрование скрывает содержимое, а подпись подтверждает целостность и связь сообщения с закрытым ключом подписанта. Подписанный документ не обязательно является конфиденциальным.
Нужно ли скрывать сертификат?
Обычно нет: сертификат предназначен для публикации. Защищать нужно закрытый ключ, который связан с сертификатом.
Безопасен ли RSA?
RSA может быть безопасным при корректных параметрах, современном режиме применения и качественной реализации. Само использование RSA без проверки этих условий безопасность не гарантирует.
Что делать при утечке закрытого ключа?
Прекратите доверять ключу, отзовите связанный сертификат, выпустите новую пару и оцените, какие данные или подписи могли быть затронуты.
