内容认证与真实性联盟(C2PA)标准旨在为数字媒体附加密码学签名,证明文件是何时、以何种方式被创建的。典型的 C2PA 清单包含两个签名:一个「声明」签名,用于证明文件属性(例如创建时间);另一个来自时间戳权威机构(TSA)的签名,用于确认该声明签名存在于或早于某个特定时间戳。TSA 充当独立见证者,防止设备对自身时钟做假。然而,C2PA 规范也允许「排除」:即从签名计算中省略的文件字节范围。该功能是为了适应诸如 PNG 这类格式而设——这些格式必须在签名嵌入后更新内部校验和——但这却引入了一个关键滥用点。由于被排除的字节不受任何签名保护,攻击者可以在签名之后自由修改这些字节,而不会使声明签名或 TSA 的时间戳证明失效。在 2026 年 10 月 2 日发布的博文中,David Buchanan(化名 retr0id)展示了如何滥用这一机制来「篡改时间」。通过构造一个将整个文件排除在外的 C2PA 清单——将排除范围的起始字节设为 0、长度设为文件大小——声明签名实际上是对空字符串的哈希值进行计算。TSA 随后对该声明签名进行签署,生成一个有效的时间戳,断言该空字符串哈希值存在于某个选定时刻。作者拍摄了一张空白彩票的照片,套用了此清单,并从 TSA 获得了可信时间戳。在实际开奖数小时后,他编辑了图像并插入了中奖号码。由于被排除的区域覆盖了整个文件,签名仍然有效,验证工具也未标记任何异常。最终图像显示了一个早于开奖的时间戳,却展现了中奖号码,实质上伪造了来源证明。Buchanan 指出,修复这一问题并不容易。虽然拒绝排除整个文件的清单是件简单的事,但部分排除仍然危险:难以判断某个给定的排除范围是无害的(例如 PNG 校验和),还是可用于篡改语义上重要的内容。他建议解决方案在于明确为每种受支持的文件格式定义允许排除的字节范围,并要求验证器强制执行这些约束。在此类缓解措施被采纳之前,排除机制仍是一条在保留可信时间戳的同时公然篡改 C2PA 签名媒体的可行途径。 | 依据来源证据:声明与 TSA 签名的描述、排除导致的安全风险、排除整个文件的方法、空字符串的哈希值,以及彩票示例。
HN Digest / · HN #49946707
用 C2PA「排除」功能篡改时间:利用排除特性实现难以察觉的篡改
一名安全研究员演示了 C2PA 标准的「排除」功能如何被滥用——通过签署空字符串,允许在保持可信时间戳的前提下对图像进行任何后续修改。作者将整个文件排除在签名计算之外,创建了一张 C2PA 签名的照片,看上去它显示了一张在开奖数小时前就印上中奖号码的彩票,但实际上该号码是在结果公布之后才被篡改的。

来源页面截图(da.vidbuchanan.co.uk)