C2PA General Box Hash:如何核查 JPEG、PNG 和 GIF 完整性
先保存产生结果的文件
在验证工具打开文件前,保存实际收到的 JPEG、PNG 或 GIF。记录来源页面、下载时间、文件名、大小和文件编号。如果平台同时提供原始文件与多个转码副本,应分别编号,并写清本次核查的是哪一份。这套记录方法是本文的操作建议,不是 C2PA 规定的报告格式。
使用兼容 C2PA 的验证工具,记录工具名称和版本,把完整输出与文件放在一起。一枚徽标或一行状态无法说明列出了哪些 box、顺序是否与资产一致,也无法定位哪项 hash 比较失败。验证前不要重新导出证据副本,新文件需要单独核查。
把问题写成普通核查项,确认 General box hash assertion 是否按验证工具显示的范围验证了这份副本的 box 数据与顺序。发布者身份、配文准确性和画面事件是否发生,需要另外查证。
把 assertion 当作有顺序的地图
C2PA 2.2 将 general box hash assertion 的 label 定为 c2pa.hash.boxes。规范建议将这项 hard binding 用于 JPEG、PNG、GIF 等采用非 BMFF box 格式的资产。Assertion 由一组结构组成;每个结构列出一个或多个 box 的名称或标识,以及覆盖相应数据的 hash 和算法。
只抄录工具实际显示的 box 名称、分组、顺序、算法与 hash 状态。规范要求 assertion 中的 box 按资产内的先后顺序出现,包括容纳 C2PA Manifest 的 box。资产中存在但 assertion 没有显式列出的 box,或 box 顺序不一致,都会导致 manifest 在验证时被拒绝。JPEG 里多个 APP1 segment 这类同类实例需要分别列出。
如果把多个 box 组成范围,hash 从第一个 box 开头算到最后一个 box 结尾,并包含 box 之间的 byte。分别列出 box 时,计算只覆盖各个 box 内的数据。即使显示了相同的 box 名称,不同分组也可能对应不同的字节范围,因此记录时必须保留分组。
检查排除 box 和 Manifest box
Box 条目可以带有 excluded 布尔值。字段缺失或值为 false 时,验证器对 box 计算 hash 并比较结果;值为 true 时,验证器可以忽略该 box 及其 hash。应以工具显示的值为准,不要因为没有比较结果就推测 excluded 的值。规范还要求兼顾旧版验证器的 claim generator 即使排除某个 box,也应写入准确 hash。
容纳 C2PA Manifest Store 的 box 也需进入数组,名称是 C2PA,hash 为单字节零值。即使 JPEG 中的 Manifest Store 拆分在多个 APP11 marker segment 内,也用一个 box 表示。其他与 C2PA 无关的 APP11 box 仍应列入 hash box 清单。PNG 的 8 byte header 可以用特殊值 PNGh 作为第一个 box。
保存准确的失败代码或消息。一份可复核的记录应连接文件编号、验证器版本、有序 box 清单、分组、excluded 值、算法与整体状态。工具没有显示的字段,直接标记为“未报告”。
限定匹配与不匹配的含义
匹配成功支持一项范围明确的观察,即验证器对这份副本里被覆盖的 box 数据进行计算,得到与 assertion 声明一致的值。它无法确定所有 metadata 都准确,不足以建立对签名者的信任,也不能证实某项现实事件的配文。被排除的 box 和显示范围外的内容需要另行核查。
不匹配或结构被拒绝,说明这份文件与 assertion 没有通过规定的完整性检查。这项结果不能单独识别修改者、修改时间、受影响的像素,也不能证明画面事件经过摆拍。比较另一份副本前,先给它分配不同编号,并独立验证。
保存的图像、视频、音频或文本可以通过概率性媒体分析获得风险信号。该输出应放在 C2PA 验证记录之外,并关联到实际分析的副本。自动分析会对真实材料产生误报,也会漏报合成或修改材料。高风险信号支持继续核查;低风险信号无法认证文件,也不会修复 C2PA 不匹配。
核查现实主张时,查看原始发布页面、展示该媒体的账号或机构、声称的日期和地点,再寻找与事件有关的独立证据。最后记录文件编号、C2PA 输出、使用的检测结果、外部信源核查和人工决定。
来源
- C2PA《C2PA Technical Specification — General Box Hash》:https://spec.c2pa.org/specifications/specifications/2.2/specs/C2PA_Specification.html#_general_box_hash