EU AI Act 透明度规则于 8 月 2 日生效,Anthropic 同日开始对 Claude 新模型嵌入文本水印;文章深入分析水印技术原理及现有绕过攻击(Lexical Editing、Text Mixing、Paraphrasing 等),指出高熵 token 是水印主要载体,也因此最易被攻击。
8月2日,欧盟《AI法案》的透明度规则正式生效。同一天,Anthropic开始在新型Claude模型生成的文本中嵌入水印,且在全球范围内生效,而非仅限于欧洲。Google此前也通过SynthID实现了类似功能。
此后几乎所有相关讨论都围绕着同一个问题:这种标记能被去除吗?
这个问题其实不是最关键的。虽然答案本身很有趣,但真正决定标记能否作为证据的答案却指向了相反的方向。
文本水印并非隐藏字符或空白符 tricks。它改变了模型在选择候选词时的随机性来源,因此水印就体现在词的选择上。检测是一种对这种偏差的统计测试。
能被移除吗?答案是肯定的,这有据可查,而非推测。
Watermark under Fire 分类记录了各种去除攻击,包括词汇编辑、文本混合和改写 paraphrase
Self-Information Rewrite Attacks 发现水印集中在高熵 tokens 上,这正是它们容易被攻击的原因
RLCracker 报告了对十种不同方案的 adaptive 攻击
而且这根本不需要什么复杂技术。普通的编辑、翻译和重新格式化都会无意中削弱这些标记。
同样值得注意的是另一个问题。检测需要足够的词选择来衡量。短输出和高度受限的输出让检测几乎没有可用的信息,而源代码每行比散文有更少的有意义的词选择。
所以去除是真实存在的。但这只是问题的一小半。
如果标记能被去除,它会悄然失效。当某人发布了机器生成的文本,检测器却没有反应,期待标记发挥作用的人会失望。这是一种假阴性,假阴性意味着错失机会。
反过来看。
这些方案通过在密钥下分割词汇表,并将采样倾向其中一半来工作。一旦恢复了足够的结构,你根本不需要模型。你自己撰写文本,有意地将词汇选择偏向一致的方向,检测器就会对你从未用模型生成的文本报告阳性。
这并非思维实验。水印窃取研究正是针对这个恢复问题进行攻击。关键细节在于它针对哪些方案:正是那些因为更能抵御编辑和改写而成为该领域发展方向的 single-key 设计。
仔细想想,因为这是所有问题的结构性发现。决定水印持久性的属性同时也决定了它可被学习。对方案进行加固以抵御移除时,你也在使信号更加一致、更加可重复、更容易从样本中重建。两种失效模式并非可以按顺序解决的独立问题,它们相互拉扯。
还有另一种方式可以达到同样的效果。piggyback 攻击针对真正有水印的文本,篡改其含义——包括变成仇恨言论——而水印仍然有效且可检测。输出现在可以被归因于模型提供商,而该提供商并没有撰写它。
检测工具只有在它检测到的东西无法被制造时才能作为证据。一旦可以伪造,每个阳性结果都变得可质疑,基于它的每项指控也变得不安全。
考虑一下谁在承受这些后果。
一个被指控提交了机器生成作业的学生——而作业实际上是本人写的
一篇报道被标记为合成内容的记者
在审计中交付物被拒绝的供应商
一家发现其模型生成了 abusive 内容——而模型实际上从未生成过——的公司
每个案例中,当事人都面临着一个无法反驳的技术指控,因为能够解决争议的工具不在他们手中。Anthropic 已表示检测 API 即将推出,但尚未发布。目前公司外部没有人能够衡量该方案的抗移除能力、抗伪造能力或假阳性率。任何引用这些数字的人——无论正反——都是在引用他们未曾测量的数据。
还要注意,即使一切正常运行,阳性结果意味着什么。它只表示模型可能在某个时刻接触了文本。人们经常将自己的写作通过模型进行编辑和翻译,因此有效的检测与人类撰写了文章中的每个想法完全兼容。标记只能证明有模型处理过,从来无法证明 authorship。
一个可以被剥离的标记告诉你的比你希望的少。一个可以被别人应用的标记则以你的名义告诉你虚假的信息。
这一切都不是对推出这些方案的实验室的批评。标记是一种消费者保护措施,作为消费者保护措施,它确实有用。问题是它正被悄然推上一个它从未被设计过的角色,即作为 origin 的证明。
退后一步看水印,问题的轮廓会更加清晰。
检测假货是一场军备竞赛,每次生成能力提升时你都要重新进入。证明真品则是在创建时只需支付一次的固定成本。第一种策略要求你无限期地获胜。第二种策略只要求你签署一样东西。
欧洲没有忽视这一点。《实践守则》要求多层防御,其中一层是带有加密签名的 C2PA 出处元数据。Origin 证明已经是文件处理方案的一部分。
但这些层都是对 artifact 的标记。一个文件、一张图片、一段文本。没有一个描述两个系统之间的 transaction。
而且委员会关于第50(2)条的指南将仅在机器间通信、自动处理且未暴露于人的输出完全排除在标记义务之外。
将其与 agent 系统的实际运行方式对照。一个 agent 调用工具。工具返回结果。另一个 agent 消费它、转换它、传递它。几跳之后某物到达一个人,而只有最后的 artifact 明确在范围内。上游的一切都是机器对机器的,这意味着网络上增长最快的流量类别是没有人需要标记且几乎没有人以外部方可以检查的形式记录的类别。
所以伪造问题和覆盖问题落在同一个地方。你需要的不是输出上更好的标记。它是一个 action 的记录,在发生时签署,没有人可以在事后伪造。
这是我过去一年在构建的两个部分。
N-AALP 将 agent 发送的每条消息变成一个自包含的签名对象,而不是某人日志中的一行。N-PAMP 是其下的后量子传输层。两者都是 Apache-2.0 许可证,有公开规范和十个参考实现。
用控制所有者关心的术语来说,这产生了什么:
二元而非统计的 Attribution。 一个对象要么携带来自特定系统的有效签名,要么没有。没有置信分数,没有需要争论的阈值,也没有需要在争议中辩护的假阳性率。伪造在这里不是程度问题,它需要私钥。
Action 发生时记录 Authority。 每个 action 都携带自己的声明 authority 和允许的效果,在任何状态改变之前进行检查,而不是事后从日志中重建。审计员看到的不仅是 agent 做了某事,而且是它做了它被具体授权做的事。
不需要信任你的验证。 记录可以离线验证,没有证书颁发机构,没有注册表查找,也不需要回调你运行的服务。监管机构、客户或交易对手可以检查你的证据,而不需要相信其中的任何部分,包括日志。
整个链条上有篡改证据,而非仅每条记录。 Actions 因果相连,所以改变或省略一个是可检测的而非不可见的。当两个 authority 对发生了什么存在分歧时,分歧本身是可证明的。
擦除不破坏追踪。 不可变记录和擦除权看似不兼容,这就是为什么法律团队拒绝批准仅追加审计。个人数据可以在签名记录保持完整和可验证的同时被擦除。你保留证据而不保留永久的个人数据责任。
拒绝路径上的保密。 当请求被拒绝时,请求者只知道它被拒绝了,除此之外什么也不知道。理由存在且有签名,授权读者可以获取它。探测你边界的对手从你的拒绝形式中学不到任何东西。
审计记录按定义是长期存在的,因此一个今天安全但十二年后会被破解的签名方案对于你可能需要在十二年后提供的证据来说是一个糟糕的基础。两个协议都是从头开始后量子化的,而不是事后改装,基于已定稿的 NIST 标准。
签名强度按 profile 分层,这种分层存在是因为各国指南确实存在分歧。CNSA 2.0 要求对国家安全系统上的签名使用 ML-DSA-87,并且在过渡期不需要混合。澳大利亚的指南与此一致。英国的 NCSC 接受较低级别。德国的 BSI 和 ECCG 则相反,要求对基于格的算法进行混合部署。没有一个固定的单一答案能满足所有要求,所以顶层满足 CNSA 2.0 的要求,在监管机构要求的地方可以选择经典混合,而在它们之间移动是配置更改而非迁移。
对后量子签名的通常异议是大小,这对于它们通常的应用方式是合理的异议。这个设计绕过了在其他地方阻碍后量子采用的特定瓶颈,完整的签名记录在第一次往返中到达。畸形流量在消耗签名验证之前就被丢弃,所以洪水不会把你的密码学变成攻击。
任何人都可以发布规范并为其声称属性。认真对待这些的原因是声称是分级的,分级是公开的。
Go 和 Rust 实现对每个带有安全或互操作性声明的结构产生字节相同的输出。不是等效输出,而是相同的字节。
一致性语料库中的每个期望值都来自独立源,锚定于 RFC、FIPS 或 NIST 向量,或从零开始构建,绝不是来自被测试的实现。239 个案例的语料库通过每种语言绑定运行。
一个清洁室 harness 从规范和独立源重新生成 wire 格式,同时在进程级别阻止对实现的所有访问,然后要求与已提交的语料库进行字节对字节的匹配。在该拒绝下 26 个检查全部通过,零规范缺陷。harness 验证自己的阻止,所以泄漏使其报告自己坏了而不是报告成功。
十个参考实现针对每个影响 wire 的常量发布单一机器可读 authority,如果任何常量未被比较则 gates 失败。Go、Rust、Python、TypeScript、Java、Kotlin、C#、Ruby、PHP 和 Swift。
如果你需要运行它,简短版本如下。
它包装了你已经发送的内容。MCP、A2A、HTTP、gRPC、WebSocket 和本地 stdio 流量在签名信封内传输,无需解码或重写 payload,所以你的 agents 不会改变,验证路径上不会有新的解析器。
本周与规范一起发布两种部署形态。一个 sidecar 只需一条命令且不需要集群,用于初次体验。一种用于生产规模的 per-node ambient data plane,通过工作负载认证而非存储凭证来提供身份,实现 Gateway API mesh profile,因此可以 drop 到现有 Kubernetes 集群中而无需新的 CRD。Wire 在两者上是相同的,所以在它们之间移动改变的是你的拓扑而非协议。
值得注意的是第二个。所有当前发布的生产级无 sidecar mesh 都使用经典密码学保护 L4。Istio 的 ztunnel 在 HBONE 上使用 X25519 相互 TLS。Cilium 使用 WireGuard,也是 X25519。一个后量子、agent 原生的 ambient data plane 正是这些方案留下的空白。
对象模型、授权模型、审计构建和完整的一致性语料库都在规范中,这些规范是开放的,是正确评估它们的地方。
水印会继续做它被设计来做的事。它告诉一个人,他们面前的东西是机器制造的,这是有价值的功能。
它做不到的是在想要把你的名字放在某物上的对手面前存活。移除问题有一个每个人都能接受的答案。伪造问题没有,而这个才是决定一个标记是否可以被视为证据的关键。
如果你在生产中运行 agents,这是本周的练习。拿出你最有力的证据证明某个特定的自动化 action 发生了,然后问自己,在不相信你日志的人面前,它还剩下什么。
规范位于 N-AALP 和 N-PAMP,目前是 IETF Internet-Draft 形式。如果你在处理这个问题,我想听听这在哪里适合你正在构建的东西,哪里不适合。
披露:本文引用的某些 N-PAMP 和 N-AALP 细节可能与当前 GitHub 文档中的内容不同,仅仅是因为这些是要在本周提交的草案修订。