Wykrywanie naruszenia podpisu
Wykrywanie kompromisu podpisu
SignaturesCompromiseDetector jest punktem wejścia do tego przewodnika: przegląda historię wersji podpisanego dokumentu w poszukiwaniu wskazań, że treść została dodana po zastosowaniu ostatniego podpisu, i zgłasza to, co znajdzie, jako CompromiseCheckResult. To jest zakres bezpieczeństwa objęty tym klastrem bazy wiedzy — nie obejmuje tworzenia ani stosowania podpisów ani szyfrowania dokumentów; analizuje jedynie podpisy, które już istnieją w dokumencie.
Uruchamianie kontroli kompromisu
Konstrukcja SignaturesCompromiseDetector z dokumentem, który chcesz zbadać, a następnie wywołanie SignaturesCompromiseDetector.check(). Kontrola przegląda każdy podpis już obecny w dokumencie i szuka niepodpisanych bajtów dołączonych po ostatniej podpisanej wersji — znak, że treść mogła zostać później nałożona — jednocześnie tolerując legalny materiał długoterminowej weryfikacji (tak jak magazyn zabezpieczeń dokumentu lub znacznik czasu archiwum) dodany przez późniejszy, obejmujący podpis.
Interpretacja wyniku
SignaturesCompromiseDetector.check() zwraca CompromiseCheckResult z czterema właściwościami:
CompromiseCheckResult.has_compromised_signatures—True, jeśli którykolwiek podpis wykazał wskaźnik manipulacji.CompromiseCheckResult.compromised— odzwierciedlaCompromiseCheckResult.has_compromised_signatures, udostępniony jako alias tylko do odczytu dla wygody.CompromiseCheckResult.signatures_coverage— liczba podpisów, które detektor zbadał w dokumencie.CompromiseCheckResult.reasons— lista krótkich ciągów opisujących, dlaczego dokument został oznaczony, oraz kiedy to nastąpiło.
Dokument bez podpisów, lub brak dokumentu, jest zgłaszany jako nie naruszony, przy czym CompromiseCheckResult.signatures_coverage jest równe 0.
Wskazówki i najlepsze praktyki
- Traktuj
CompromiseCheckResult.compromisediCompromiseCheckResult.has_compromised_signaturesjako wymienne — zawsze raportują tę samą wartość. - Sprawdź
CompromiseCheckResult.signatures_coverageprzed zaufaniem wynikowiFalse: pokrycie0oznacza, że detektor nie znalazł podpisów do zbadania, a nie że istniejące podpisy zostały zweryfikowane jako nienaruszone. - Przeczytaj
CompromiseCheckResult.reasons, gdyCompromiseCheckResult.has_compromised_signatureswynosiTrue— lista wyjaśnia, która heurystyka została uruchomiona, co jest przydatne przy logowaniu lub prezentowaniu wyniku recenzentowi. SignaturesCompromiseDetectorsprawdza historię wersji pod kątem wskaźników manipulacji; nie weryfikuje samodzielnie integralności podpisu kryptograficznego, dlatego połącz go z wynikami weryfikacji podpisu dokumentu tam, gdzie ma to znaczenie w twoim przepływie pracy.
Typowe problemy
| Problem | Przyczyna | Rozwiązanie |
|---|---|---|
CompromiseCheckResult.signatures_coverage jest 0 dla dokumentu, o którym wiesz, że jest podpisany | SignaturesCompromiseDetector został utworzony bez dokumentu lub obiekt dokumentu nie ma dostępnych podpisów | Upewnij się, że dokument przekazany do SignaturesCompromiseDetector udostępnia swoje podpisy przed wywołaniem SignaturesCompromiseDetector.check() |
CompromiseCheckResult.reasons jest pusty, mimo że oczekiwałeś wyjaśnienia | CompromiseCheckResult.has_compromised_signatures jest False dla tego dokumentu | Powody są wypełniane tylko wtedy, gdy faktycznie wykryto wskaźnik naruszenia; pustą listę w wyniku czystym należy się spodziewać |
| Legalnie zaktualizowany PDF (np. z dodanym znacznikiem czasu długoterminowej weryfikacji) jest oznaczony jako naruszony | Późniejsze dodanie nie jest w pełni objęte późniejszym podpisem lub nie jest rozpoznawane jako materiał jedynie do weryfikacji | Uruchom ponownie sprawdzenie po potwierdzeniu, że aktualizacja została dokonana przy użyciu właściwego podpisu pokrywającego lub znacznika czasu, i sprawdź CompromiseCheckResult.reasons pod kątem konkretnego wyzwalacza |
FAQ
Co tak naprawdę sprawdza CompromiseCheckResult.compromised?
Zgłasza tę samą wartość co CompromiseCheckResult.has_compromised_signatures: czy SignaturesCompromiseDetector.check() wykryło jakikolwiek wskaźnik manipulacji w podpisach dokumentu.
Czy signatures_coverage o wartości 0 oznacza, że dokument jest bezpieczny?
Nie — oznacza to, że nie znaleziono podpisów do zbadania. SignaturesCompromiseDetector nie może raportować o podpisach, których nie widzi, więc pokrycie 0 jest wynikiem „nothing to check”, a nie potwierdzeniem integralności.
Czy SignaturesCompromiseDetector może tworzyć lub weryfikować podpis kryptograficzny?
Nie. Sprawdza jedynie istniejącą historię wersji dokumentu pod kątem wskazań, że treść została dodana po ostatnim podpisie. Tworzenie, stosowanie lub kryptograficzne weryfikowanie podpisów wykracza poza zakres działania tej klasy.
Czy dodanie legalnego znacznika czasu po podpisaniu zawsze wywoła wykrycie naruszenia?
Niekoniecznie. Wykrywacz jest zaprojektowany tak, aby tolerować późniejsze dodatki, które są objęte kolejnym podpisem, lub które dodają jedynie materiały weryfikacyjne, a nie nową treść. Sprawdź CompromiseCheckResult.reasons, jeśli napotkasz nieoczekiwane wykrycie.
API Reference Podsumowanie
| Klasa/Metoda | Opis |
|---|---|
SignaturesCompromiseDetector | Sprawdza podpisany dokument pod kątem wskaźników manipulacji po ostatnim podpisie |
SignaturesCompromiseDetector.check() | Uruchamia sprawdzenie i zwraca CompromiseCheckResult |
CompromiseCheckResult | Wynik sprawdzenia kompromisu |
CompromiseCheckResult.compromised | Alias w trybie tylko do odczytu dla CompromiseCheckResult.has_compromised_signatures |
CompromiseCheckResult.has_compromised_signatures | Czy wykryto wskaźnik manipulacji |
CompromiseCheckResult.signatures_coverage | Liczba sprawdzonych podpisów |
CompromiseCheckResult.reasons | Krótkie ciągi wyjaśniające każde znalezisko |