DualGuard: Dual-stream Large Language Model Watermarking Defense against Paraphrase and Spoofing Attack¶
会议: ACL 2026
arXiv: 2512.16182
代码: https://github.com/hlee-top/DualGuard
领域: LLM 安全 / 水印
关键词: 双流水印、Spoofing 攻击、Paraphrase 攻击、对抗式溯源、语义不变水印
一句话总结¶
DualGuard 首次提出双流水印机制:用两个互补的标准 / 对抗水印头根据当前内容是"良性"还是"恶意"自适应地注入不同水印,使良性文本两路一致、恶意文本两路发散,从而在保持对 paraphrase 鲁棒的同时首次能检测并溯源 piggyback spoofing 注入的恶意片段。
研究背景与动机¶
领域现状:LLM 水印主流做法是在 logits 上叠加一组"绿名单/红名单"偏置(KGW、SIR、XSIR、EWD、SWEET 等)或在采样层引入伪随机数(AAR、SynthID、DIPmark),以便事后用统计检验追溯文本是否来自某个模型。绝大部分工作的优化目标都是 paraphrase 鲁棒性——即使被换词改写,水印仍能被识别。
现有痛点:作者指出这种"片面追求鲁棒"反而埋下了 piggyback spoofing 攻击的大坑。攻击者拿到一段带水印的 LLM 输出后,往里塞入恶意/有害内容(仇恨言论、虚假信息),水印却仍然存活,于是有害内容会被反向归因到模型提供方,水印从"保护伞"变成"诬陷证据"。现有唯一的 spoofing 防御 An et al. (2025) 只能在事后把被污染的文本标记为"无水印",无法判断哪段是恶意、更无法溯源。
核心矛盾:要抗 paraphrase 就必须让水印对局部改写不敏感;可一旦不敏感,恶意 spoofing 注入也会被一并保留。换言之,对 paraphrase 的鲁棒性与对 spoofing 的可检测性天然冲突。
本文目标:在一套水印框架内同时拿到 (i) paraphrase 鲁棒、(ii) spoofing 可检测、(iii) 恶意段可溯源、(iv) 文本质量不退化四个目标。
切入角度:作者观察到良性内容和恶意内容在嵌入空间上是可分的;若维持"两个互补水印头",可以让二者在良性区域保持一致、在恶意区域刻意发散——发散程度本身就是 spoofing 信号。
核心 idea:用对比损失训练 standard / adversarial 两个水印头,使其在良性文本上 cosine 相似、在恶意文本上 cosine 相反;在生成阶段按窗口动态切换注入头,在检测阶段用两路一致性同时判定水印 + 检测 spoofing + 追溯恶意源。
方法详解¶
整体框架¶
输入为待生成的 LLM token 序列 \(y_{:t}\),输出为带双流水印的文本以及检测时的三类分数:水印检测分 \(\text{Score}_{wd}\)、spoofing 检测分 \(\text{Score}_{sd}\)、spoofing 溯源分 \(\text{Score}_{st}\)。整个流程包含三段:(1) 用映射模型 \(\mathcal{G}\) 离线训练得到共享主干 + 两个水印头 \(\Theta_s, \Theta_a\);(2) 解码时按固定窗口 \(k\) 计算当前前缀的两路 cosine 距离 \(\text{dist}(y_{:t})\),距离 \(<\alpha\) 用 \(\Theta_s\)、否则切到 \(\Theta_a\),把输出经 tanh + 随机投影映射到 \(|\mathcal{V}|\) 维并按 \(P_{\mathcal{M}'}^t = P_\mathcal{M}^t + \delta\cdot P_\mathcal{M}^t P_\Theta^t\) 注入;(3) 检测时同样按窗口重放头选择,再分别用平均水印 logit、平均双流距离、对抗头命中率三种统计完成水印检测 / spoofing 检测 / 溯源。
关键设计¶
-
双头映射网络 \(\mathcal{G}\)(标准头 + 对抗头):
- 功能:把当前 token 前缀的嵌入 \(e_t=\mathcal{E}(y_{t-\rho:t})\) 同时映射成两组水印 logits \(\Theta_s(e_t), \Theta_a(e_t)\),作为后续注入和检测的"双流信号"。
- 核心思路:共享多层 FFN + 残差连接的主干,末端两个独立头;为保证两头都具备"语义不变性",每一头都最小化语义损失 \(\mathcal{L}_{sem}(\Theta)\),含三项——相似嵌入产生相似水印(用 \(\phi(x)=\tanh(\tau(x-\bar{x}))\) 把余弦放缩到正负均衡)、单样本水印在词表上正负数相等、整个数据集上每个词位的水印期望为零,从而在 paraphrase 后仍能复现近似水印且不偏置词分布。
- 设计动机:单流水印只能在"被检测到"和"被绕过"之间二选一;双头可在保持各自语义不变性的同时让两路携带互补信息,为后续 spoofing 检测留出可比对的"参照系"。
-
内容敏感对比损失 \(\mathcal{L}_{con}\):
- 功能:强制两个头在良性子集 \(\mathcal{D}_s\) 上 cosine → \(+1\)、在恶意子集 \(\mathcal{D}_a\) 上 cosine \(\le -\eta\),即"良性一致、恶意发散"。
- 核心思路:对良性样本最小化 \(-\cos(\Theta_s(e_i),\Theta_a(e_i))\);对恶意样本用 hinge \(\max(0,\cos(\Theta_s,\Theta_a)+\eta)\) 把相似度推到分离 margin \(\eta\) 之下;总损失 \(\mathcal{L}=\mathcal{L}_{sem}+\lambda\mathcal{L}_{con}\) 在语义不变和内容敏感之间做权衡。
- 设计动机:spoofing 的本质是良性文本里突然插入恶意片段;若两头在恶意区域天然发散,则双头距离本身就是 spoofing 的免训练统计量,无需额外的有害内容分类器。
-
窗口级自适应注入 + 三路检测:
- 功能:解码时每隔 \(k\) 个 token 做一次头选择,把"切换轨迹"也编码进文本,使得检测端能复现路径并产出三种分数。
- 核心思路:注入端用 \(\Theta=\Theta_s\) if \(\text{dist}(y_{:t})<\alpha\) else \(\Theta_a\)(窗口边界判定),并以 \(P_\Theta^t = F(\tanh(\gamma\Theta(e_t)))\) 投影到词表后按乘性方式 \(\delta\cdot P_\mathcal{M}^t P_\Theta^t\) 注入以减小对原分布的扰动;检测端先用同样规则恢复头序列得到 \(\text{Score}_{wd}=\text{mean}\,P_\Theta^t[y_t]\) 判水印,再用 \(\text{Score}_{sd}=\text{mean}\,\text{dist}(y_{:t})\) 判 spoofing,最后对所有被对抗头覆盖的 token 计算命中率 \(\text{Score}_{st}=\frac{1}{N}\sum\mathbb{1}(P_\Theta^t[y_t]>0)\) 用于溯源:模型自身生成的恶意内容命中率高、被外部 spoof 注入的恶意内容命中率低,二者形成可区分的不对称信号。
- 设计动机:把"何时切换"做成 token 序列的函数,使检测无须任何额外密钥即可复现;同时利用"模型自产恶意"与"外部 spoof 恶意"在头匹配上的天然差异,把溯源转化为统计阈值问题。
损失函数 / 训练策略¶
两个头联合训练:\(\mathcal{L}=\mathcal{L}_{sem}(\Theta_s)+\mathcal{L}_{sem}(\Theta_a)+\lambda\mathcal{L}_{con}\);\(\mathcal{L}_{sem}\) 含 cosine 拟合项 + 单样本平衡项 + 数据集级无偏项;\(\mathcal{L}_{con}\) 用对比 + margin \(\eta\) 把恶意子集推开。注入端关键超参:窗口 \(k\)、阈值 \(\alpha\)、缩放 \(\gamma\)、注入强度 \(\delta\)、前缀长度 \(\rho\)。映射网络只训一次即可服务多种 backbone(OPT-1.3B、Llama-3.1-8B-Instruct 等),因为最终通过随机投影 \(F(\cdot)\) 适配任意词表。
实验关键数据¶
主实验¶
在 RealNewsLike (C4) 与 BookSum 上同时评估 paraphrase 鲁棒性 (\(\text{Robustness}_{para}\)) 与 spoofing 鲁棒性 (\(\text{Robustness}_{spoof}\)),下表给出 OPT-1.3B 上的 Overall AUC(越高越好)。
| 数据集 | 指标 | KGW | SWEET | SIR | XSIR | DualGuard |
|---|---|---|---|---|---|---|
| RealNewsLike | Para AUC | 0.9871 | 0.9731 | 0.9235 | 0.9224 | 0.9680 |
| RealNewsLike | Spoof AUC | 0.5141 | 0.5730 | 0.4190 | 0.4300 | 0.9284 |
| RealNewsLike | Overall AUC | 0.7506 | 0.7730 | 0.6713 | 0.6762 | 0.9482 |
| BookSum | Para AUC | 0.9777 | 0.9849 | 0.9306 | 0.9601 | 0.9760 |
| BookSum | Spoof AUC | 0.4613 | 0.5136 | 0.4190 | 0.3882 | 0.9552 |
| BookSum | Overall AUC | 0.7195 | 0.7492 | 0.6748 | 0.6741 | 0.9656 |
在 Llama-3.1-8B-Instruct 上同样观察到 Spoof AUC 从所有 baseline 的 \(\le 0.57\) 跃升到 0.9159 / 0.9354,Overall AUC \(\ge 0.92\)。所有基线在 spoofing 攻击下基本退化到接近随机(AUC ≈ 0.5),印证了"片面追求 paraphrase 鲁棒"的脆弱性。
消融实验¶
| 配置 | Para AUC | Spoof AUC | 说明 |
|---|---|---|---|
| Full DualGuard (OPT-1.3B, RealNewsLike) | 0.9680 | 0.9284 | 完整双头 + 对比损失 + 自适应注入 |
| 单流(仅 \(\Theta_s\),近似 SIR) | 0.9235 | 0.4190 | 去掉对抗头后退化为传统语义不变水印,spoof AUC 跌至随机 |
| 单流(仅 \(\Theta_a\),近似 XSIR) | 0.9224 | 0.4300 | 同上,对抗头无对照亦无法识别 spoof |
| 仅去掉对比损失 \(\mathcal{L}_{con}\) | ≈Para 不变 | 接近 0.5 | 两头不发散,spoofing 信号消失 |
(其中"单流"行对应论文 Table 1 中 SIR / XSIR 列,可视为去掉双头机制的天然 ablation;论文还在 Appendix 给出窗口 \(k\)、阈值 \(\alpha\)、margin \(\eta\) 的敏感性分析,结论是 \(k\in[10,20]\)、\(\alpha\) 在两头距离均值附近时最稳。)
关键发现¶
- 双头是关键:去掉任一头都让 Spoof AUC 从 0.92+ 掉回 0.4–0.5,说明 spoofing 检测能力完全来自"两路差异"而非任何单一水印。
- paraphrase 性能基本无损:DualGuard 的 Para AUC 与 SWEET / SIR 等强 baseline 持平甚至更好,说明双流机制并未牺牲已有的鲁棒性。
- 跨模型可迁移:同一组 \(\mathcal{G}\) 训出后无需重训即可服务 OPT-1.3B、Llama-3.1-8B-Instruct,得益于 \(F(\cdot)\) 的随机投影适配任意词表。
- 溯源准确性高:\(\text{Score}_{st}\) 在"模型自产恶意"和"外部 spoof 恶意"上呈现明显双峰,作者据此实现了首次"恶意片段来源归因"。
亮点与洞察¶
- 把"防御"重新表述为"对比信号":以往水印工作只问"能不能被检测出来",本文加了一句"两路水印是否一致",立即把对抗鲁棒性转化为可计算的统计量——这种"双流自校验"思想可以迁移到任何需要溯源的隐写场景。
- 训练与检测对称的窗口切换:注入端按窗口决定用哪个头、检测端按同样规则复盘,整个过程无须额外密钥/同步信息,且天然兼容流式生成,工程上很优雅。
- 首次区分"模型自产恶意 vs 外部注入恶意":通过对抗头命中率的不对称性给出溯源信号,这对模型提供方在面对合规审查时极有价值——可证明"恶意内容不是我说的"。
局限与展望¶
- 依赖良性/恶意数据划分:对比损失需要预先标注的 \(\mathcal{D}_s, \mathcal{D}_a\),若恶意分布偏离训练分布(如新型仇恨语料、跨语种攻击),双头发散性可能弱化。
- 窗口式切换可能被定向攻击:攻击者若知道 \(k\) 与 \(\alpha\),理论上可以构造"两头都接近边界"的输入,降低 spoof 检测信号;论文未深入讨论自适应攻击者。
- 文本质量评估偏窄:仅在 perplexity / 任务指标上验证质量,未做人评,且乘性注入对低概率词的影响仍可能在长文本里累积。
- 延伸方向:把对比扩展到多头(标准 / 安全 / 隐私 / 版权),即可一次检测多类型 spoofing;或把映射模型本身做成 LoRA 模块以支持持续学习。
相关工作与启发¶
- vs KGW / SWEET / EWD:他们靠"绿名单 + 熵控"做单流水印,paraphrase AUC 接近 1,但 spoof AUC ≈ 0.5;本文用双流把 spoof AUC 拉到 0.93+,证明"鲁棒 vs 可检测"是设计取舍而非物理上限。
- vs SIR / XSIR:同样是语义不变水印的代表,但只有一个头;DualGuard 把它们扩成"标准头 + 对抗头"并补上对比损失,是直接的功能增量。
- vs An et al. (2025) 的 post-hoc 去水印:他们在事后训练模型去除被 spoofed 文本的水印(标为"非水印"),既无法定位也无法溯源;DualGuard 把防御推进到"识别 + 溯源"两步走。
- 启发:任何"对抗某种扰动同时希望识别这种扰动"的任务(如版权深度合成检测、AI 文本对抗鲁棒蒸馏)都可以借鉴"双互补头 + 对比损失"这一通用范式。
评分¶
- 新颖性: ⭐⭐⭐⭐⭐ 首次把 spoofing 防御并入水印框架,并给出溯源能力,破除"鲁棒越好越安全"的惯性。
- 实验充分度: ⭐⭐⭐⭐ 覆盖 2 个 backbone × 4 个数据集 × 9 个 baseline,溯源做了不对称分析,但缺自适应攻击者实验。
- 写作质量: ⭐⭐⭐⭐ 动机—矛盾—方案推进清晰,公式自洽,图示直观;部分细节藏在 Appendix 略影响阅读连贯。
- 价值: ⭐⭐⭐⭐⭐ 直接对应 LLM 商业部署最棘手的"被嫁祸"风险,工业可落地性强。