署名侵害の検出
署名の侵害検出
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を互換的に扱ってください — 常に同じ値を報告します。Falseの結果を信頼する前にCompromiseCheckResult.signatures_coverageを確認してください — カバレッジが0であるということは、検出器が調査すべき署名を見つけられなかったことを意味し、既存の署名が無傷であると検証されたことを意味するわけではありません。CompromiseCheckResult.has_compromised_signaturesがTrueのときはCompromiseCheckResult.reasonsを参照してください — リストはどのヒューリスティックがトリガーされたかを説明し、ログ記録やレビュー担当者への結果提示時に役立ちます。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 | 発見内容を説明する短い文字列 |