Обнаружение компрометации подписи

Обнаружение компрометации подписи

Обнаружение компрометации подписи

SignaturesCompromiseDetector является точкой входа в это руководство: он проверяет историю ревизий подписанного документа на наличие признаков того, что содержимое было добавлено после применения последней подписи, и сообщает о найденном как CompromiseCheckResult. Это область безопасности, охваченная этим кластером базы знаний — она не охватывает создание или применение подписей, а также шифрование документов; она только проверяет подписи, уже существующие в документе.


Запуск проверки компрометации

Создайте SignaturesCompromiseDetector с документом, который вы хотите проверить, затем вызовите SignaturesCompromiseDetector.check(). Проверка проходит по каждой подписи, уже присутствующей в документе, и ищет неподписанные байты, добавленные после последней подписанной ревизии — признак того, что содержимое могло быть добавлено позже — при этом допускает легитимный материал долгосрочной валидации (например, хранилище безопасности документа или метку времени архива), добавленный более поздней покрывающей подписью.


Интерпретация результата

SignaturesCompromiseDetector.check() возвращает CompromiseCheckResult с четырьмя свойствами:

  • CompromiseCheckResult.has_compromised_signatures — True, если какая-либо подпись показала индикатор подделки.
  • CompromiseCheckResult.compromised — зеркалирует CompromiseCheckResult.has_compromised_signatures, предоставлен как удобный алиас только для чтения.
  • CompromiseCheckResult.signatures_coverage — количество подписей, которые детектор проверил в документе.
  • CompromiseCheckResult.reasons — список коротких строк, описывающих причину пометки документа, когда это происходило.

Документ без подписей или вовсе отсутствующий документ считается не скомпрометированным, при этом CompromiseCheckResult.signatures_coverage равно 0.


Советы и лучшие практики

  • Считайте CompromiseCheckResult.compromised и CompromiseCheckResult.has_compromised_signatures взаимозаменяемыми — они всегда отображают одно и то же значение.
  • Проверьте CompromiseCheckResult.signatures_coverage перед тем как доверять результату False: покрытие 0 означает, что детектор не нашёл подписей для проверки, а не то, что существующие подписи были подтверждены как целостные.
  • Читайте CompromiseCheckResult.reasons, когда CompromiseCheckResult.has_compromised_signatures равно True — список объясняет, какая эвристика сработала, что полезно при журналировании или представлении результата проверяющему.
  • SignaturesCompromiseDetector проверяет историю ревизий на наличие признаков вмешательства; он сам не проверяет целостность криптографической подписи, поэтому сочетайте его с результатами проверки подписи самого документа там, где это важно для вашего рабочего процесса.

Распространённые проблемы

ПроблемаПричинаИсправление
CompromiseCheckResult.signatures_coverage является 0 для документа, который, как вы знаете, подписанSignaturesCompromiseDetector был построен без документа, или объект документа не имеет доступных подписейУбедитесь, что документ, переданный в SignaturesCompromiseDetector, содержит подписи, прежде чем вызывать SignaturesCompromiseDetector.check()
CompromiseCheckResult.reasons пуст, хотя вы ожидали объяснениеCompromiseCheckResult.has_compromised_signatures является False для этого документаПричины заполняются только тогда, когда действительно найден индикатор компрометации; пустой список в случае чистого результата ожидается
Законно обновлённый PDF (например, с добавленной меткой времени длительной валидации) помечается как скомпрометированныйПоследующее добавление не полностью покрыто последующей подписью или не распознаётся как материал только для валидацииПовторно запустите проверку после подтверждения, что обновление было выполнено корректной покрывающей подписью или меткой времени, и проверьте CompromiseCheckResult.reasons на наличие конкретного триггера

FAQ

Что именно проверяет CompromiseCheckResult.compromised?

Он сообщает то же значение, что и CompromiseCheckResult.has_compromised_signatures: найден ли SignaturesCompromiseDetector.check() какой-либо индикатор вмешательства в подписи документа.

Означает ли signatures_coverage со значением 0, что документ безопасен?

Нет — это значит, что подписи для проверки не найдены. SignaturesCompromiseDetector не может сообщать о подписьах, которые он не видит, поэтому покрытие 0 представляет собой результат “nothing to check”, а не подтверждение целостности.

Может ли SignaturesCompromiseDetector создавать или проверять криптографическую подпись?

Нет. Он проверяет только существующую историю ревизий документа на наличие признаков того, что контент был добавлен после последней подписи. Создание, применение или криптографическая проверка подписей находятся за пределами того, что делает этот класс.

Будет ли добавление действительного временного штампа после подписи всегда вызывать обнаружение компрометации?

Не обязательно. Детектор разработан так, чтобы терпеть более позднее добавление, которое само покрывается последующей подписью, или которое добавляет только проверочный материал, а не новый контент. Проверьте CompromiseCheckResult.reasons, если вы увидите неожиданное обнаружение.


API Reference Сводка

Класс/МетодОписание:
SignaturesCompromiseDetectorПроверяет подписанный документ на признаки подделки после последней подписи
SignaturesCompromiseDetector.check()Запускает проверку и возвращает CompromiseCheckResult
CompromiseCheckResultРезультат проверки компрометации
CompromiseCheckResult.compromisedТолько для чтения псевдоним для CompromiseCheckResult.has_compromised_signatures
CompromiseCheckResult.has_compromised_signaturesБыл ли найден индикатор вмешательства
CompromiseCheckResult.signatures_coverageКоличество проверенных подписей
CompromiseCheckResult.reasonsКраткие строки, объясняющие любое обнаружение

См. также:

 Русский