C2PA 凭证吊销:如何核查已吊销的签名证书
保存文件与验证工具的完整输出
先保存本次核查的原文件,再用兼容 C2PA 的验证工具打开。记录取得页面、取得时间、文件名、验证工具名称和版本,保留包括 informational 与 failure code 在内的完整输出。这套记录方法是本文提出的操作流程,不是 C2PA 规定的表格。
本次只核查验证器对签名者证书和 trust chain 中 CA 证书确认的吊销状态。证书状态只是 claim signature 验证的一部分,不能证明媒体的拍摄时间、配文、画面事件或是否由 AI 生成。
分开核查 CA 证书与签名者证书
C2PA 2.2 要求验证器尝试查明签名者证书,以及 trust chain 中所有 CA 证书的吊销状态。核查 CA 证书时,规范指向 Authority Information Access extension;如果 AIA 表示可以使用 OCSP,验证器应利用 C2PA Manifest 中相关的 OCSP response。
如果 CA 证书在可信 time-stamp 标示的时间已经吊销,或没有可信 time-stamp 时在当前时间已经吊销,claim signature 会以 signingCredential.untrusted 被拒绝。记录结果对应哪张证书、采用哪个时间基准和确切状态,不要把 CA chain 失败与签名者证书结果压缩成一个红色标记。
签名者证书采用另一套顺序。证书不支持吊销状态,或签发方没有提供查询方法时,C2PA 规范要求按 not revoked 处理。这不等于 responder 刚刚确认状态为 good,因此还要保留验证工具展示的理由。
追踪 OCSP 证据与时间基准
Claim generator 可以把 OCSP response stapling 到 COSE_Sign1 结构的 rVals header。后续 claim generator 也可以在同一 C2PA Manifest Store 的其他 manifest 中加入 certificate status assertion。找到多个 response 时,规范要求逐个尝试,直到其中一个通过 validation,再忽略其余 response。
使用 Manifest Store 内的 OCSP response 时,要同时检查 RFC 6960 response 是否可接受、responder 是否得到授权、证书状态和时间条件。C2PA 把 removeFromCRL 按 good 处理,因为它表示之前的 certificate hold 已解除。满足条件的未吊销结果产生 signingCredential.ocsp.notRevoked;签名时已吊销则产生 signingCredential.ocsp.revoked,并拒绝 claim。不要把二者都简写成“已检查 OCSP”。
Manifest Store 没有可用吊销信息时,在线验证器可以查询 OCSP responder。该查询可能向外部观察者暴露正在验证的资产身份,所以规范把它设为可选。跳过查询会产生 signingCredential.ocsp.skipped;尝试查询但收不到 response 会产生 signingCredential.ocsp.inaccessible。这两项都是 informational code,不能改写成已确认吊销。
分开记录凭证信任、检测与事件核查
把 skipped、inaccessible 或未显示的细节当成“已吊销”,会造成错误警报。只看到 manifest 存在就忽略 untrusted 或 ocsp.revoked,又可能漏掉实际的 trust 问题。Unknown、informational、success、failure 结果以及判断所用时间,应分别保留。
如果还把文件提交到 DeepFakeCheck 媒体风险检测,应将概率性结果放在记录的独立区域。自动检测可能误报真实媒体,也可能漏报合成或修改媒体。它不会签发 C2PA OCSP code、验证证书链或修复失败的 signature。
现实主张仍需核对原始发布页面、展示文件的账号或机构、声称的日期地点,以及事件本身的独立证据。最后保存文件编号、验证工具与版本、证书角色、OCSP 来源、时间基准、确切状态码、未解决字段、另行检测的输出和实际处置。
来源
- C2PA《C2PA Technical Specification — Validate the Credential Revocation Information》:https://spec.c2pa.org/specifications/specifications/2.2/specs/C2PA_Specification.html#_validate_the_credential_revocation_information