Два ключа вместо одного

Два ключа вместо одного: как работает асимметричная криптография

В предыдущей статье мы разобрали симметричное шифрование. Оно быстро защищает большие объёмы данных, но требует, чтобы отправитель и получатель заранее получили один общий секретный ключ.

И тут возникает сложность:

Как безопасно договориться о секрете, если защищённого канала ещё нет?

Передать ключ обычным письмом нельзя — его могут перехватить. Положить ключ рядом с зашифрованным файлом тоже нельзя. Личная встреча подходит для нескольких людей, но плохо работает в интернете, где ежедневно взаимодействуют миллионы незнакомых участников.

Асимметричная криптография предлагает другой подход: вместо одного общего секрета используются два математически связанных ключа.

  • Закрытый ключ владелец хранит в тайне.

  • Открытый ключ можно передавать другим людям и публиковать.

Эта идея лежит в основе электронной подписи, сертификатов, защищённых соединений и инфраструктуры открытых ключей — PKI.

Почему криптография называется асимметричной

В симметричной криптографии участники используют один общий секрет:

Алиса Борис Секретный ключ ←────────────→ Тот же секретный ключ

Обе стороны должны знать ключ и защищать его.

В асимметричной криптографии у каждого участника может быть собственная ключевая пара:

Владелец ключа ┌───────────────────────┐ │ Закрытый ключ │ │ Хранится в тайне │ └───────────────────────┘ │ │ математическая связь ▼ ┌───────────────────────┐ │ Открытый ключ │ │ Можно распространять │ └───────────────────────┘

Ключи выполняют разные роли, поэтому схема называется асимметричной.

Открытый ключ не является паролем и не даёт возможность «войти» вместо владельца. Его задача зависит от конкретного алгоритма:

  • проверять электронную подпись;

  • участвовать в шифровании;

  • участвовать в согласовании общего секрета.

Закрытый ключ может использоваться:

  • для создания электронной подписи;

  • для расшифрования или получения ключа шифрования;

  • для вычисления общего секрета.

Но не каждый асимметричный алгоритм умеет всё перечисленное. Одни алгоритмы предназначены только для электронной подписи, другие — только для согласования ключей, третьи поддерживают несколько криптографических схем.

Например, ГОСТ Р 34.10-2012 определяет процессы создания и проверки электронной подписи. Это не алгоритм шифрования документов.

Как связаны открытый и закрытый ключи

Закрытый ключ обычно создаётся из случайных данных. В упрощённом виде его можно представить как очень большое случайное число.

Из закрытого ключа с помощью математической операции вычисляется открытый:

Случайные данные ↓ Закрытый ключ ↓ Односторонняя математическая операция ↓ Открытый ключ

Вычислить открытый ключ из закрытого должно быть легко.

Обратная задача должна быть вычислительно неосуществимой при правильно выбранных параметрах:

Закрытый ключ ─────────→ Открытый ключ легко Закрытый ключ ← - - - - Открытый ключ вычислительно неосуществимо

Слово «невозможно» здесь было бы слишком абсолютным. Речь идёт не о математическом запрете, а о вычислительной сложности: известные методы требуют настолько больших ресурсов, что получение закрытого ключа по открытому считается непрактичным.

Надёжность зависит не только от длины ключа. Важны:

  • используемая математическая задача;

  • параметры алгоритма;

  • качество случайных чисел;

  • правильность реализации;

  • защищённость хранения закрытого ключа.

Если закрытый ключ украли с компьютера или получили с токена вместе с PIN-кодом, злоумышленнику уже не нужно решать сложную математическую задачу. Поэтому криптографическая стойкость алгоритма не отменяет требований к защите ключей.

Вычислительная сложность

Именно на этой вычислительной сложности получения закрытого ключа из открытого и держится вся стойкость современного шифрования и электронных подписей.

Открытый ключ можно показывать всем. Но зачем?

Главная идея асимметричной криптографии состоит в разделении возможностей.

Владелец сохраняет закрытый ключ только у себя, а открытый ключ передаёт всем, кому нужно:

  • зашифровать для него данные;

  • согласовать с ним общий секрет;

  • проверить его электронную подпись.

При этом получатели открытого ключа не получают возможность создавать подписи от имени владельца.

Сравним с общим секретом.

В симметричной системе Алиса и Борис знают один ключ. Если оба могут создавать код проверки сообщения, то по этому коду нельзя определить, кто именно его создал: Алиса или Борис.

В асимметричной системе закрытый ключ Алисы остаётся только у Алисы:

Алиса Закрытый ключ │ │ создаёт подпись ▼ Электронная подпись Борис, Виктор, организация, сервис Открытый ключ Алисы │ │ проверяет подпись ▼ Результат проверки

Проверяющие могут убедиться, что подпись соответствует ключевой паре, но не могут создать новую подпись.

Именно это свойство делает асимметричную криптографию подходящей для электронной подписи.

Сценарий 1. Шифрование для получателя

Представим, что Борис опубликовал открытый ключ, предназначенный для шифрования.

Алиса хочет отправить ему секретное сообщение. Она использует открытый ключ Бориса, а расшифровать результат может владелец соответствующего закрытого ключа.

Упрощённо:

Алиса Документ + Открытый ключ Бориса ↓ Шифрование ↓ Зашифрованные данные │ │ передача через сеть ▼ Борис Зашифрованные данные + Закрытый ключ Бориса ↓ Расшифрование ↓ Документ

Открытый ключ не требуется скрывать. Даже если его получит посторонний, это само по себе не позволит расшифровать данные.

Но на практике большие файлы обычно не шифруют напрямую асимметричным алгоритмом. Асимметричные операции сравнительно ресурсоёмки и имеют ограничения на размер обрабатываемых данных.

Поэтому часто используется гибридная схема:

  1. Создаётся случайный симметричный ключ.

  2. Документ шифруется быстрым симметричным алгоритмом.

  3. Симметричный ключ защищается с помощью открытого ключа получателя.

  4. Получателю передаются зашифрованный документ и защищённый ключ.

  5. Получатель с помощью закрытого ключа получает симметричный ключ.

  6. Симметричный ключ используется для расшифрования документа.

Схематично:

Документ + Случайный симметричный ключ ↓ Быстрое симметричное шифрование ↓ Зашифрованный документ Симметричный ключ + Открытый ключ получателя ↓ Асимметрическая защита ключа ↓ Защищённый ключ

Получателю отправляются оба объекта:

Зашифрованный документ + Защищённый симметричный ключ

Так объединяются преимущества двух подходов:

  • симметричная криптография быстро обрабатывает большой объём данных;

  • асимметричная криптография помогает безопасно передать или защитить ключ.

Сценарий 2. Согласование общего секрета

Есть и другой подход: участники не передают готовый симметричный ключ вообще.

Алиса и Борис обмениваются открытыми данными и независимо вычисляют одинаковый общий секрет. Наблюдатель видит передаваемые значения, но не должен суметь получить итоговый секрет.

Упрощённо:

Алиса Борис Закрытый ключ А Закрытый ключ Б │ │ ▼ ▼ Открытый ключ А ─────────────→ Открытый ключ А Открытый ключ Б ←───────────── Открытый ключ Б Закрытый ключ А Закрытый ключ Б + + Открытый ключ Б Открытый ключ А │ │ ▼ ▼ Общий секрет ============= Общий секрет

Итоговый секрет не передаётся по сети. Обе стороны получают его независимо.

Так работает идея согласования ключей Диффи — Хеллмана и её варианты на эллиптических кривых, например ECDH.

Полученный секрет обычно не используют напрямую. Из него с помощью специальной функции вырабатывают ключи для симметричного шифрования и контроля целостности.

Почему одного согласования ключей недостаточно

Само по себе согласование секрета не всегда подтверждает личности участников.

Представим злоумышленника между Алисой и Борисом:

Алиса ←────→ Злоумышленник ←────→ Борис

Если участники не проверяют, кому принадлежат полученные открытые ключи, злоумышленник может установить отдельный секрет с Алисой и отдельный — с Борисом. После этого он сможет передавать сообщения между ними, читая или изменяя данные.

Такая атака называется атакой посредника.

Поэтому в реальных протоколах согласование ключей дополняют аутентификацией:

  • электронной подписью;

  • сертификатами;

  • заранее известными ключами;

  • другими способами проверки участника.

Открытый ключ можно публиковать, но всё равно нужно убедиться, что он принадлежит нужному человеку, организации или серверу.

К этой проблеме мы вернёмся в статьях о сертификатах и PKI.

Сценарий 3. Электронная подпись

Для электронной подписи роли ключей меняются:

  • закрытый ключ используется для создания подписи;

  • открытый ключ — для проверки.

Упрощённо:

Подписание Документ + Закрытый ключ ↓ Создание подписи ↓ Электронная подпись

Проверка:

Документ + Электронная подпись + Открытый ключ ↓ Криптографическая проверка ↓ Подпись верна / подпись не прошла проверку

Здесь нет цели скрыть документ. Подписанный файл может оставаться открытым для чтения.

Электронная подпись позволяет проверить, что:

  • подпись соответствует конкретному документу;

  • подпись сформирована с использованием закрытого ключа, соответствующего открытому;

  • документ не был изменён после создания подписи.

При этом открытый ключ не позволяет создать новую корректную подпись.

Подпись — не «шифрование хеша закрытым ключом»

Для первого знакомства иногда используют такое объяснение:

Подписант шифрует хеш документа закрытым ключом, а проверяющий расшифровывает его открытым ключом.

Эта фраза кажется наглядной, но создаёт неверное представление.

Электронная подпись и шифрование — разные криптографические операции. Даже в алгоритмах, где используются похожие математические преобразования, применяются разные схемы, правила подготовки данных и способы проверки.

Для алгоритмов электронной подписи на эллиптических кривых, включая ГОСТ Р 34.10-2012, описание через «шифрование закрытым ключом» вообще не отражает реальный процесс.

Правильнее говорить так:

Закрытый ключ участвует в вычислении электронной подписи, а открытый ключ — в математической проверке этой подписи.

Внутри алгоритма используются хеш документа, параметры ключевой пары и дополнительные вычисления. Позже мы разберём этот процесс по шагам.

Почему открытый ключ ещё не подтверждает личность

Допустим, вы получили файл с открытым ключом и подпись успешно прошла математическую проверку. Что именно стало известно?

Вы подтвердили, что подпись соответствует этому открытому ключу. Но из одной последовательности чисел нельзя узнать, кому принадлежит ключ.

Злоумышленник тоже может создать собственную пару:

Чужой закрытый ключ + Чужой открытый ключ

А затем назвать открытый ключ «ключом директора компании».

Математика не умеет проверять паспорт, должность или название организации. Для связи открытого ключа с владельцем используется сертификат ключа проверки электронной подписи.

Сертификат может содержать:

  • сведения о владельце;

  • открытый ключ;

  • срок действия;

  • сведения об издателе;

  • ограничения и параметры использования;

  • электронную подпись удостоверяющего центра.

Но сертификатам посвящены отдельные статьи. Пока достаточно запомнить:

Открытый ключ позволяет выполнить криптографическую проверку, а сертификат помогает установить, с кем этот ключ связан.

RSA и эллиптические кривые

Асимметричная криптография может строиться на разных математических задачах.

Один из известных подходов — RSA (аббревиатура от фамилий Rivest, Shamir и Adleman). Его стойкость связана со сложностью задачи факторизации больших чисел. Стандарт PKCS #1 описывает отдельные схемы RSA для шифрования и электронной подписи.

Другой подход — криптография на эллиптических кривых. В ней ключевая пара строится на операциях с точками специальной кривой над конечным полем. На эллиптических кривых создаются разные алгоритмы:

  • схемы электронной подписи;

  • схемы согласования ключей;

  • другие криптографические механизмы.

ГОСТ Р 34.10-2012 использует эллиптические кривые для формирования и проверки электронной подписи. Почему кривая позволяет получить открытый ключ и при этом скрыть закрытый, мы подробно разберём в отдельной статье: «Зачем электронной подписи нужна эллиптическая кривая».

Почему асимметричная криптография не заменила симметричную

Может показаться, что после появления открытых ключей общий секрет больше не нужен.

На практике асимметричные и симметричные алгоритмы решают разные задачи и часто работают вместе.

Свойство

Симметричная криптография

Асимметричная криптография

Количество ключей

Один общий секрет

Связанная пара ключей

Скорость обработки больших данных

Высокая

Обычно ниже

Передача секрета

Требует отдельного решения

Помогает установить или защитить общий секрет

Электронная подпись

Не создаёт общедоступно проверяемую подпись

Позволяет разделить создание и проверку

Типичное применение

Шифрование файлов, дисков и сетевого трафика

Подпись, аутентификация, согласование и защита ключей

Во многих системах процесс выглядит так:

Асимметричная криптография Проверка участника и получение общего секрета ↓ Симметричная криптография Защита основного потока данных

Так, асимметричные методы помогают решить проблему доверия и распределения ключей, а симметричные — эффективно защищают большие объёмы информации.

Где здесь электронная подпись

Теперь у нас есть почти все основные элементы:

  1. У подписанта есть закрытый ключ.

  2. Из него вычислен связанный открытый ключ.

  3. Закрытый ключ используется для создания подписи.

  4. Открытый ключ позволяет проверить подпись.

  5. Получение открытого ключа не раскрывает закрытый.

  6. Сертификат связывает открытый ключ с владельцем.

Но остаётся вопрос:

Что именно подписывает криптографический алгоритм, если документ может занимать сотни мегабайт?

Обычно сначала вычисляется короткий цифровой отпечаток документа — хеш. Именно хеш позволяет быстро связать подпись с данными любого размера и обнаруживать даже небольшие изменения.

В следующей статье: «Цифровой отпечаток документа: как работает хеш-функция».


Нормативная и дополнительная информация