Виявлення компрометації підпису

Виявлення компрометації підпису

Виявлення компрометації підпису

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Короткі рядки, що пояснюють будь-яке виявлення

Дивіться також

 Українська