Цифровая подпись

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

В частности, цифровая подпись по асимметричной схеме используется для:

  • установления зашифрованного соединения с HTTP-сервером (подтверждая, что ответивший на запрос сервер действительно соответствует доменному имени, введённому пользователем в адресную строку браузера)
  • электронных писем (подтверждая, что отправитель — это именно тот, чей адрес указан в качестве обратного)

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

Подробнее:

  • владелец сервера, привязанного к доменному имени foo.bar, хочет получить возможность устанавливать зашифрованные соединения с клиентами
  • он генерирует пару ключей (публичный и приватный), которые затем будет использовать для получения от клиентов ключа симметричной схемы
  • также он обращается к сертифицирующей организации с запросом на получение сертификата
  • сертифицирующая организация проверяет, что доменное имя действительно соответствует тому серверу, с которого происходит запрос, после чего выдаёт сертификат — публичный ключ владельца сервера вместе с некоторой вспомогательной информацией (в том числе — о самой организации)
  • сертификат подписывается приватным ключом сертифицирующей организации

Теперь каждый, кто доверяет сертифицирующей организации, доверяет и владельцу сертификата.

Цепочки сертификатов

В реальности тех организаций, которым доверяют, например, ОС и браузеры, не так много: несколько сотен.

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

В общих чертах цепочка выглядит так (опуская дополнительную информацию):

  • «конечный сертификат»: имя сервера, ключ сервера (К0), имя издателя (И1), подпись (ключом К1), метка о конечности сертификата (чтобы не было возможности продолжить цепочку)
  • следующий сертификат: имя субъекта (И1), ключ субъекта (К1), имя издателя (И2), подпись (ключом К2)
  • следующий сертификат: имя субъекта (И2), ключ субъекта (К2), имя издателя (И3), подпись (ключом К3)

и так далее до

  • «корневой сертификат»: имя субъекта (Иn), ключ субъекта (Кn), имя издателя (Иn), подпись (ключом Kn)