论文学习《A Crack in the Bark——利用公开知识移除 Tree-Ring 水印》
论文精读:A Crack in the Bark——利用公开知识移除 Tree-Ring 水印
论文:A Crack in the Bark: Leveraging Public Knowledge to Remove Tree-Ring Watermarks
会议:USENIX Security 2025
关键词:扩散模型、VAE、隐空间水印、Tree-Ring、对抗攻击、低基率检测
只要攻击者拿到公开 VAE,就能高质量移除 Tree-Ring 隐空间水印;而 Tree-Ring 在真实低基率场景下本身也难以落地。
论文结论
-
Tree-Ring 为什么会被攻破?
因为它把水印嵌在隐空间,而隐空间又依赖公开 VAE 进行编解码,导致攻击者可以重新进入同一个 latent 空间动手脚。 -
攻击者具体怎么做?
用公开 VAE 把图像编码回隐空间,训练一个 latent 域代理检测器,再用 PGD 在隐空间做小幅扰动,最后解码回图像。 -
这件事为什么严重?
因为攻击几乎不损伤画质,但能让检测性能从接近完美直接跌到接近失效;同时论文还指出,Tree-Ring 在真实低基率场景下即使不被攻击,精度也并不理想。
背景概念
1. 扩散模型与隐空间扩散
扩散模型的基本流程是:
- 先从随机噪声开始
- 通过逐步去噪生成图像
- 最终得到符合文本条件或其他条件的结果
但如果直接在像素空间做这件事,训练和推理成本都很高。因此主流方案改为隐空间扩散:先把图像压缩到一个低维表示,再在低维表示上做扩散与去噪。
这就是 Stable Diffusion 一类模型的核心思路。
2. VAE 变分自编码器
它负责两件事:
| 模块 | 作用 | 公式 |
|---|---|---|
| Encoder | 把图像压缩到隐空间 | z=E(x)z = E(x)z=E(x) |
| Decoder | 把隐向量还原成图像 | x=D(z)x = D(z)x=D(z) |
这里的 zzz 就是 latent,也就是隐空间表示。
可以把它类比成:
- 图片是原始大文件
- VAE 是压缩/解压软件
- latent 是压缩后的内部表示
而这篇论文攻击成立的关键就是:很多扩散模型会直接复用公开 VAE。
3. Tree-Ring 水印
Tree-Ring 是 NeurIPS 2023 提出的扩散模型专用隐空间水印。它不直接在像素里加水印,而是在初始噪声的频域里写入环形结构。
这里要特别强调一点:Tree-Ring 不是在最终图像上贴标签,而是在生成起点做手脚。它希望做到的是:
- 生成结果肉眼不可见
- 普通图像编辑不容易破坏
- 检测时可以通过逆扩散把图像“追溯”回最初的噪声状态
这也是它当初被认为比像素水印更强的原因。
嵌入过程可以理解为:
初始高斯噪声
→ FFT 变换到频域
→ 在中心区域嵌入环形密钥图案
→ IFFT 回到时域
→ 用这个带水印的噪声去生成图像
检测时则相反:
生成图像
→ DDIM 反演回初始噪声附近
→ 做 FFT
→ 看频域中心有没有对应环形图案
它名字里的 Tree-Ring,就是“树的年轮”的意思,因为图案本身就是同心圆环。
进一步拆开看,Tree-Ring 的设计逻辑其实是:
- 初始噪声理论上应服从标准高斯分布
- 在频域中心加入环形模式后,这个噪声仍然看起来像“正常噪声”
- 经过扩散模型生成图像后,环形结构不会在像素层面明显显现
- 但在逆扩散回去之后,这个结构又能被检测器识别
它原本依赖的安全直觉是:即使别人拿到生成图,也很难精确回到那个可检测的隐空间。 这篇论文做的,正是把这层直觉击穿。
4. 低基率场景
基率(base rate) 指目标样本在总体中的比例。低基率场景就是:你要找的那类样本很少。
放到水印检测里就是:
- 互联网里绝大多数图片都没有这类水印
- 真正带水印的 AI 图像只占极小比例
于是即便检测器在实验室的均衡数据集上 AUC 很高,只要假阳性稍微多一点,到了真实世界里 precision 就会迅速崩掉。
这也是论文批评 Tree-Ring “不具备真实部署价值”的重要依据。
如果用更具体的话说,低基率场景下真正危险的不是“召回率变低”,而是:
- 你本来要找的目标样本非常少
- 哪怕误报率只有一点点
- 误报总数也会迅速淹没真正的命中样本
所以论文强调,评估一个水印方案时,只报 ROC-AUC 远远不够,必须同时关心在真实先验分布下的 precision 和部署阈值。
Tree-Ring 三条链路
为了把这篇论文真正看明白,最有效的方式其实不是只记结论,而是把 嵌入、检测、攻击 三条链路并排看。
1. Tree-Ring 嵌入链路
标准高斯初始噪声 z
→ 做 FFT,进入频域
→ 在频域中心写入环形密钥图案
→ 做 IFFT,回到时域噪声 z_wm
→ 把 z_wm 送入扩散模型生成图像
→ 输出肉眼几乎看不出差异的带水印图像
这条链路的目标是:把水印写进生成起点,而不是写进最终像素。
2. Tree-Ring 检测链路
输入待检测图像
→ 用 DDIM 反演把图像往回推
→ 近似恢复其初始噪声状态
→ 对恢复出的 latent 做 FFT
→ 检查频域中心是否存在目标环形模式
→ 若匹配成功,则判定含有 Tree-Ring 水印
这条链路的核心前提是:逆扩散能把图像带回一个仍然保留水印痕迹的可检测状态。
3. 论文提出的攻击链路
输入带水印图像
→ 用公开 VAE 编码回 latent
→ 在 latent 域训练代理检测器
→ 用 PGD 迭代优化扰动
→ 把样本从“有水印区域”推到“无水印区域”
→ 用 VAE 解码回图像
→ 输出视觉质量几乎不变、但检测失效的结果
这条链路真正打击的是:Tree-Ring 对“攻击者无法有效进入隐空间”的默认假设。
4. 三条链路并排看,论文的核心就很清楚了
- 嵌入链路:想把水印埋进生成起点
- 检测链路:想把图像追溯回生成起点再检查
- 攻击链路:直接利用公开 VAE 抢先进入同一个隐空间,把痕迹抹掉
所以这篇论文并不是在“像素层面洗图”,而是在检测链路真正依赖的 latent 空间里拆掉水印成立条件。
Tree-Ring 的两个致命漏洞
论文并不是直接上攻击,而是先解释为什么 Tree-Ring 会输。
1. 水印 latent 不再服从高斯分布
Tree-Ring 原本是在高斯噪声上嵌入环形水印,但这样一来,带水印的 latent 分布就不再像原始高斯噪声那样自然。
这意味着什么?
- 水印不是“完全融入背景”的
- 它会在隐空间里留下统计可识别的痕迹
- 这些痕迹在中间扩散状态中依旧可被区分
2. 有水印和无水印的 latent 在空间中可分
论文用可视化方法展示:有水印 latent 和无水印 latent 在空间中会形成明显可分的簇。
换句话说:
- Tree-Ring 并没有把水印藏到“不可分辨”
- 它反而在隐空间里制造了可学习的边界
- 只要攻击者能重新回到 latent 域,就可以有针对性地把样本从“有水印簇”推走
这正是后续代理检测器 + PGD 攻击能够成功的根本原因。
如果把这件事翻译成更直白的话,就是:
- Tree-Ring 以为自己把水印“藏起来了”
- 但实际上它只是把水印“藏进了另一个可学习空间”
- 只要有人能进入这个空间,水印就不再隐蔽
这也是为什么论文并没有把攻击重点放在像素端,而是始终强调 latent 空间才是真正的决战场。
攻击成立:公开 VAE 是真正入口
这篇论文最重要的洞察不是“PGD 很强”,而是:
公开 VAE 让攻击者获得了进入目标隐空间的钥匙。
传统理解里,黑盒攻击者只能拿到生成图像,碰不到模型内部。但这里不一样。
因为目标扩散模型训练时复用了公开 VAE,所以攻击者自己也能用同一个 VAE 做:
- 图像编码到隐空间
- 在隐空间中建代理检测器
- 在隐空间中优化扰动
- 再把修改后的 latent 解码成图像
也就是说,攻击者虽然没有目标模型完整权限,但已经拿到了最关键的隐空间接口。
这就是论文标题里 public knowledge 的含义:公开知识并不只是“知道模型大概怎么训练”,而是能直接复用其关键组成部分。
攻击方法
一条非常完整且现实的黑盒链路
1. 威胁模型
论文假设的攻击者能力并不夸张:
- 只能黑盒访问目标扩散模型
- 只能拿到生成图像
- 不知道目标模型完整参数
- 但能获得训练时使用的公开 VAE
这比传统白盒攻击更现实,也更危险。
2. 攻击总流程
整套方法可以概括成下面 4 步:
输入带水印图像
→ 用公开 VAE 编码回 latent
→ 在 latent 域训练代理检测器
→ 用 PGD 在 latent 域做对抗扰动
→ 用 VAE 解码得到去水印图像
这 4 步里,真正关键的是中间两步:
- 代理检测器负责近似目标检测边界
- PGD 负责沿着这个边界反方向移动样本
也就是说,这篇论文并不是“直接猜怎么去水印”,而是先学会什么叫“有水印”,再反过来最小代价地把它改成“看起来像无水印”。
3. 为什么不是在像素域攻击
因为 Tree-Ring 水印本来就不在像素域,而在隐空间里。
像素域攻击的问题是:
- 很难准确定位水印特征
- 容易伤及图像内容
- 去水印效果有限
latent 域攻击则更像是直接对准“病灶”下手,因此更有效,也更省扰动预算。
这点其实也是这篇论文相比许多旧方法最本质的进步:攻击空间选对了,很多事情就从“很难”变成了“非常自然”。
技术细节
1. 代理检测器:从像素域搬到 latent 域
这是整篇论文最关键的创新之一。
过去一些代理攻击会直接在像素空间训练分类器,试图区分有水印和无水印图像。但 Tree-Ring 是隐空间水印,所以像素域信号太弱。
这篇论文改为:
- 先用 VAE 编码出 latent
- 再基于 latent 训练代理检测器
- 输入是隐向量而不是图像像素
论文中采用的结构是 ResNet18。
训练数据来源:
- 正样本:从目标模型生成的带水印图像
- 负样本:公开数据集中的普通自然图像,如 ImageNet
这样训练出来的检测器能够真正学到隐空间中的水印痕迹。
这里还有一个很重要的现实意义:攻击者并不需要和目标系统拥有完全一致的训练集。因为论文证明,只要 latent 分布中确实存在稳定的水印差异,代理检测器就足以学出一个可迁移的近似边界。
2. PGD:在隐空间里“轻轻挪一点”
PGD(Projected Gradient Descent)可以理解为一种经典、稳定的对抗攻击方法。
它做的不是暴力破坏图像,而是:
- 计算怎样修改 latent 才能让检测器误判
- 每次只改很小一步
- 每一步都投影回允许的扰动范围内
- 反复迭代,直到分类边界被跨过去
直白地说,它不是把图片“弄坏”,而是把带水印样本从“有水印区域”轻轻推到“无水印区域”。
如果换成分类问题的语言,可以把这个过程理解成:
- 代理检测器把 latent 分成“带水印”和“不带水印”两类
- PGD 的目标不是把样本改得面目全非
- 而是找到离原样本最近、但已经落到“无水印”一侧的位置
因此它特别适合这类“既要绕过检测,又不能破坏视觉质量”的任务。
3. 为什么只动 VAE,不动 U-Net
原因很简单:
- VAE 决定图像如何进入/离开隐空间
- U-Net 负责在隐空间里生成内容
而这篇攻击关注的是“进入隐空间并修改水印痕迹”,不是“重新走完整生成流程”。
所以:
- 攻击者只需要公开 VAE,不需要 U-Net
- 防御者若想切断这条路径,优先动的也应该是 VAE,而不是 U-Net
从工程角度看,这个结论也很致命。因为现实中:
- 重新训练 U-Net 成本很高
- 复用公开 VAE 非常常见
- 很多厂商确实默认“VAE 无关安全”
而本文恰恰说明,这个默认前提并不成立。
八、关键公式
1. DDIM 采样
xt−1=αt−1⋅xt−1−αtϵθ(xt)αt+1−αt−1⋅ϵθ(xt) x_{t-1} = \sqrt{\alpha_{t-1}} \cdot \frac{x_t - \sqrt{1-\alpha_t}\epsilon_\theta(x_t)}{\sqrt{\alpha_t}} + \sqrt{1-\alpha_{t-1}} \cdot \epsilon_\theta(x_t) xt−1=αt−1⋅αtxt−1−αtϵθ(xt)+1−αt−1⋅ϵθ(xt)
作用:描述扩散模型如何从噪声逐步生成图像。
2. DDIM 反演
xt+1=αt+1⋅xt−1−αtϵθ(xt)αt+1−αt+1⋅ϵθ(xt) x_{t+1} = \sqrt{\alpha_{t+1}} \cdot \frac{x_t - \sqrt{1-\alpha_t}\epsilon_\theta(x_t)}{\sqrt{\alpha_t}} + \sqrt{1-\alpha_{t+1}} \cdot \epsilon_\theta(x_t) xt+1=αt+1⋅αtxt−1−αtϵθ(xt)+1−αt+1⋅ϵθ(xt)
作用:把图像往回推,近似恢复初始噪声,用于水印检测。
3. VAE 编码与解码
z=E(x),x=D(z) z = E(x), \quad x = D(z) z=E(x),x=D(z)
作用:在图像和隐空间之间来回切换。整篇攻击几乎都围绕这一步展开。
4. 攻击目标
minx∗L(E(x∗),ynon-wm)s.t.∥x∗−x∥∞≤δ \min_{x^*} \mathcal{L}(E(x^*), y_{non\text{-}wm}) \quad \text{s.t.} \quad \|x^* - x\|_\infty \le \delta x∗minL(E(x∗),ynon-wm)s.t.∥x∗−x∥∞≤δ
含义:在扰动预算受限的前提下,让检测器把带水印样本判成“无水印”。
这条目标函数可以理解成这篇论文的核心优化目标:尽量少改图,但一定要把水印判别结果改掉。
5. PGD 迭代更新
zn+1=zn−α⋅Adam(∇zL) z_{n+1} = z_n - \alpha \cdot \text{Adam}(\nabla_z \mathcal{L}) zn+1=zn−α⋅Adam(∇zL)
并在每一步做投影,保证扰动不会超预算。
论文中这一步实际上对应的是“受约束的多步优化”,因此它比一次性添加随机噪声稳定得多,也更容易在保持画质的情况下精确打掉检测器信号。
6. 低基率场景下最关键的评价量:Precision
Precision=TPTP+FP \text{Precision} = \frac{TP}{TP + FP} Precision=TP+FPTP
低基率环境下,只要假阳性略多,precision 就会急剧下降。这也是 Tree-Ring 被批评无法落地部署的核心原因。
实验设计
1. 实验设置
- 目标模型:Stable Diffusion 2.1
- VAE:AutoencoderKL
- 代理检测器:ResNet18
- 攻击方法:PGD
2. 数据设置
论文主要用了两类设置:
Wm & UnWm
- 有水印图像与无水印图像一一对应
- 条件更理想
- 更接近学术测试环境
Wm & Pub
- 有水印图像来自目标模型生成
- 无水印图像来自公开自然图像数据集
- 更接近真实场景
其中最有代表性的结果来自 Wm & Pub,这也是论文最能说明问题的一组实验。
之所以 Wm & Pub 更重要,是因为它更接近真实攻击面:
- 正样本是目标系统生成的带水印图
- 负样本不是理想控制组,而是现实世界中的公开自然图像
这意味着攻击者并不需要精心构造完全配对的数据集,也能训练出有效的代理检测器。
3. 评价指标
检测性能:
- ROC-AUC
- PR-AUC
- TPR@1%FPR
- Accuracy
图像质量:
- CLIP Score
- LPIPS
- FID
这套指标组合很完整,因为它同时考察了两件事:
- 水印是否真的失效
- 图像是否仍然保持高质量
这些指标里,最值得单独解释的是:
- ROC-AUC:整体区分能力,越低说明检测器越分不清
- PR-AUC:在正类稀少时更敏感,适合看实际检出能力
- TPR@1%FPR:在极低误报率约束下还能检出多少,和现实部署关系很大
也正因为论文同时报了这些指标,才更能说明它不是只在某一个指标上“取巧”。
实验结果
1. 核心结果
论文中,原始 Tree-Ring 检测器在未攻击时表现非常强:
- ROC-AUC:0.993
- PR-AUC:0.994
- TPR@1%FPR:0.968
但在本文攻击后,指标下降到:
| 方法 | ROC-AUC | PR-AUC | TPR@1%FPR |
|---|---|---|---|
| 无攻击 | 0.993 | 0.994 | 0.968 |
| 本文方法(VAE + Wm&Pub) | 0.153 | 0.385 | 0.039 |
这个结果意味着:检测能力几乎被清零。
2. 与其他攻击的对比
相比对抗噪声攻击和像素域代理攻击,本文方法明显更强。根本原因不是“调参更狠”,而是它真正进入了正确的攻击空间:latent 空间。
换句话说,本文的优势不是某个小技巧,而是攻击建模本身就更接近水印真实存在的位置。
3. 图像质量几乎不受影响
论文同时报告 CLIP、LPIPS、FID 等指标变化不大,人眼视觉上也难以察觉明显退化。
这点非常关键,因为这意味着攻击并不是“把图破坏掉”,而是在尽量保留语义和视觉质量的前提下,精确移除水印。
从攻击者视角看,这种性质尤其危险。因为一旦攻击后的图像还能正常传播、正常使用、正常通过人工检查,那么水印系统就失去了最关键的威慑作用。
4. 换 VAE 还能不能打
论文还测试了跨 VAE 泛化:
- 用 SDXL VAE,攻击依然有效
- 用结构差异更大的 16-channel VAE,效果会下降,但仍优于像素域攻击
这说明:即便拿不到完全一致的 VAE,只要足够接近,攻击仍可能成立。
5. 没有 VAE 的模型,攻击明显变弱
在不依赖 VAE 的 Guided Diffusion 上,攻击效果显著下降。
这进一步证明:VAE 不是附带条件,而是攻击成立的核心入口。
这部分实验其实承担了一个“因果验证”的作用:它说明攻击不是因为作者随便训练了个好分类器,而是真的抓住了 VAE 这一结构性弱点。
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐

所有评论(0)