Обнаружение компрометации подписи
Обнаружение компрометации подписи
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 | Краткие строки, объясняющие любое обнаружение |