引言:当"眼见为实"失效之后
一张由扩散模型生成的"现场照片",可以骗过绝大多数肉眼;一段克隆语音,几秒钟样本就够以假乱真。当生成模型把造假成本压到接近零,"这段内容是真是假"就从八卦问题变成了基础设施问题:新闻机构需要证明照片没被篡改,平台需要标记 AI 生成内容,司法取证需要完整的来源链。
目前业界形成了两条互补的防线:被动检测(事后判断内容是不是 AI 生成的)和主动溯源(在内容生产或发布时嵌入可验证的来源信息)。这篇文章把两条线的技术原理、攻防现状和落地方案讲清楚。
两条防线:被动检测 vs 主动溯源
| 维度 | 被动检测 | 主动溯源/水印 | | --- | --- | --- | | 介入时机 | 内容传播后 | 内容生成/发布时 | | 技术核心 | 统计痕迹、频域伪影 | 鲁棒嵌入 + 密码学签名 | | 抗攻击能力 | 弱(重压缩、重采样即退化) | 较强(可抵抗常见变换) | | 覆盖率 | 理论上任意内容 | 仅限接入溯源体系的工具 | | 典型代表 | DetectGPT、各类 AI 检测器 | C2PA、SynthID、Stable Signature |
被动检测的死穴是"分布外失效":检测器在训练时见过的生成模型上表现尚可,一换新模型准确率就跳水,更别说针对检测器做的对抗扰动。所以行业共识是:被动检测只能当辅助信号,真正的支柱是主动溯源。
生成式水印的技术原理
文本水印的代表作是 Kirchenbauer 等人 2023 年提出的"绿名单"方案:生成每个 token 时,用一个秘密密钥对词表做伪随机划分,给"绿色"词的 logit 加一个偏置,让输出悄悄偏向绿色词。检测时用同一密钥统计绿色词占比,正常文本约 50%,带水印文本显著偏高。优点是检测不需要原模型,缺点是换几个同义词、做一轮 paraphrase 就可能把信号洗掉。
图像水印分两类。一类是生成后嵌入:传统频域方法(DCT/DWT 系数微调)抗压缩但不抗重生成;学习型方法(如 Stable Signature)把水印网络与扩散模型联合微调,让水印直接长在生成过程里。另一类是语义级水印——Tree-Ring 方案在扩散的初始噪声里嵌入环形图案,即使图像被裁剪、加噪、重新走一轮 img2img,图案仍能从反演的噪声里恢复,是目前抗攻击性最强的公开方案之一。
音频水印则利用人耳掩蔽效应,把信息藏在感知不敏感的频带。Meta 的 AudioSeal 用联合训练的编码器/检测器实现了样本级定位——不仅能判断"是不是 AI 生成",还能标出音频里哪几段是合成的。
代码示例:绿名单文本水印
下面是绿名单水印的核心逻辑,用 Hugging Face 的 logits processor 实现:
import torch from transformers import LogitsProcessor class GreenListProcessor(LogitsProcessor): def __init__(self, vocab_size, key=42, gamma=0.25, delta=2.0): self.g, self.delta = torch.Generator().manual_seed(key), delta self.gamma, self.vocab_size = gamma, vocab_size def green_ids(self, prev_token): g = torch.Generator().manual_seed(self.g.initial_seed() + prev_token) perm = torch.randperm(self.vocab_size, generator=g) return perm[: int(self.gamma * self.vocab_size)] # 绿色词表 def __call__(self, input_ids, scores): for i in range(scores.size(0)): prev = input_ids[i, -1].item() scores[i, self.green_ids(prev)] += self.delta # 绿色词加分 return scores # 生成时: model.generate(..., logits_processor=[GreenListProcessor(tokenizer.vocab_size)]) # 检测时: 用相同密钥重放绿色词表, 统计绿色词占比 z 分数, z > 4 判定为带水印实际部署时还要处理细节:低熵位置(如代码、格式化文本)要跳过加水印,否则会明显影响生成质量;检测端要按文本长度做显著性校正,短文本的误判率天然偏高。
标准与生态:C2PA 进展
技术之外,互操作性才是溯源能否规模化的关键。C2PA(内容来源与真实性联盟)制定的 Content Credentials 标准目前的思路是:相机或生成工具在输出文件里嵌入一份签名清单(manifest),记录"谁、用什么工具、什么时间"创建了内容,后续每次编辑都追加一条签名记录,形成完整的溯源链。Adobe、微软、尼康、徕卡等厂商已经落地支持。
AIGC 场景下,C2PA 与水印是互补关系:清单负责"来源链",水印负责"清单被剥离后的兜底"——毕竟元数据可以轻易被截图、转码抹掉,而嵌在像素/波形里的水印更难清除。一个健壮的系统应该同时部署两者。
对抗与绕过:攻防现实
必须对攻防态势保持清醒。文本水印怕 paraphrase 和翻译攻击;图像水印怕"重生成"(把图喂给另一个扩散模型重画一遍);元数据溯源怕格式转换。目前没有一个方案能同时扛住所有攻击。
实战建议是分层防御:生成端嵌语义水印 + 发布端加 C2PA 清单 + 平台侧保留被动检测作为异常信号,三层叠加后,攻击者需要同时突破三种机制,成本会高到足以拦住绝大多数滥用。同时要接受"检测