C2PA 验证了 X:v1,为什么不能直接复用到另一个 rendition?
发布时间:2026/9/26 3:37:21 作者:尧图编辑部 阅读量:1,286

对原始视频的验证结果不能自动套用到转码后的版本上。否则用户拿到的是一个文件旁边的“已验证”状态却属于另一个文件。1. 验证了原始对象却标记了当前版本来看一个视频点播VOD平台的例子用户打开 720p 版本看到“此版本已通过 C2PA 验证”。但这条提示所依据的结果只对应原始对象。C2PACoalition for Content Provenance and Authenticity这一联盟制定了一套规范用于提供可验证的内容来源与修改信息。这里重要的是这些信息与具体媒体内容之间的关联。[1, §§2.3.1–2.3.4]平台将原始对象固定为X:v1。对这个对象所有必要且适用的检查均已成功完成包括签名、断言、信任以及与视频数据的绑定检查。验证结果E1存在且可用。随后平台生成一个分辨率不同的独立呈现版本rendition。本例中这就是操作D1生成的 720p 对象X:v2。目录把两个对象归入同一个逻辑视频X因此保存一个统一的“已验证”状态似乎很自然。但在所讨论的系统中并不存在适用于 X:v2 的这类验证结果。下文的VERIFIED是本文为平台评估定义的名称对明确指定的对象在保留的范围内、按照既定策略所讨论的那组 C2PA 检查已成功完成。它不是 C2PA 规范定义的状态也不保证视频质量。2. 与已验证对象的关联在哪里丢失了对 X:v1已验证其视频数据与M1的关联。M1 是组织来源信息的结构称为清单manifest。这种绑定称为内容绑定content binding。绑定范围由适用机制决定不一定覆盖文件的每一个字节。[1, §§2.3.11–2.3.12; 9.2.1, 9.2.3, 9.2.6; 15.12]检查针对的**验证对象subject**保留在结果中E1.subject X:v1。平台评估A1以 E1 为依据保留这一对象关联、所验证的属性及范围。签名验证与数据绑定验证是结果中的不同组成部分。签名验证成功并不能替代对 X:v2 的数据绑定验证。C2PA 允许在规定条件下保留先前材料的来源信息因此这里的结论既不是“转码会销毁全部历史”也不是“每次都必须把所有检查重新做一遍”。[1, §§15.1.1–15.1.2; 18.16.11.1]丢失发生在从对象级评估生成视频级汇总时A1: subjectX:v1, property, binding_scope, VERIFIED, evidence_refE1 asset_summary[X]: property, VERIFIED, evidence_refE1汇总保留了属性、状态甚至还保留了指向 E1 的引用却去掉了验证对象及其适用范围。API 在返回objectX:v2时从这个汇总里取出状态UI 将其显示为当前版本已验证。E1 本身没有损坏。引用可以帮助恢复原来的对象对应关系但有引用并不等于结果使用方已经将它与实际返回的对象进行匹配。错误出在对删减后汇总的使用上而不是验证结果本身。3. 对派生版本可以作出什么声明“由已验证对象生成”和“自身已经验证”是两种不同的声明。即使是前一种声明也不能仅凭derived_from字段成立。在本文提出的平台契约中D1 使用的正是已经固定的 X:v1受控转换也确实以这个输入生成输出。结果生成后由获授权的结果固化流程建立实际输入与实际输出之间的关联并把输出固定为不可变的 X:v2。任意目录写入都不能把这条关联中的输入、输出换成另一对对象。发布时交付的仍是同一份数据。该流程的正确性以及生成这条记录所需的权限都是模型明确规定的前提。操作记录本身并不能证明这些前提成立。在这些条件得到满足、E1 的对象关联仍被保留时平台可以这样表述X:v2 由平台从具体的 X:v1 生成X:v1 的 C2PA 验证已在注明的范围内成功完成。系统中没有适用于 X:v2 本身的这类验证结果。每一部分都有各自的依据。原始对象验证成功以 E1 为依据输出的来源关系以 D1 实际输入与输出的关联为依据消息与实际交付版本的对应以发布同一个已固定对象为依据。在本例中X:v2 没有适用结果这一条件限定于所讨论的系统不是从响应中的空字段推导出来的。这样用户就不会把对原始对象的验证误当成对收到的 720p 文件的验证。这里修正的是消息不是视频本身没有适用于 X:v2 的结果并不意味着文件是伪造的、D1 没有发生或 E1 中原本成功的验证结果被否定。即使 D1 的派生关系有完整依据它也不会因此成为对输出的 C2PA 验证。4. 显示状态前做两项检查第一保留验证对象和验证范围subject preservation。请求 X:v2追踪 A1 如何变成 API 响应以及 UI 的主状态。把实际返回的对象与结果中的验证对象、属性和范围逐一对应。可以显式传递这种关联也可以通过 E1 恢复但恢复必须在确定要显示的消息之前完成。预期结果成功的评估结果对应 X:v1而不是 X:v2。共用的asset_id可以用于分组但不能替代对象匹配。仅凭 E1 就给 X:v2 标记VERIFIED即使另有脚注说明原始对象也违反了这一要求。第二检查派生对象的结果迁移契约derivative transfer contract。对同一个 X:v2把消息的每一部分与其依据对应起来实际输入、已完成的 D1 所建立的关联、已固定的输出以及发布关系。如果这些契约条件有充分依据预期输出就是上一节的限定消息而不是 X:v2 自身的VERIFIED状态。在范围和策略固定的条件下令P ( x ) P(x)P(x)表示对象x xx的受检属性即VERIFIED所对应的属性。derived_from ( y , x ) \operatorname{derived\_from}(y,x)derived_from(y,x)表示已经确立的y yy源自x xx的关系而不只是目录中的一个字段。在没有经过论证、适用于这一属性的迁移规则时P ( X : v 1 ) ∧ derived_from ( X : v 2 , X : v 1 ) ⊭ P ( X : v 2 ) . P(X{:}v1)\land\operatorname{derived\_from}(X{:}v2,X{:}v1) \not\models P(X{:}v2).P(X:v1)∧derived_from(X:v2,X:v1)⊨P(X:v2).符号⊭ \not\models⊨表示“不能从中逻辑地推出”不表示“为假”。来源关系本身并不转移该属性。单独一个derived_from字段连来源关系也不能确认仅有日志或清单同样不足以论证迁移。用proved ( Q ) \operatorname{proved}(Q)proved(Q)表示命题Q QQ能由所讨论系统中的可用依据和规则得到论证。那么¬ proved ( P ( X : v 2 ) ) ⊭ proved ( ¬ P ( X : v 2 ) ) . \neg\,\operatorname{proved}(P(X{:}v2)) \not\models \operatorname{proved}(\neg P(X{:}v2)).¬proved(P(X:v2))⊨proved(¬P(X:v2)).属性未获证明不等于其否定已经得到证明。因此缺少支持VERIFIED的依据不能自动转化为否定性的验证结论。保留验证对象 → 说明所验证的属性 → 检查当前版本的依据 → 只呈现有依据支持的声明。验证的是 X:v1标记为“已验证”的却是 X:v2——这就叫张冠李戴。详细讨论见 Article 13C2PA 验证与平台声明的边界。参考资料[1] C2PA.Content Credentials: C2PA Technical Specification2.4 版。相关章节已在文中标注本文定义的 A1/E1、结果投影及 D1 契约不是 C2PA 规范规定的架构。https://spec.c2pa.org/specifications/specifications/2.4/specs/C2PA_Specification.html