检测签名泄露
检测签名妥协
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.check() 之前,请确认传递给 SignaturesCompromiseDetector 的文档公开了其签名 |
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 | 简短字符串解释任何发现 |