Виявлення компрометації підпису
Виявлення компрометації підпису
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 є результатом «нічого не перевіряти», а не підтвердженням цілісності.
Чи може 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 | Короткі рядки, що пояснюють будь-яке виявлення |