指南

怎样验证一张图的内容凭证

四种查看和验证 C2PA 清单的方法,从浏览器一键到命令行深挖,各自能看到什么、看不到什么。

方法一:在线工具

把图片拖进 AuditImage 首页,几秒后就能看到清单的生成者、签名者证书、操作记录和素材来源。AuditImage 解析完整的 JUMBF 结构,包括 CBOR 编码的断言,校验签名、内容哈希绑定、断言哈希和证书链(对照 C2PA 信任列表),也会把 C2PA 和 EXIF、XMP 放在一起交叉比对。时间戳令牌只记录存在,不校验。

需要严格验证签名时,用 verify.contentauthenticity.org。它是 CAI 官方站,会校验签名、证书链和内容哈希,并显示信任列表状态。

方法二:浏览器扩展

Chrome 商店里有「C2PA Content Credentials」扩展,右键任意网页图片就能查看。Chrome 自身也在把 C2PA 校验内置到浏览器和 Google 搜索中,带凭证的图会显示标签。

方法三:命令行

c2patool 是 C2PA 的参考实现,Rust 编写,跨平台:

c2patool photo.jpg              # 清单摘要 JSON
c2patool photo.jpg --detailed   # 断言、素材、哈希绑定、签名校验结果
c2patool photo.jpg --tree       # 清单树

exiftool 也能读 JUMBF:

exiftool -a -G1 -s -JUMBF:all photo.jpg
exiftool -v3 photo.jpg | grep APP11   # 确认 APP11 段存在及是否分片

方法四:自己读字节

JPEG 里,C2PA 清单在 APP11 段(标记 FF EB)。段内容以 JP 开头,后面是 2 字节盒实例号、4 字节分片序号,然后是 JUMBF 盒子的长度和类型 jumb。清单超过 64 KB 时会拆成多个 APP11 段,按分片序号拼接。PNG 里直接读 caBX 块。

验证时看什么

  1. 签名者是谁。证书主体写的是 Adobe Inc. 还是「C2PA Test Signing Cert」,差别很大。测试证书签出来的清单结构完全合法,但不代表任何人为它背书。
  2. 信任列表。CAI 维护一份已知签名者的列表。不在列表里的证书不一定是假的,但可信度要自己判断。
  3. 内容哈希是否匹配。清单里的 c2pa.hash.data 与图片实际内容对得上,才说明图片自签名后没改过。
  4. 活动清单说了什么。多次编辑会产生多份清单,最后一份是活动清单,它的 c2pa.actions 里会写明是 c2pa.created 还是 c2pa.edited,来源类型是 digitalCapture 还是 trainedAlgorithmicMedia。

常见结果

  • 签名有效,签名者是相机厂商,来源类型 digitalCapture:相机直出。
  • 签名有效,签名者是 OpenAI 或 Adobe,来源类型 trainedAlgorithmicMedia:AI 生成,而且生成方主动声明了。
  • 签名有效,但素材来源里有一张 AI 生成的图:合成作品,要看具体动作。
  • 清单存在但签名无效:图片在签名后被修改过,或清单被移植到了另一张图上。