语音反欺骗与音频水印 —— ASVspoof 5、AudioSeal、WaveVerify
语音克隆比防御跑得快。2026 年的生产语音系统需要两样东西:一个检测器(AASIST、RawNet2)来分类真假语音,一个水印(AudioSeal)能扛住压缩和编辑。两个都上,否则别上语音克隆。
类型: Build 语言: Python 前置要求: 阶段 6 · 06(说话人识别)、阶段 6 · 08(语音克隆) 预计时间: ~75 分钟
问题背景
三种相关的防御:
- 反欺骗 / 深伪检测。 给一段音频,它是合成的还是真实的?ASVspoof 基准(ASVspoof 2019 → 2021 → 5)是黄金标准。
- 音频水印。 在生成的音频里嵌入一个不可感知的信号,检测器之后能把它提取出来。AudioSeal(Meta)和 WavMark 是开源选项。
- 可认证溯源。 对音频文件 + 元数据做密码学签名。C2PA / 内容真实性倡议。
检测应对不配合的对手。水印应对合规——AI 生成的音频应当能被识别出是 AI 生成的。2026 年两者都是必需的。
核心概念
ASVspoof 5 —— 2024-2025 的基准
与前几届相比最大的变化:
- 众包数据(不是录音棚干净录音)—— 真实条件。
- 约 2000 个说话人(之前约 100 个)。
- 32 种攻击算法。 TTS + 语音转换 + 对抗扰动。
- 两条赛道。 对抗措施(CM)独立检测;抗欺骗 ASV(SASV)用于生物识别系统。
ASVspoof 5 上的当时最优:约 7.23% EER。在更老的 ASVspoof 2019 LA 上:0.42% EER。真实世界部署:在野外音频上预期 5-10% EER。
AASIST 和 RawNet2 —— 检测模型家族
AASIST(2021,更新到 2026)。在频谱特征上做图注意力。当前 ASVspoof 5 对抗措施任务的 SOTA。
RawNet2。 原始波形上的卷积前端 + TDNN 骨干。更简单的基线;微调后仍有竞争力。
NeXt-TDNN + SSL 特征。 2025 年变体:ECAPA 风格 + WavLM 特征 + focal loss。在 ASVspoof 2019 LA 上达到 0.42% EER。
AudioSeal —— 2024 年的水印默认
Meta 的 AudioSeal(2024 年 1 月,v0.2 2024 年 12 月)。关键设计:
- 局部化。 在 16 kHz 采样分辨率(1/16000 s)下逐帧检测水印。
- 生成器 + 检测器联合训练。 生成器学会嵌入不可闻信号;检测器学会穿过各种增强找到它。
- 鲁棒。 扛住 MP3 / AAC 压缩、EQ、变速 ±10%、噪声混合 +10 dB SNR。
- 快。 检测器以 485 倍实时运行;比 WavMark 快 1000 倍。
- 容量。 16 比特负载(可编码模型 ID、生成时间戳、用户 ID),可嵌入每段语音。
WavMark
AudioSeal 之前的开源基线。可逆神经网络,32 比特/秒。问题:
- 同步靠暴力搜索,慢。
- 能被高斯噪声或 MP3 压缩去掉。
- 不适合实时。
WaveVerify(2025 年 7 月)
针对 AudioSeal 的弱点——特别是时间操纵(倒放、变速)。用基于 FiLM 的生成器 + 专家混合检测器。在标准攻击上与 AudioSeal 旗鼓相当;能处理时间编辑。
对手利用的那道缝
来自 AudioMarkBench:「在变调下,所有水印的比特恢复准确率都低于 0.6,意味着近乎完全去除。」变调是通用攻击。 2026 年没有任何水印对激进的变调修改完全鲁棒。这正是你需要在水印之外再上检测(AASIST)的原因。
C2PA / 内容真实性倡议
不是 ML 技术——是一种清单格式。音频文件携带关于创作工具、作者、日期的密码学签名元数据。Audiobox / Seamless 用它。对溯源有好处;坏人重新编码并剥离元数据后它就什么都做不了。
v4-audio-watermark动手构建
第 1 步:一个简单的频谱特征检测器(玩具)
def spectral_rolloff(spec, percentile=0.85):
cum = 0
total = sum(spec)
if total == 0:
return 0
threshold = total * percentile
for k, v in enumerate(spec):
cum += v
if cum >= threshold:
return k
return len(spec) - 1
def is_suspicious(audio):
spec = magnitude_spectrum(audio)
rolloff = spectral_rolloff(spec)
return rolloff / len(spec) > 0.92合成语音常有异常平坦的高频能量。生产检测器用 AASIST,不是这个。但直觉是成立的。
第 2 步:AudioSeal 嵌入 + 检测
from audioseal import AudioSeal
import torch
generator = AudioSeal.load_generator("audioseal_wm_16bits")
detector = AudioSeal.load_detector("audioseal_detector_16bits")
audio = load_wav("generated.wav", sr=16000)[None, None, :]
payload = torch.tensor([[1, 0, 1, 1, 0, 1, 0, 0, 1, 1, 0, 1, 0, 1, 1, 0]])
watermark = generator.get_watermark(audio, sample_rate=16000, message=payload)
watermarked = audio + watermark
result, decoded_payload = detector.detect_watermark(watermarked, sample_rate=16000)
# result: float in [0, 1] — probability of watermark presence
# decoded_payload: 16 bits; match against embedded payload第 3 步:评估 —— EER
def eer(real_scores, fake_scores):
thresholds = sorted(set(real_scores + fake_scores))
best = (1.0, 0.0)
for t in thresholds:
far = sum(1 for s in fake_scores if s >= t) / len(fake_scores)
frr = sum(1 for s in real_scores if s < t) / len(real_scores)
if abs(far - frr) < best[0]:
best = (abs(far - frr), (far + frr) / 2)
return best[1]第 4 步:生产集成
def safe_tts(text, voice, clone_reference=None):
if clone_reference is not None:
verify_consent(user_id, clone_reference)
audio = tts_model.synthesize(text, voice)
audio_with_wm = audioseal_embed(audio, payload=build_payload(user_id, model_id))
manifest = c2pa_sign(audio_with_wm, user_id, timestamp=now())
return audio_with_wm, manifest每次生成都交付:(1) 水印,(2) 签名清单,(3) 符合保留策略的审计日志。
实际使用
| 用例 | 防御 |
|---|---|
| 上线 TTS / 语音克隆 | 每个输出都嵌 AudioSeal(没得商量) |
| 生物识别语音解锁 | AASIST + ECAPA 集成;活体挑战 |
| 呼叫中心欺诈检测 | 对 20% 的来电样本跑 AASIST |
| 播客真实性 | 上传时做 C2PA 签名,AI 生成的就加 AudioSeal |
| 研究 / 训练检测器 | ASVspoof 5 训练/开发/评估集 |
坑
- 有水印却从不跑检测器。 没意义。把检测器放进你的 CI。
- 检测没校准。 在 ASVspoof LA 上训的 AASIST 会过拟合;真实世界准确率会掉。在你的领域上校准。
- 变调那道缝。 激进的变调能去掉大多数水印。准备一个检测兜底。
- 剥元数据再转托管。 C2PA 重新编码就轻易绕过。永远把密码学 + 感知(水印)防御一起上。
- 把活体当检测。 让用户念一句随机短语。防得住回放攻击,防不住实时克隆。
拿去用
存为 outputs/skill-spoof-defender.md。为一次语音生成部署挑选检测模型、水印、溯源清单和运维手册。
练习
- 简单。 跑
code/main.py。在合成音频上做玩具检测器 + 玩具水印嵌入/检测。 - 中等。 装上
audioseal,在一个 TTS 输出里嵌入一个 16 比特负载,再解码。用噪声破坏音频并测量比特恢复准确率。 - 困难。 在 ASVspoof 2019 LA 上微调一个 RawNet2 或 AASIST。测量 EER。在一组留出的 F5-TTS 生成片段上测试——看分布外检测怎么退化。
关键术语
| 术语 | 大家嘴上怎么说 | 它实际指什么 |
|---|---|---|
| ASVspoof | 那个基准 | 两年一届的挑战赛;2024 = ASVspoof 5。 |
| CM(对抗措施) | 检测器 | 分类器:真实语音 vs 合成 / 转换。 |
| SASV | 说话人验证 + CM | 集成的生物识别 + 欺骗检测。 |
| AudioSeal | Meta 水印 | 局部化,16 比特负载,比 WavMark 快 485 倍。 |
| 比特恢复准确率 | 水印存活率 | 攻击后恢复出的负载比特占比。 |
| C2PA | 溯源清单 | 关于创作 / 作者的密码学元数据。 |
| AASIST | 检测器家族 | 基于图注意力的反欺骗 SOTA。 |
延伸阅读
- Todisco et al. (2024). ASVspoof 5 —— 当前的基准。
- Defossez et al. (2024). AudioSeal —— 水印默认。
- Chen et al. (2025). WaveVerify —— 对付时间攻击的 MoE 检测器。
- Jung et al. (2022). AASIST —— SOTA 检测骨干。
- AudioMarkBench (2024) —— 鲁棒性评估。
- C2PA specification —— 溯源清单格式。