C2PA Ingredient Manifest:如何复核显式与递归验证
先保存文件并限定问题
用兼容 C2PA 的验证工具打开前,先保存未经编辑的实际资产。记录文件名或来源 URL、取得时间、验证工具名称与版本、active-manifest label 和完整 validation output,并把它们与文件放在一起。这张记录表是本文提出的复核方法,不是 C2PA 规定的表格。
先把问题限定为:验证工具是否处理了所有相关 ingredient assertion,是否沿引用追踪 ingredient manifest,并返回记录中的 validation result。Ingredient manifest 描述 C2PA 素材链中的 provenance 关系,不能确认配文、说话人、地点、拍摄时间或画面事件是否真实。
递归追踪前先做显式验证
C2PA 2.2 要求 ingredient assertion 必须包含 relationship field,值只能是 parentOf、inputTo 或 componentOf。缺少该字段或使用其他值时,验证工具返回 assertion.ingredient.malformed。复核时应原样记录,不能在副本里补字段,也不能根据文件名猜关系。
处理 standard manifest 时,不论 relationship 的值是什么,验证工具都要验证每个 ingredient。处理 update manifest 时,要验证该 update manifest 的 parentOf ingredient。Ingredient 中的 time-stamp manifest 已被 time-stamp assertion 取代,验证时忽略。把这三种情况分开记录,避免混淆处理范围。
每个 ingredient assertion 占一行,记录 manifest label、assertion URI、relationship、activeManifest、claimSignature、是否存在 validationResults,以及实际返回的 success、informational 或 failure code。只保留总的通过或失败,会掩盖具体字段和素材链步骤。
沿完整素材链递归验证
规范要求递归验证资产中的全部 ingredient manifest,并以 depth-first search 作为示例;其他实现必须得到等价结果。验证工具会建立两个列表:一个保存整个素材链中的 ingredient-manifest hashed_uri,另一个保存 redacted assertion 的 JUMBF URI。
每到一个 manifest,先定位 claim,再检查 redacted assertion,并解析 ingredient assertion 的 hashed URI。如果 URI 无法解析、hash 不匹配,或 JUMBF Content box 只包含零,算法就转到下一个 ingredient assertion。此处应保存完整输出,不要补写工具没有显示的 status code。
Ingredient assertion 含 activeManifest 时,version 1 或 2 使用 c2pa_manifest,验证工具会记录 active-manifest 与 claim-signature 引用,并进入该 manifest 继续递归。若没有该字段,除 relationship 为 inputTo 外,会返回 ingredient.unknownProvenance,然后继续处理其余 assertion。因此不能只写“没有 provenance”,还要记录字段是否存在以及 relationship。
对照本次结果与已有 validationResults
如果找到 manifest label 相同的 redacted assertion,验证工具使用 claim-signature hash validation method;没有匹配 redaction 时,可以使用 manifest hash method 或 claim-signature hash method。记录工具实际采用的方法,不要在表格里把两种方法当成同一种证据。
Claim-signature 方法检查引用的 signature box 及其 hash,然后验证 claim signature、time-stamp、credential revocation information 和未 redaction 的 assertion,但不评估 ingredient hard binding。Manifest-hash 方法解析并计算引用的 ingredient manifest hash;匹配时可以返回 ingredient.manifest.validated。规范说明,验证工具信任前一 claim generator 的 validation result 时,这条路径更快。
如果存在 validationResults,验证工具会补回历史记录中有而本次未返回的 entry,也会返回本次新增而记录中没有的 entry。Version 3 ingredient assertion 有 activeManifest 却没有 validationResults 时,返回 assertion.ingredient.malformed。应把历史记录与本次结果分栏,再进行对照。编译后的 ingredient-manifest 列表之外出现的额外 C2PA manifest 应忽略,以兼容验证工具尚不认识的引用方式。
分开保存 provenance 与媒体检测结果
最终记录应包含准确资产、验证工具与版本、每个 relationship、递归路径、验证方法、历史与本次 validation result、redaction、未解决引用和实际处置。下一位复核者应能直接重走同一路径,不必猜测检查的是哪个文件或分支。
如果还用 DeepFakeCheck 分析保存的资产,应把概率性风险信号放在独立区域。自动检测可能误报真实媒体,也可能漏报合成或修改媒体。DeepFakeCheck 不替代 C2PA 验证工具,也不签发本文列出的 ingredient validation code。
成功只支持关于本次检查的 provenance record 与 reference 的有限技术结论;失败表示需要继续调查的技术问题。二者都不能证明画面事件真实或虚假。现实主张仍需核对原始发布页面与独立证据。
来源
- C2PA《C2PA Technical Specification, Validate the Ingredients》:https://spec.c2pa.org/specifications/specifications/2.2/specs/C2PA_Specification.html#_validate_the_ingredients