Цифровая подпись — это результат криптографической операции, при которой хеш данных шифруется закрытым ключом подписанта. Определить, подлинна ли подпись, можно только путем её проверки с использованием соответствующего открытого ключа (или сертификата) и алгоритма хеширования. Внешний вид документа или сама подпись не дают никаких гарантий подлинности.
- Как работает проверка цифровой подписи
- Основные признаки поддельной цифровой подписи
- Практический порядок действий по выявлению подделки
- Ограничения и типичные ошибки при оценке подписи
- Что не может гарантировать проверка
- Типичные ошибки пользователей
- Рекомендации по повышению надёжности проверки
- Что делать дальше
- Часто задаваемые вопросы (FAQ)
Как работает проверка цифровой подписи
Для успешной проверки необходимо выполнить несколько взаимосвязанных шагов:
- Получить исходные данные, которые были подписаны, и саму подпись (обычно в виде отдельного блока или атрибута файла).
- Извлечь сертификат подписанта, содержащий открытый ключ и информацию о владельце.
- Проверить цепочку доверия сертификата: убедиться, что он выдан доверенным центром сертификации (ЦС), не просрочен и не отозван.
- Вычислить хеш исходных данных тем же алгоритмом, который использовался при создании подписи.
- Расшифровать подпись открытым ключом и сравнить полученное значение с вычисленным хешем. Если они совпадают — подпись верна.
- При наличии метки времени (timestamp) проверить, что она была создана доверенным органом Timestamping Authority (TSA) и что данные не были изменены после указанного момента.
Если любой из этих пунктов не выполняется, подпись считается недействительной или подозрительной.
Основные признаки поддельной цифровой подписи
Подделка может проявляться по-разному. Ниже перечислены ситуации, при которых проверка обычно выдаёт ошибку или требует дополнительного анализа.
- Ошибка криптографической проверки. Расшифрованная подпись не совпадает с хешем данных — явный признак того, что подпись создана другим ключом или данные были изменены после подписи.
- Сертификат не доверен. Отсутствует цепочка доверия к корневому ЦС, который присутствует в доверенном хранилище пользователя.
- Сертификат просрочен или отозван. Дата окончания действия прошла, либо статус в CRL/OCSP указывает на отзыв.
- Использован устаревший или слабый алгоритм. Например, подпись создана с использованием MD5 или RSA с ключом меньше 2048 бит, что считается небезопасным.
- Несоответствие метаданных. В подписи указано одно имя организации, а в сертификате — другое, либо поля subject и issuer явно противоречат ожидаемому подписанту.
- Отсутствие метки времени при необходимости. Для долгосрочной валидности часто требуется timestamp; без неё нельзя гарантировать, что подпись была создана до отзыва ключа.
- Подпись приложена к другому документу. Иногда злоумышленники берут действительную подпись от одного файла и прикрепляют её к другому, надеясь на невнимательность проверяющего.
Практический порядок действий по выявлению подделки
Ниже представлен пошаговый алгоритм, который можно выполнить с помощью widely used инструментов (OpenSSL, GnuPG, Adobe Acrobat, специализированные библиотеки вроде Bouncy Castle или .NET System.Security.Cryptography).
- Соберите все компоненты. Извлеките подпись, подписанные данные и сертификат (если он не встроен в подпись). Для форматов PDF, XML, CMS/PKCS#7 это делается соответствующими парсерами.
- Проверьте срок действия сертификата. Убедитесь, что текущая дата находится между полями NotBefore и NotAfter.
- Проверьте отзыв. Запросите статус через OCSP или скачайте последний CRL от издающего ЦС. Если статус — отозван, подпись считается ненадёжной.
- Построение цепочки доверия. Начните с сертификата подписанта и последовательно проверяйте каждый промежуточный ЦС до корневого, который должен присутствовать в доверенном хранилище ОС или приложения.
- Вычислите хеш. Выберите алгоритм, указанный в атрибуте подписи (чаще всего SHA‑256 или SHA‑384). Примените его к данным и получите дайджест.
- Расшифруйте подпись. Используя открытый ключ из сертификата, выполните операцию, обратную той, что использовалась при подписи (например, RSA decrypt или ECDSA verify).
- Сравните результаты. Если полученный дайджест совпадает с расшифрованным значением — подпись верна. Любое несовпадение указывает на подделку или изменение данных.
- Проверьте метку времени (если есть). Повторите шаги 2‑5 для сертификата TSA и убедитесь, что timestamp сама по себе валидна и не отозвана.
- Оцените криптографическую стойкость. Убедитесь, что алгоритм хеширования и длина ключа соответствуют текущим рекомендациям (например, SHA‑256 и RSA ≥2048 бит или ECDSA ≥256 бит).
На каждом этапе полезно фиксировать промежуточные результаты: если проверка цепочки доверия провалилась, нет смысла продолжать криптографическую проверку — подпись уже считается ненадёжной.
Ограничения и типичные ошибки при оценке подписи
Даже при выполнении всех шагов существуют ситуации, когда подделка остаётся незамеченной или, наоборот, правильная подпись отклоняется ложноположительно.
Что не может гарантировать проверка
- Подпись остаётся криптографически верной, если злоумышленник получил доступ к закрытому ключу подписанта. В этом случае подпись будет считаться подлинной, хотя и создана нелегитимным лицом.
- Атака типа «повторного использования» (replay): старая действительная подпись может быть применена к новому документу, если система не проверяет контекст или уникальность данных (например, номер транзакции).
- Подмена данных до вычисления хеша: если злоумышленник способен подменить как данные, так и подпись, проверка всё равно пройдёт, потому что подпись соответствует подделанным данным.
Типичные ошибки пользователей
- Доверие внешнему виду: считать, что подпись «выглядит официально» или содержит логотип компании достаточно для доверия.
- Игнорирование статуса отзыва: полагать, что сертификат действителен, пока не истёк срок, не проверяя CRL/OCSP.
- Использование устаревших криптобиблиотек, которые по умолчанию принимают слабые алгоритмы (MD5, RSA‑1024).
- Проверка только подписи без валидации цепочки доверия: сам по себе открытый ключ может быть поддельным.
- Отсутствие проверки метки времени в сценариях, где требуется долгосрочная валидность (например, архивные документы, контракты).
Рекомендации по повышению надёжности проверки
Чтобы минимизировать риск принятия поддельной подписи, следует выработать привычку выполнять следующие действия.
- Поддерживайте актуальное хранилище доверенных корневых сертификатов. Регулярно обновляйте его из официальных источников ОС или вендора ПО.
- Включите проверку отзыва по умолчанию. Настройте OCSP‑stapling или автоматическую загрузку CRL в используемых приложениях.
- Жёстко ограничьте допустимые алгоритмы. Отключите поддержку MD5, SHA‑1, RSA меньше 2048 бит, ECDSA меньше 224 бит на уровне политики безопасности.
- Для важных документов требуйте метку времени от аккредитованного TSA. Это защищает от атак, основанных на отзыве ключа после подписи.
- Ведите журнал проверок. Фиксируйте, какой сертификат использовался, результат проверки цепочки доверия, статус отвода и хеш алгоритма. Это упрощает расследование в случае спора.
- Обучайте сотрудников. Поясните, что визуальная inspekcия недостаточна, и продемонстрируйте, как запустить проверку в используемом корпоративном ПО.
Что делать дальше
Если после выполнения всех проверок подпись признана недействительной, следует:
- Изолировать документ или данные, чтобы предотвратить их дальнейшее использование в критических процессах.
- Уведомить ответственные службы (ИТ‑безопасность, юридический отдел) о возможной попытке подделки.
- Сохранить оригинальные файлы и журналы проверки для возможного последующего расследования.
- Если требуется легитимная версия документа, запросить её у проверенного источника и повторить проверку.
Если подпись прошла все проверки, но остаются сомнения (например, неизвестно, кто именно контролировал закрытый ключ), следует дополнительно уточнить контекст: кто должен был подписать документ, использовались ли аппаратные защищенные модули (HSM, смарт‑карта) и есть ли журналы операций с ключом.
Часто задаваемые вопросы (FAQ)
- Можно ли определить поддельную подпись, просто взглянув на файл?
- Нет. Криптографическая подпись не содержит визуальных признаков подлинности; её можно оценить только выполнив проверку с открытым ключом.
- Что делать, если сертификат подписанта отсутствует в хранилище доверия?
- Необходимо получить сертификат от надёжного источника (например, directly от организации‑подписанта или из публичного репозитория ЦС) и добавить его в доверенное хранилище перед проверкой.
- Достаточно ли проверки только срока действия сертификата?
- Нет. Срок действия — лишь один из факторов. Требуется также проверка цепочки доверия, статуса отзыва и соответствия алгоритма требованиям безопасности.
- Может ли подпись быть верной, если документ изменён после подписи?
- Нет. Любое изменение данных приводит к другому хешу, и криптографическая проверка завершится ошибкой.
- Нужен ли всегда метка времени (timestamp)?
- Для краткосрочных операций, где ключ точно не будет отозван в ближайшее время, метка времени может быть необязательной. Для архивных, юридических или финансовых документов, требующих долгосрочной валидности, timestamp настоятельно рекомендуется.
