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

Цифровая подпись доказывает, кто автор данных и что их не меняли, — без передачи секретов.

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

Подпись — это асимметрия наоборот

В прошлом уроке про асимметрию шифровали открытым ключом, а расшифровывали закрытым. В подписи всё наоборот по смыслу: автор подписывает закрытым ключом (который только у него), а проверить может любой открытым ключом. Раз проверка прошла — значит, подписал именно владелец закрытого ключа.

На практике подписывают не весь документ, а его хэш (так быстрее и компактнее). Поэтому подпись даёт сразу два гаранта:

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

Чем подпись отличается от шифрования

ЦельЧто делаютКаким ключом
Конфиденциальностьшифруют сообщениеоткрытым ключом получателя
Аутентичность + целостностьподписывают сообщениезакрытым ключом отправителя

Подпись не скрывает содержимое — данные остаются читаемыми. Она лишь доказывает их происхождение и неизменность.

Проблема доверия: чей это открытый ключ?

Подпись проверяется открытым ключом автора. Но откуда уверенность, что данный открытый ключ действительно принадлежит, скажем, вашему банку, а не подставному лицу? Эту проблему решают сертификаты.

Цифровой сертификат — документ, который связывает открытый ключ с конкретным владельцем (доменом, организацией) и сам подписан доверенной стороной.

Удостоверяющие центры и цепочка доверия

Сертификат подписывает удостоверяющий центр (CA) — организация, которой все доверяют. Браузеры и ОС идут со встроенным списком доверенных корневых CA. Получается цепочка: вы доверяете корневому CA → он подписал сертификат сайта → значит, открытый ключ в сертификате действительно принадлежит этому сайту.

Корневой CA  (доверяем заранее)
      |
   подписывает
      v
Сертификат сайта example.com  -->  его открытый ключ
      |
   проверяем подписью CA
      v
Доверяем ключу example.com

Когда вы видите замок в адресной строке, браузер уже проверил эту цепочку: сертификат сайта валиден, подписан доверенным CA и выдан именно для этого домена.

Почему это важно для разработчика

  • Просроченный или невалидный сертификат вызовет предупреждение браузера и отпугнёт пользователей.
  • Подпись — основа обновлений ПО: система проверяет, что обновление подписано производителем, а не подменено.
  • Самоподписанные сертификаты годятся для теста, но в проде нужны выданные доверенным CA.

Итог

  • Подпись делают закрытым ключом, проверяют открытым — это доказывает автора и неизменность.
  • Подпись не шифрует данные, а удостоверяет их происхождение и целостность.
  • Сертификат связывает открытый ключ с владельцем и подписан удостоверяющим центром.
  • Браузер доверяет сайту через цепочку до встроенного корневого CA.
Проверьте себя
1. Каким ключом создают цифровую подпись?
AОткрытым ключом отправителя
BЗакрытым ключом отправителя
CОткрытым ключом получателя
DОбщим симметричным ключом
2. Что доказывает корректная цифровая подпись?
AЧто данные зашифрованы
BАвторство и то, что данные не менялись
CЧто данные сжаты
DЧто отправитель онлайн
3. Зачем нужен цифровой сертификат?
AЧтобы зашифровать сам сертификат
BЧтобы подтвердить, что открытый ключ принадлежит конкретному владельцу
CЧтобы ускорить соединение
DЧтобы хранить пароли
4. Как браузер решает, что сертификату сайта можно доверять?
AДоверяет любому сертификату
BПроверяет цепочку подписей до встроенного доверенного корневого CA
CСпрашивает пользователя каждый раз
DСверяет длину ключа
Поддержать проект