不可检测水印(Undetectable Watermark)
不可检测水印的目标是同时满足两件事:
- 可验证:合法方能检测出水印。
- 不可区分:带水印模型与原始模型在整体分布上几乎无法区分。
这比传统红绿水印更难,但也更接近理想形态。
为什么需要不可检测水印
传统方案的痛点:
- 红绿水印:通过显式 logits 偏置嵌入信号,容易留下统计痕迹。
- 冈贝尔水印:单次生成失真小,但多次响应可能出现可利用规律。
不可检测水印的关键思路是:只在高熵位置嵌入,并让引导后的分布与原分布保持等价。
核心概念:经验熵(Empirical Entropy)
经验熵用于衡量某段 token 序列在生成时的不确定性。
H ( v 1 , ... , v ℓ ) = − ∑ i = 1 ℓ p ( v i ) log p ( v i ) H(v_1,\dots,v_\ell) = -\sum_{i=1}^{\ell} p(v_i)\log p(v_i) H(v1,...,vℓ)=−i=1∑ℓp(vi)logp(vi)
- 熵高:可选 token 多,嵌入空间大。
- 熵低:可选 token 少,嵌入更容易引起分布失真。
| 序列类型 | 概率特征 | 熵 | 是否适合嵌入 |
|---|---|---|---|
| 低熵序列(如确定性表达) | 某些位置接近唯一答案 | 低 | 否 |
| 高熵序列(如开放式续写) | 多个 token 概率接近 | 高 | 是 |
经验熵主要用于"筛选可嵌入位置"。
核心机制
只在高熵序列嵌入
1) 嵌入条件
H ( v 1 , ... , v ℓ ) ≥ H 0 H(v_1,\dots,v_\ell) \ge H_0 H(v1,...,vℓ)≥H0
H0是预设阈值。- 只有高于阈值的上下文才触发水印信号。
2) PRF 引导信号
r = PRF ( g k , v 1 , ... , v ℓ ) r = \text{PRF}(gk, v_1,\dots,v_\ell) r=PRF(gk,v1,...,vℓ)
gk:密钥。(v_1...v_l):高熵上下文。r:伪随机输出,用于决定后续引导策略。
3) 引导原则
- 将
r映射到目标 token 子集或采样约束。 - 只做轻微、受控的引导。
- 目标不是"强行改写分布",而是"在等价分布中编码可验证信号"。
不可检测性的形式化定义
∣ Pr [ D M , M ( 1 λ ) → 1 ] − Pr g k [ D M , Watermark g k M ( 1 λ ) → 1 ] ∣ ≤ negl ( λ ) \left| \Pr[D^{M,M}(1^\lambda) \to 1] - \Pr_{gk}[D^{M,\text{Watermark}_{gk}^{M}}(1^\lambda) \to 1] \right| \le \text{negl}(\lambda) Pr[DM,M(1λ)→1]−gkPr[DM,WatermarkgkM(1λ)→1] ≤negl(λ)
这一定义的直观含义:
- 任意区分器
D(算法或攻击者)去区分"原模型输出"和"带水印输出",其优势最多是可忽略量。 - 安全参数
lambda增大时,这个优势趋近于 0。
换句话说,攻击者在统计上几乎只能"瞎猜"。
关键设计
1) 为什么要限制在高熵区
- 低熵区几乎没有采样自由度,嵌入容易产生可检测偏差。
- 高熵区有足够自由度,更容易隐藏引导信号。
2) 为什么强调 PRF 输入不重复
- PRF 是确定性的:相同输入会得到相同输出。
- 若输入频繁重复,攻击者可通过重复样本做相关性分析。
- 高熵上下文更不易重复,可降低被反向建模风险。
3) 与硬偏置方案的本质差异
- 硬偏置:直接推高/压低一类 token 概率,统计痕迹更明显。
- 不可检测方案:强调分布等价下的可验证编码,重点在"可验证但难区分"。