内容凭证详解:C2PA 能证明什么,不能证明什么

如何在导出与分发后核查 C2PA 内容凭证:验证读者收到的文件,检查签署者与素材链,并区分无效、缺失和找回的来源记录。

A provenance chain connecting original and edited media with signed seals

内容凭证可以支持范围明确的来源主张,例如“凭证记录了图片导出及所声明的编辑;只有另行核实后才归于这家编辑部”;它不能证明图片或图说真实。编辑要问的不是有没有徽章,而是读者实际收到的文件上的凭证能否通过验证、签署者和记录的操作能否支撑准备发表的那句话,以及文件从导出到交付经历了什么。

先写下可核查的主张

打开验证工具前,先用一句话写明要证明什么。“我们的编辑从已核查的原图导出了这张裁剪图”比“文件附有凭证”需要更多证据。保留原文件、编辑后导出的文件,以及从每个分发渠道实际下载的副本;记录文件名、取得渠道、导出设置,并计算本地校验和以便比对。不要用预览图、截图或网址替代读者收到的文件字节。C2PA 的清单(manifest)将断言、签名声明和资源绑定在一起;验证器检查当前清单的强绑定与受保护内容是否相符,但不同格式可有特定的排除范围。整个文件的校验和有助于自己的保管记录,却不等同于 C2PA 的绑定检查。参见 C2PA:声明及资源内容验证。

分别验证导出文件和交付文件

  1. 逐个检查文件。用支持 C2PA 的验证器检查原图、导出图和各渠道交付副本。公开的 Content Credentials Verify 可从设备选择文件,或拖放文件,查看页面展示的凭证与历史;机密素材应使用获准的本地工具,不要直接上传第三方服务。公开网页可能不提供原始状态码或信任列表配置;这是一份工具无关的编辑检查清单,不是已经实测的命令流程。需详查时请选择能显示逐清单状态码与信任设置的获准验证器,并保存其版本、日期、所配置信任列表的名称与版本、签署者及时间戳机构(TSA)各自的信任锚和结果,而不只截取徽章。验证结果可包含成功、提示与失败代码,且涉及当前清单及所引用的素材(ingredient)清单。参见 C2PA:返回验证结果。
  2. 读当前清单及错误详情。核对内容绑定、声明签名、证书链、适用的信任锚、有效期、撤销和时间戳结果。“有效”和“受信任”不是一回事:受信任的清单必须有效,但有效的清单未必能链接到该验证器接受的信任锚。分别记录声明生成器、签名凭据及其信任锚,并区分签署者与时间戳机构(TSA)的信任;时间戳不受信任,并不自动使正确签署的声明无效。参见 C2PA:信任列表及时间戳验证。再独立核实它们是否代表编辑部、编辑工具、相机厂商或其他主体;不能从软件签署者直接推断个人作者或编辑审核已通过。参见 C2PA:验证状态及信任模型。
  3. 对照准备发表的主张。查看所声明的操作、如有记录的数字来源类型,以及引用的素材;沿来源链追到自己实际持有的原文件,标出缺失、已遮蔽或未经验证的环节。衍生文件中嵌入的素材清单通过检查,不等于重新核验了原素材字节的强绑定;若要声称“源自这份原件”,须取得原件并单独验证,核对原件身份与所声明的素材关系,保留各祖先清单的提示与失败代码,包括已记录或沿用的素材验证结果。提示性 ingredient.unknownProvenance 不同于失败代码 ingredient.manifest.missing 和 ingredient.manifest.mismatch;历史缺失本身不证明造假。有效签名表明签署者作出了相应声明,且绑定范围内记录的数据未被悄然更改;它不独立见证拍摄、不保证每一步编辑都已披露,也不保证图说准确。某个素材有有效凭证,不能让最终成品自动继承同一信任状态;素材链中未经签署或无法取得的环节也不能用猜测补齐。参见 C2PA:素材验证及素材处理指引。
  4. 比较渠道交付结果。逐一记录原图、导出图和实际下载副本的结果及差异;裁剪、转码、截图或平台剥离元数据后,不能继续沿用导出时的结论。如渠道生成了带新签名的版本,应检查其自身绑定和素材关系;如原凭证消失,记录从哪一步消失。只有针对交付文件实际通过的检查,才能用于对外陈述。参见 C2PA:强绑定。

按结果决定怎么写

观察结果能够支持什么编辑处理
资源有效,当前清单受信任在设定的信任策略下,受保护内容与当前清单通过适用检查;已验证声明可归于所标识的声明生成器,签名凭据则通过了对应的信任检查。编辑部或个人身份须另行核实。只陈述有证据支持的操作;另行核查场景、日期、地点、图说及素材链。
声明或清单无效签名或清单检查失败,例如 claimSignature.mismatch;须查具体状态码。不得把无效清单上显示的断言归于声称的签署方。保留文件和状态码,调查并索取有效副本;失败不证明画面伪造。
清单有效,但交付文件绑定失败或未经确认已签名声明仍可能归于其生成器;但如 assertion.dataHash.mismatch 所示的绑定失败,不能证明声明适用于这份交付文件。不得宣称这份文件的内容凭证有效。对比交付件与导出件,问题查清前只将该签名声明描述为针对另一份或尚未确认的资源。
按当前发现方式未找到凭证不能据此判断真假:来源可能从未签署、清单被剥离,或外部清单未被发现。仅检查本地文件可能漏掉外部或引用的清单;在说“未发现”前,记录搜索方式、存储库及候选匹配置信度,回查上游文件并寻求独立证据;标注来源凭证不可用,不要写成“伪造”。C2PA:定位当前清单。
通过软绑定或存储库找回候选凭证指纹或水印可能在嵌入元数据丢失后定位候选清单;匹配不等于该清单与交付文件的强绑定已通过验证。验证取回的清单,检查匹配置信度与存储库来源,对照已知原件;描述为“找回的匹配线索”,不要说这份交付文件保留完整凭证。歧义匹配交由人工复核。

这些是编辑处理类别,不是 C2PA 验证状态。清单可能有效,但其与交付文件的绑定未通过。应结合当前清单与各素材的代码解读:claimSignature.validated涉及声明签名,claimSignature.insideValidity涉及签名凭据有效期,signingCredential.trusted依赖设定的信任锚,assertion.dataHash.match只适用于使用该绑定类型的文件;assertion.boxesHash.match是可能出现的格式特定替代代码,不是通用必备结果。提示性的ingredient.unknownProvenance不证明造假;提示性signingCredential.ocsp.skipped和signingCredential.ocsp.inaccessible不等于已确认未撤销;提示性timeStamp.untrusted本身也不是声明签名失败。不可凭单一码或徽章下结论。这些只是例子,不能要求每份文件返回相同代码。规范区分格式良好、有效、受信任的清单及具体状态码;“缺失”和“找回”描述的是发现与处理方式。若清单数据无效,界面应警示用户不要把这些数据归于签署者。参见 C2PA:验证状态及清单信息展示及C2PA:返回验证结果。

有限的本地样本检验

使用官方 c2patool 0.28.2 与公开的 样本 C.jpg 进行本地检验:原件返回 validation_state: Valid、claimSignature.validated、assertion.dataHash.match,同时因测试签署证书出现 signingCredential.untrusted。在临时副本的嵌入清单之外、距文件末尾 20 字节处翻转一个字节后,签名验证仍通过,但返回 assertion.dataHash.mismatch 与 validation_state: Invalid。两次命令退出码均为 0;应读 JSON 结果,不能只看进程退出码。Windows 二进制文件与样本置于下列路径后,可运行:

"$LOCALAPPDATA/Temp/c2pa-fixture-qa/c2patool/c2patool.exe" "$LOCALAPPDATA/Temp/c2pa-fixture-qa/C.jpg"
python -c 'import os; p=os.path.join(os.environ["LOCALAPPDATA"],"Temp","c2pa-fixture-qa"); b=bytearray(open(os.path.join(p,"C.jpg"),"rb").read()); b[-20]^=1; open(os.path.join(p,"C-tampered.jpg"),"wb").write(b)'
"$LOCALAPPDATA/Temp/c2pa-fixture-qa/c2patool/c2patool.exe" "$LOCALAPPDATA/Temp/c2pa-fixture-qa/C-tampered.jpg"

样本没有素材链;这不是分发链路测试,也没有证明可信发布者身份。清单中的作者字段只是断言,不能独立证明图片作者;样本不是营销素材。

找回凭证,不等于验证交付文件

平台可能剥离嵌入元数据;C2PA 不能阻止清单被完全移除。内容指纹、不可见水印等软绑定可帮助找回可能相关的清单,即使文件字节已有差异;但它们不能替代强绑定,近似匹配可能需要人工判断。存储库命中是进一步比对的起点,不是自动贴上“已验证原件”的依据。应分别说明:交付文件上的凭证通过验证、重新签署的版本记录了素材关系,还是仅通过相似性找回候选清单。参见 C2PA:软绑定、清单发现指引及安全特性。

信任签署流程,也要守住证据边界

受信任证书回答的是某一信任列表下签名凭据的身份和状态,而不是摄影者是否诚实。签名密钥或声明生成器遭入侵,也可能产出看似可信的签名记录。保护密钥、限制签署权限、记录异常签发并规划撤销;在证书过期或撤销后评估旧声明时,可信时间戳及撤销证据很重要,过期未更新的信任列表也会影响解读。保留验证配置,让其他编辑可以复核。参见 C2PA:时间戳验证及撤销规划。

来源记录还有隐私成本:断言可能暴露姓名、设备、位置或工作流程,关联的记录也可能泄露更多信息。发布前决定签署和公开哪些内容,取得适当同意,并评估敏感素材的遮蔽处理;遮蔽本身受规范约束,也可能影响来源链验证。远程查询清单还可能暴露查阅者的兴趣或 IP 地址;敏感文件应采用获准且注重隐私的验证方式。参见 C2PA:断言遮蔽、个人信息保护和追踪与隐私。

最终可发表的结论必须具体:只有相应检查实际通过,才能写“读者收到的图片,其内容凭证通过验证,由已识别的声明生成器记录了导出及[所声明的操作]”。只有另行核实签名凭据持有人与编辑部的关系和权限,才能将导出归于特定组织;否则只称凭证记录了导出声明。参见 C2PA:验证状态。凭证缺失、找回的匹配不确定、素材未验证,或签署者权限不明时,就明确写出限制,并继续用通常的采访和证据核查支撑报道。