Phase 06 - Lesson 16

Anti-spoofing de Voz y Marca de Agua en Audio — ASVspoof 5, AudioSeal, WaveVerify

This lesson includes a graded coding exercise that runs in your browser, unlocked with lifetime access.

La clonación de voz llegó al mercado más rápido que las defensas. Los sistemas de voz en producción de 2026 necesitan dos cosas: un detector (AASIST, RawNet2) que clasifica habla real versus falsa, y una marca de agua (AudioSeal) que sobrevive a la compresión y la edición. Entrega ambas o no entregues clonación de voz.

Tipo: Build Lenguajes: Python Requisitos previos: Fase 6 · 06 (Reconocimiento de Hablante), Fase 6 · 08 (Clonación de Voz) Tiempo: ~75 minutos

El Problema

Tres defensas relacionadas:

  1. Anti-spoofing / detección de deepfake. Dado un fragmento de audio, ¿es sintético o real? Los benchmarks ASVspoof (ASVspoof 2019 → 2021 → 5) son el estándar de referencia.
  2. Marca de agua en audio. Incrustar una señal imperceptible en el audio generado que un detector pueda extraer luego. AudioSeal (Meta) y WavMark son las opciones abiertas.
  3. Procedencia autenticada. Firma criptográfica de archivos de audio + metadatos. C2PA / Content Authenticity Initiative.

La detección se ocupa de adversarios que no cooperan. La marca de agua se ocupa del cumplimiento — el audio generado por IA debería ser identificable como tal. Ambas son obligatorias en 2026.

El Concepto

Anti-spoofing versus marca de agua versus procedencia — tres capas de defensa

ASVspoof 5 — el benchmark de 2024-2025

El mayor cambio respecto a las ediciones anteriores:

  • Datos crowdsourced (no limpios de estudio) — condiciones realistas.
  • ~2000 hablantes (versus ~100 antes).
  • 32 algoritmos de ataque. TTS + conversión de voz + perturbación adversaria.
  • Dos pistas. Detección autónoma por contramedida (CM); ASV robusto a spoofing (SASV) para sistemas biométricos.

Estado del arte en ASVspoof 5: ~7,23% de EER. En el ASVspoof 2019 LA más antiguo: 0,42% de EER. Despliegue en el mundo real: espera entre 5 y 10% de EER en fragmentos in-the-wild.

AASIST y RawNet2 — familias de modelos de detección

AASIST (2021, actualizado hasta 2026). Atención sobre grafos en características espectrales. SOTA actual en la tarea de contramedida de ASVspoof 5.

RawNet2. Front-end convolucional sobre la forma de onda en crudo + backbone TDNN. Baseline más simple; aún competitivo con fine-tuning.

NeXt-TDNN + características SSL. Variante de 2025: estilo ECAPA + características WavLM + focal loss. Alcanza el 0,42% de EER en ASVspoof 2019 LA.

AudioSeal — la marca de agua por defecto de 2024

El AudioSeal de Meta (ene 2024, v0.2 dic 2024). Diseño clave:

  • Localizado. Detecta la marca de agua cuadro a cuadro a la resolución de muestra de 16 kHz (1/16000 s).
  • Generador + detector entrenados conjuntamente. El generador aprende a incrustar una señal inaudible; el detector aprende a encontrarla a pesar de las augmentaciones.
  • Robusto. Sobrevive a compresión MP3 / AAC, EQ, cambio de velocidad ±10%, mezcla de ruido +10 dB SNR.
  • Rápido. El detector corre a 485× tiempo real; 1000× más rápido que WavMark.
  • Capacidad. Payload de 16 bits (puede codificar ID del modelo, marca de tiempo de generación, ID del usuario) incrustable en cada locución.

WavMark

El baseline abierto anterior a AudioSeal. Red neuronal invertible, 32 bits/seg. Problemas:

  • La fuerza bruta de sincronización es lenta.
  • Puede eliminarse con ruido gaussiano o compresión MP3.
  • No es amigable con el tiempo real.

WaveVerify (julio de 2025)

Aborda las debilidades de AudioSeal — específicamente las manipulaciones temporales (inversión, velocidad). Usa un generador basado en FiLM + detector Mixture-of-Experts. Competitivo con AudioSeal en ataques estándar; maneja ediciones temporales.

La brecha que los adversarios explotan

De AudioMarkBench: "bajo cambio de tono, todas las marcas de agua muestran Bit Recovery Accuracy por debajo de 0,6, lo que indica una eliminación casi completa." El cambio de tono es el ataque universal. Ninguna marca de agua de 2026 es totalmente robusta a la modificación agresiva de tono. Por eso necesitas detección (AASIST) junto con la marca de agua.

C2PA / Content Authenticity Initiative

No es una técnica de ML — es un formato de manifiesto. Los archivos de audio llevan metadatos firmados criptográficamente sobre la herramienta de creación, autor, fecha. Audobox / Seamless lo utilizan. Bueno para procedencia; no hace nada si un actor malicioso recodifica y elimina los metadatos.

Manos a la Obra

Paso 1: un detector simple basado en características espectrales (de juguete)

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

El habla sintética a menudo tiene una energía de alta frecuencia inusualmente plana. Los detectores de producción usan AASIST, no esto. Pero la intuición se sostiene.

Paso 2: AudioSeal incrustar + detectar

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 en [0, 1] — probabilidad de presencia de la marca de agua
# decoded_payload: 16 bits; compara contra el payload incrustado

Paso 3: evaluación — 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]

Paso 4: la integración de producción

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

Cada generación entrega: (1) marca de agua, (2) manifiesto firmado, (3) registro de auditoría que cumple con la política de retención.

Úsalo

Caso de uso Defensa
Entregar TTS / clonación de voz Incrustar AudioSeal en cada salida (no negociable)
Desbloqueo biométrico por voz Conjunto AASIST + ECAPA; desafío de vivacidad
Detección de fraude en call-center AASIST en el 20% de las llamadas entrantes
Autenticidad de podcast Firma C2PA al subir, AudioSeal si es generado por IA
Investigación / entrenamiento de detectores Conjuntos train/dev/eval de ASVspoof 5

Errores Comunes

  • Marca de agua sin que el detector se ejecute jamás. Inútil. Pon el detector en tu CI.
  • Detección sin calibración. AASIST entrenado en ASVspoof LA sufre overfitting; la precisión en el mundo real cae. Calibra en tu dominio.
  • Brecha del cambio de tono. El cambio agresivo de tono elimina la mayoría de las marcas de agua. Ten un fallback de detección.
  • Eliminar metadatos y re-alojar. C2PA es trivialmente evitable por recodificación. Siempre añade defensa criptográfica + perceptual (marca de agua) juntas.
  • Vivacidad como detección. Pide al usuario que diga una frase aleatoria. Previene ataques de replay, pero no la clonación en tiempo real.

Entrégalo

Guarda como outputs/skill-spoof-defender.md. Elige el modelo de detección, la marca de agua, el manifiesto de procedencia y el playbook operativo para un despliegue de generación de voz.

Ejercicios

  1. Fácil. Ejecuta code/main.py. Detector de juguete + marca de agua de juguete para incrustar/detectar en audio sintético.
  2. Medio. Instala audioseal, incrusta un payload de 16 bits en una salida de TTS, decodifícalo de nuevo. Corrompe el audio con ruido y mide la Bit Recovery Accuracy.
  3. Difícil. Haz fine-tuning de un RawNet2 o AASIST en ASVspoof 2019 LA. Mide el EER. Pruébalo en un conjunto reservado de fragmentos generados por F5-TTS — observa cómo se degrada la detección OOD.

Términos Clave

Término Lo que dice la gente Lo que realmente significa
ASVspoof El benchmark Desafío bienal; 2024 = ASVspoof 5.
CM (contramedida) Detector Clasificador: habla real versus sintética / convertida.
SASV Verificación de hablante + CM Detección biométrica + de spoofing integrada.
AudioSeal Marca de agua de Meta Localizada, payload de 16 bits, 485× más rápida que WavMark.
Bit Recovery Accuracy Supervivencia de la marca de agua Fracción de los bits del payload recuperados tras el ataque.
C2PA Manifiesto de procedencia Metadatos criptográficos sobre creación / autoría.
AASIST Familia de detectores Anti-spoofing SOTA basado en atención sobre grafos.

Lecturas Adicionales

0 lifetime access. Curriculum based on AI Engineering from Scratch by Rohit Ghumare (MIT, used under attribution).