怎样验证一张图的内容凭证
四种查看和验证 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 块。
验证时看什么
- 签名者是谁。证书主体写的是 Adobe Inc. 还是「C2PA Test Signing Cert」,差别很大。测试证书签出来的清单结构完全合法,但不代表任何人为它背书。
- 信任列表。CAI 维护一份已知签名者的列表。不在列表里的证书不一定是假的,但可信度要自己判断。
- 内容哈希是否匹配。清单里的
c2pa.hash.data与图片实际内容对得上,才说明图片自签名后没改过。 - 活动清单说了什么。多次编辑会产生多份清单,最后一份是活动清单,它的
c2pa.actions里会写明是c2pa.created还是c2pa.edited,来源类型是digitalCapture还是trainedAlgorithmicMedia。
常见结果
- 签名有效,签名者是相机厂商,来源类型 digitalCapture:相机直出。
- 签名有效,签名者是 OpenAI 或 Adobe,来源类型 trainedAlgorithmicMedia:AI 生成,而且生成方主动声明了。
- 签名有效,但素材来源里有一张 AI 生成的图:合成作品,要看具体动作。
- 清单存在但签名无效:图片在签名后被修改过,或清单被移植到了另一张图上。