拿一张从 Photoshop 导出的图,用十六进制编辑器打开,往文件头后面翻几十个字节,你会看到一段 jumbc2paurn:uuid: 混着 JSON 和一坨二进制签名的东西。那是 C2PA 内容凭证。它记录了这张图从哪来、经过谁的手、动过什么。

这套标准背后是内容来源与真实性联盟(Coalition for Content Provenance and Authenticity),Adobe、微软、索尼、尼康、莱卡、BBC 等一批公司在推。目标很直接:给数字内容做一条可验证的履历链,对抗深度伪造和无授权盗用。目标本身是好的,代价也是真的。

清单里装着什么

"C2PA 内容凭证是什么:从相机到 AI 生图的溯源链" — visual 1
清单里装着什么

C2PA 的核心数据结构叫 manifest(清单)。一个清单包含几类东西:

Assertions(断言)——具体的事实陈述。比如"这张图由 Canon EOS R5 于某时某地拍摄"、"使用 Adobe Photoshop 26.0 编辑"、"应用了裁剪和色阶调整"、"由某某模型生成,提示词为……"。生成式 AI 工具通常会写入一条专门的断言,标明内容是 AI 产出。

Claim(声明)——把所有断言打包,加上生成这个清单的软件标识。

Claim Signature(签名)——用证书对 claim 做密码学签名。验证方可以据此确认清单没被篡改,以及签发者是谁。信任链依赖 C2PA 维护的证书列表。

Ingredients(成分)——如果这张图是从别的素材编辑来的,原素材的清单会作为 ingredient 嵌套进来。这就形成了链:原始拍摄 → 一次编辑 → 二次合成,每一层都留着。

每次编辑,新的清单会追加而不是覆盖,所以一个文件里可能有好几个清单串在一起,构成完整的编辑史。

它藏在文件的哪个位置

"C2PA 内容凭证是什么:从相机到 AI 生图的溯源链" — visual 2
它藏在文件的哪个位置

这部分值得讲具体,因为它决定了"删掉"是什么操作。

JPEG:清单放在 APP11 应用标记段里,用 JUMBF(JPEG Universal Metadata Box Format,ISO/IEC 19566-5)容器封装。JUMBF 是个盒子结构,跟 MP4 的 box 是同一个思路——每个 box 有长度、类型标识(比如 jumbjumdjsoncbor),可以嵌套。因为 APP11 单段有 64KB 上限,大的清单会被拆成多段,靠 box instance number 拼回去。

PNG:放在一个私有块里,块类型是 caBX。PNG 的块结构本身允许未知块被跳过,所以不支持 C2PA 的软件读这个文件也不会出错,只是看不到凭证。

其他格式:TIFF/DNG 走 EXIF 标签路线;MP4/MOV 放在自有的 box 里(跟 JUMBF 结构天然契合);WebP 用 chunk;PDF 也有对应方案。有些场景还支持把清单存成独立的 sidecar 文件放在图片旁边。

清楚了位置就清楚了机制:C2PA 清单是文件容器层的数据,跟 EXIF、XMP 是一类东西。它不改像素。删除它是一个确定的、可验证的操作——重写文件容器,把那段 box 去掉,像素数据一个字节不动。

隐私那一面

C2PA 的宣传重点在正面价值:新闻机构可以证明照片没被 P 过,摄影师可以证明版权归属,平台可以标注 AI 生成内容。这些都成立。

但清单里可能带出的东西,比大多数人预期的多:

  • 设备信息:相机品牌、具体型号,某些实现里还有机身序列号。序列号是唯一标识,能把你不同时间发的照片串成一个人。
  • 软件与账号:编辑用的软件名和版本,以及——这一条最容易被忽略——某些平台在签发凭证时会带上账号标识或用户名。你在 A 平台生成的图发到 B 平台,凭证里的账号可能跟着走。
  • 原始拍摄信息:即使你后期把 EXIF 里的 GPS 删了,如果拍摄那一步的断言里记录了位置,且这个断言作为 ingredient 保留在链里,位置信息仍然在文件中。
  • 编辑历史:你为了发布做了哪些修改,一目了然。修图这件事本身可能就是你不想公开的信息。
  • 提示词:AI 生图工具写入的断言里,有时包含完整提示词。提示词是创作方法,也可能包含你不想公开的内容。

问题不在于这些信息存在,而在于它们默认跟着文件走,且没有明显的可见提示。绝大多数人不知道自己发出去的图带着这些。

软绑定:删了清单不等于断链

这一点必须写清楚,否则整篇文章会误导人。

C2PA 规范里区分两种绑定方式。硬绑定(hard binding)就是前面说的——清单嵌在文件里,靠哈希跟像素数据关联,删掉文件里的清单,硬绑定就断了。

软绑定(soft binding)是另一套。它对图像内容本身计算一个感知指纹(perceptual hash / fingerprint),这个指纹对裁剪、压缩、缩放有一定容忍度。指纹连同原始清单一起存在服务方的云端数据库里。当一张图被上传时,服务方可以对它算指纹,去数据库里查匹配——即使文件里的清单已经被删干净,只要图像内容还足够接近,就可能被重新关联回原始记录。

某些实现还会配合不可见水印(Adobe 的 Content Credentials 就叫这个"耐久性"设计),三条腿——元数据、指纹、水印——任意一条留下都能查回去。

所以准确的说法是:

  • 删除文件内的 C2PA 清单,是确定有效的,清单确实不在了,本地任何解析工具都读不出来。
  • 这不等于匿名。如果原始记录进过某个服务方的软绑定数据库,且那家服务方要查,内容指纹可能仍然把两者对上。
  • 至于图像里有没有像素域的不可见水印,删元数据完全不影响它——那不是元数据层的东西。关于这一层的技术边界,SynthID 那篇讲得更细。

任何工具告诉你"清除 C2PA 后完全无法追溯",都是在超出自己能力范围地承诺。img.diy 的图片工具做的是容器层清理:把 APP11/JUMBF 段、caBX 块、EXIF、XMP 一并剥掉,重写出一个干净的文件。这个结果可以用任何元数据查看器验证。软绑定和像素水印不在射程内,这是事实,不是免责话术。

什么时候该留,什么时候该清

我的看法是分场景:

该留:新闻摄影、纪实作品、需要证明拍摄真实性的素材、你希望别人能追溯到你的原创作品。凭证在这些场景里是资产。

该清:发到公开社交平台的日常照片、投递的应聘材料附图、匿名爆料相关的素材、二手交易平台的商品图(背景里可能有你家)、任何你不希望关联到个人身份的内容。

看情况:商业交付。客户可能要求保留凭证以证明素材来源,也可能要求清掉以隐藏你用了什么工具。先问清楚。

有个折中做法:C2PA 支持在生成凭证时选择披露级别,部分工具允许你在创建阶段就不写入位置或设备信息。能在源头控制,比事后清理干净。但现实是大多数工具的默认设置是"尽量多写",所以事后检查这一步很难省掉。

顺带说一句:图片的 EXIF 里还藏着一堆跟 C2PA 无关但同样敏感的东西,缩略图残留、镜头序列号那些,另一篇专门列了清单。