Задача, которую решает подпись
Когда вы получаете файл или письмо, возникают два вопроса. Действительно ли это отправил тот, кто заявлен, и не изменили ли текст по дороге? Электронная подпись отвечает на оба сразу. Она привязывает содержимое к владельцу секретного ключа, и любая правка документа после подписания делает подпись недействительной.
Важно отличать подпись от шифрования. Шифрование скрывает содержимое, подпись его не скрывает вовсе: подписанный текст может лежать открыто. Подпись подтверждает происхождение и неизменность, а не конфиденциальность.
Как это делается технически
Сначала от документа считается хеш, например SHA-256, потому что подписывать целый файл неудобно. Затем этот короткий отпечаток преобразуется закрытым ключом подписанта. Результат прикладывается к документу как подпись. Закрытый ключ известен только владельцу, поэтому подделать такое преобразование без него нельзя.
Проверяющий действует в обратном порядке. Он берёт открытый ключ подписанта, применяет его к подписи и получает исходный хеш. Затем сам считает хеш полученного документа. Если значения совпали, документ не менялся, а подпись создана обладателем соответствующего закрытого ключа. Математика различается в зависимости от алгоритма, RSA и эллиптические кривые используют разные схемы, но логика проверки одинакова.
Связь ключей разобрана в материале об открытом и закрытом ключе.
Откуда берётся доверие к открытому ключу
Тут возникает главный вопрос: как проверяющий узнаёт, что открытый ключ действительно принадлежит именно этому человеку или организации, а не подменён? Для этого существуют сертификаты. Центр сертификации подтверждает связь между именем владельца и ключом собственной подписью. Тогда проверка идёт по цепочке от сертификата подписанта к доверенному корню, что описано на странице про цепочку доверия.
В веб-технологиях и в подписи программ эта схема используется постоянно. Подписанный установщик или драйвер несёт подпись издателя и сертификат. Операционная система проверяет их до запуска и показывает, кто издатель.
Виды подписи и юридическая сторона
На практике встречаются разные уровни. Простая подпись, например код из сообщения или логин с паролем, подтверждает действие лишь косвенно. Усиленная подпись строится на криптографии описанным выше способом и позволяет обнаружить изменения. В российском праве выделяют усиленную неквалифицированную и квалифицированную подписи, причём последняя опирается на сертификат аккредитованного удостоверяющего центра и приравнивается к собственноручной в большинстве случаев.
Юридические детали зависят от страны и от вида документа, поэтому для конкретной сделки стоит уточнять требования отдельно. Технически же любая усиленная подпись держится на связке хеш, закрытый ключ и сертификат.
Ограничения и как проверить у себя
Подпись доказывает только то, что операция выполнена с закрытым ключом. Если ключ украли или владелец оставил его на заражённом компьютере, подпись будет технически верной, но получена не тем человеком. Поэтому ключи хранят на токенах и смарт-картах, откуда их нельзя просто скопировать.
Другое ограничение — срок действия сертификата и возможность отзыва. Хорошая проверка учитывает статус отзыва и время подписания.
Увидеть подпись можно самому. В свойствах исполняемого файла Windows есть вкладка «Цифровые подписи». В PDF-редакторах подпись отображается панелью с указанием, менялся ли документ после подписания. Для писем и файлов также используется PGP, описанный в отдельной статье.
Подпись программ и штампы времени
Отдельный случай — подпись исполняемых файлов и драйверов. Издатель подписывает установщик, и система при запуске проверяет подпись, сообщая, кто его выпустил и не изменён ли файл. Часто к подписи добавляют штамп времени от независимой службы: он доказывает, что подпись поставлена, пока сертификат ещё действовал. Благодаря этому подписанная программа не превращается в непроверяемую через год, когда срок сертификата истёк. Отсутствие подписи не означает вредоносность, а наличие подписи не означает безопасность: подписывать могут и недобросовестные издатели, поэтому подпись лишь один из признаков. В окне запроса на установку обращайте внимание на название издателя и сверяйте его с ожидаемым.