Как определить поддельную цифровую подпись

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

Как работает проверка цифровой подписи

Для успешной проверки необходимо выполнить несколько взаимосвязанных шагов:

  1. Получить исходные данные, которые были подписаны, и саму подпись (обычно в виде отдельного блока или атрибута файла).
  2. Извлечь сертификат подписанта, содержащий открытый ключ и информацию о владельце.
  3. Проверить цепочку доверия сертификата: убедиться, что он выдан доверенным центром сертификации (ЦС), не просрочен и не отозван.
  4. Вычислить хеш исходных данных тем же алгоритмом, который использовался при создании подписи.
  5. Расшифровать подпись открытым ключом и сравнить полученное значение с вычисленным хешем. Если они совпадают — подпись верна.
  6. При наличии метки времени (timestamp) проверить, что она была создана доверенным органом Timestamping Authority (TSA) и что данные не были изменены после указанного момента.

Если любой из этих пунктов не выполняется, подпись считается недействительной или подозрительной.

Основные признаки поддельной цифровой подписи

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

  • Ошибка криптографической проверки. Расшифрованная подпись не совпадает с хешем данных — явный признак того, что подпись создана другим ключом или данные были изменены после подписи.
  • Сертификат не доверен. Отсутствует цепочка доверия к корневому ЦС, который присутствует в доверенном хранилище пользователя.
  • Сертификат просрочен или отозван. Дата окончания действия прошла, либо статус в CRL/OCSP указывает на отзыв.
  • Использован устаревший или слабый алгоритм. Например, подпись создана с использованием MD5 или RSA с ключом меньше 2048 бит, что считается небезопасным.
  • Несоответствие метаданных. В подписи указано одно имя организации, а в сертификате — другое, либо поля subject и issuer явно противоречат ожидаемому подписанту.
  • Отсутствие метки времени при необходимости. Для долгосрочной валидности часто требуется timestamp; без неё нельзя гарантировать, что подпись была создана до отзыва ключа.
  • Подпись приложена к другому документу. Иногда злоумышленники берут действительную подпись от одного файла и прикрепляют её к другому, надеясь на невнимательность проверяющего.

Практический порядок действий по выявлению подделки

Ниже представлен пошаговый алгоритм, который можно выполнить с помощью widely used инструментов (OpenSSL, GnuPG, Adobe Acrobat, специализированные библиотеки вроде Bouncy Castle или .NET System.Security.Cryptography).

  1. Соберите все компоненты. Извлеките подпись, подписанные данные и сертификат (если он не встроен в подпись). Для форматов PDF, XML, CMS/PKCS#7 это делается соответствующими парсерами.
  2. Проверьте срок действия сертификата. Убедитесь, что текущая дата находится между полями NotBefore и NotAfter.
  3. Проверьте отзыв. Запросите статус через OCSP или скачайте последний CRL от издающего ЦС. Если статус — отозван, подпись считается ненадёжной.
  4. Построение цепочки доверия. Начните с сертификата подписанта и последовательно проверяйте каждый промежуточный ЦС до корневого, который должен присутствовать в доверенном хранилище ОС или приложения.
  5. Вычислите хеш. Выберите алгоритм, указанный в атрибуте подписи (чаще всего SHA‑256 или SHA‑384). Примените его к данным и получите дайджест.
  6. Расшифруйте подпись. Используя открытый ключ из сертификата, выполните операцию, обратную той, что использовалась при подписи (например, RSA decrypt или ECDSA verify).
  7. Сравните результаты. Если полученный дайджест совпадает с расшифрованным значением — подпись верна. Любое несовпадение указывает на подделку или изменение данных.
  8. Проверьте метку времени (если есть). Повторите шаги 2‑5 для сертификата TSA и убедитесь, что timestamp сама по себе валидна и не отозвана.
  9. Оцените криптографическую стойкость. Убедитесь, что алгоритм хеширования и длина ключа соответствуют текущим рекомендациям (например, SHA‑256 и RSA ≥2048 бит или ECDSA ≥256 бит).

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

Ограничения и типичные ошибки при оценке подписи

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

Что не может гарантировать проверка

  • Подпись остаётся криптографически верной, если злоумышленник получил доступ к закрытому ключу подписанта. В этом случае подпись будет считаться подлинной, хотя и создана нелегитимным лицом.
  • Атака типа «повторного использования» (replay): старая действительная подпись может быть применена к новому документу, если система не проверяет контекст или уникальность данных (например, номер транзакции).
  • Подмена данных до вычисления хеша: если злоумышленник способен подменить как данные, так и подпись, проверка всё равно пройдёт, потому что подпись соответствует подделанным данным.

Типичные ошибки пользователей

  • Доверие внешнему виду: считать, что подпись «выглядит официально» или содержит логотип компании достаточно для доверия.
  • Игнорирование статуса отзыва: полагать, что сертификат действителен, пока не истёк срок, не проверяя CRL/OCSP.
  • Использование устаревших криптобиблиотек, которые по умолчанию принимают слабые алгоритмы (MD5, RSA‑1024).
  • Проверка только подписи без валидации цепочки доверия: сам по себе открытый ключ может быть поддельным.
  • Отсутствие проверки метки времени в сценариях, где требуется долгосрочная валидность (например, архивные документы, контракты).

Рекомендации по повышению надёжности проверки

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

  • Поддерживайте актуальное хранилище доверенных корневых сертификатов. Регулярно обновляйте его из официальных источников ОС или вендора ПО.
  • Включите проверку отзыва по умолчанию. Настройте OCSP‑stapling или автоматическую загрузку CRL в используемых приложениях.
  • Жёстко ограничьте допустимые алгоритмы. Отключите поддержку MD5, SHA‑1, RSA меньше 2048 бит, ECDSA меньше 224 бит на уровне политики безопасности.
  • Для важных документов требуйте метку времени от аккредитованного TSA. Это защищает от атак, основанных на отзыве ключа после подписи.
  • Ведите журнал проверок. Фиксируйте, какой сертификат использовался, результат проверки цепочки доверия, статус отвода и хеш алгоритма. Это упрощает расследование в случае спора.
  • Обучайте сотрудников. Поясните, что визуальная inspekcия недостаточна, и продемонстрируйте, как запустить проверку в используемом корпоративном ПО.

Что делать дальше

Если после выполнения всех проверок подпись признана недействительной, следует:

  1. Изолировать документ или данные, чтобы предотвратить их дальнейшее использование в критических процессах.
  2. Уведомить ответственные службы (ИТ‑безопасность, юридический отдел) о возможной попытке подделки.
  3. Сохранить оригинальные файлы и журналы проверки для возможного последующего расследования.
  4. Если требуется легитимная версия документа, запросить её у проверенного источника и повторить проверку.

Если подпись прошла все проверки, но остаются сомнения (например, неизвестно, кто именно контролировал закрытый ключ), следует дополнительно уточнить контекст: кто должен был подписать документ, использовались ли аппаратные защищенные модули (HSM, смарт‑карта) и есть ли журналы операций с ключом.

Часто задаваемые вопросы (FAQ)

  • Можно ли определить поддельную подпись, просто взглянув на файл?
  • Нет. Криптографическая подпись не содержит визуальных признаков подлинности; её можно оценить только выполнив проверку с открытым ключом.
  • Что делать, если сертификат подписанта отсутствует в хранилище доверия?
  • Необходимо получить сертификат от надёжного источника (например, directly от организации‑подписанта или из публичного репозитория ЦС) и добавить его в доверенное хранилище перед проверкой.
  • Достаточно ли проверки только срока действия сертификата?
  • Нет. Срок действия — лишь один из факторов. Требуется также проверка цепочки доверия, статуса отзыва и соответствия алгоритма требованиям безопасности.
  • Может ли подпись быть верной, если документ изменён после подписи?
  • Нет. Любое изменение данных приводит к другому хешу, и криптографическая проверка завершится ошибкой.
  • Нужен ли всегда метка времени (timestamp)?
  • Для краткосрочных операций, где ключ точно не будет отозван в ближайшее время, метка времени может быть необязательной. Для архивных, юридических или финансовых документов, требующих долгосрочной валидности, timestamp настоятельно рекомендуется.
PEFile.ru