Détection de la compromission de signature
Détection de la compromission de signature
SignaturesCompromiseDetector est le point d’entrée de ce guide: il examine l’historique des révisions d’un document signé à la recherche d’indicateurs indiquant que du contenu a été ajouté après l’application de la dernière signature, et rapporte ce qu’il trouve sous la forme d’un CompromiseCheckResult. Il s’agit de la surface de sécurité couverte par ce groupe de la base de connaissances — il ne couvre pas la création ou l’application de signatures, ni le chiffrement de documents; il ne fait qu’examiner les signatures déjà présentes sur un document.
Exécution d’une vérification de compromission
Construisez SignaturesCompromiseDetector avec le document que vous souhaitez inspecter, puis appelez SignaturesCompromiseDetector.check(). La vérification parcourt chaque signature déjà présente sur le document et recherche des octets non signés ajoutés après la dernière révision signée — un signe que du contenu a pu être superposé par la suite — tout en tolérant le matériel de validation à long terme légitime (tel qu’un magasin de sécurité de document ou un horodatage d’archive) ajouté par une signature ultérieure de couverture.
Interprétation du résultat
SignaturesCompromiseDetector.check() renvoie un CompromiseCheckResult avec quatre propriétés:
CompromiseCheckResult.has_compromised_signatures—Truesi une signature a indiqué une altération.CompromiseCheckResult.compromised— reflèteCompromiseCheckResult.has_compromised_signatures, fourni comme alias de commodité en lecture seule.CompromiseCheckResult.signatures_coverage— le nombre de signatures que le détecteur a examinées sur le document.CompromiseCheckResult.reasons— une liste de courtes chaînes décrivant pourquoi le document a été signalé, quand cela s’est produit.
Un document sans signatures, ou aucun document du tout, est signalé comme non compromis, avec CompromiseCheckResult.signatures_coverage égal à 0.
Conseils et bonnes pratiques
- Considérez
CompromiseCheckResult.compromisedetCompromiseCheckResult.has_compromised_signaturescomme interchangeables — ils rapportent toujours la même valeur. - Vérifiez
CompromiseCheckResult.signatures_coverageavant de faire confiance à un résultatFalse: une couverture de0signifie que le détecteur n’a trouvé aucune signature à examiner, et non que les signatures existantes ont été vérifiées comme intactes. - Lisez
CompromiseCheckResult.reasonslorsqueCompromiseCheckResult.has_compromised_signaturesestTrue— la liste explique quelle heuristique a été déclenchée, ce qui est utile lors de la journalisation ou de la présentation du résultat à un examinateur. SignaturesCompromiseDetectorexamine l’historique des révisions à la recherche d’indicateurs de falsification; il ne valide pas lui-même l’intégrité de la signature cryptographique, il faut donc le coupler aux résultats de validation de signature du document lorsque cela compte dans votre flux de travail.
Problèmes courants
| Problème | Cause | Correction |
|---|---|---|
CompromiseCheckResult.signatures_coverage est 0 pour un document que vous savez être signé | SignaturesCompromiseDetector a été construit sans document, ou l’objet document n’a aucune signature accessible | Confirmez que le document passé à SignaturesCompromiseDetector expose ses signatures avant d’appeler SignaturesCompromiseDetector.check() |
CompromiseCheckResult.reasons est vide même si vous attendiez une explication | CompromiseCheckResult.has_compromised_signatures est False pour ce document | Les raisons ne sont renseignées que lorsqu’un indicateur de compromission a réellement été trouvé ; une liste vide sur un résultat propre est attendue |
| Un PDF légitimement mis à jour (p. ex. avec un horodatage de validation à long terme ajouté) est signalé comme compromis | L’ajout ultérieur n’est pas entièrement couvert par une signature subséquente ou n’est pas reconnu comme un matériau uniquement de validation | Rexécutez la vérification après avoir confirmé que la mise à jour a été effectuée par une signature ou un horodatage de couverture approprié, et inspectez CompromiseCheckResult.reasons pour le déclencheur spécifique |
FAQ
Qu’est-ce que CompromiseCheckResult.compromised vérifie réellement?
Il rapporte la même valeur que CompromiseCheckResult.has_compromised_signatures: si SignaturesCompromiseDetector.check() a trouvé un indicateur de falsification dans les signatures du document.
Un signatures_coverage de 0 signifie-t-il que le document est sûr?
Non — cela signifie qu’aucune signature n’a été trouvée pour être examinée. SignaturesCompromiseDetector ne peut pas rendre compte des signatures qu’il ne voit pas, donc une couverture de 0 est un résultat «rien à vérifier», et non une confirmation d’intégrité.
SignaturesCompromiseDetector peut-il créer ou vérifier une signature cryptographique?
Non. Il ne fait qu’examiner l’historique des révisions existant d’un document à la recherche d’indications selon lesquelles du contenu a été ajouté après la dernière signature. Créer, appliquer ou valider cryptographiquement des signatures dépasse le cadre de ce que fait cette classe.
L’ajout d’un horodatage légitime après la signature déclenchera-t-il toujours une détection de compromission?
Pas nécessairement. Le détecteur est conçu pour tolérer une addition ultérieure qui est elle-même couverte par une signature subséquente, ou qui ne fait qu’ajouter du matériel de validation plutôt que du nouveau contenu. Consultez CompromiseCheckResult.reasons si vous voyez une détection inattendue.
API Reference Résumé
| Classe/Méthode | Description |
|---|---|
SignaturesCompromiseDetector | Inspecte un document signé à la recherche d’indicateurs de falsification après la dernière signature |
SignaturesCompromiseDetector.check() | Exécute la vérification et renvoie un CompromiseCheckResult |
CompromiseCheckResult | Le résultat d’une vérification de compromission |
CompromiseCheckResult.compromised | Alias en lecture seule pour CompromiseCheckResult.has_compromised_signatures |
CompromiseCheckResult.has_compromised_signatures | Indique si un indicateur de falsification a été trouvé |
CompromiseCheckResult.signatures_coverage | Le nombre de signatures examinées |
CompromiseCheckResult.reasons | Courtes chaînes expliquant toute découverte |