Saltar al contenido principal
de/blog/obscura/research/uncontrollable/audio-hardware/

obscura/research/uncontrollable/audio-hardware

4 Min. Lesezeit

Kategorie: Hardware / Audioverarbeitung


1. Beschreibung

Audio-Fingerprinting verwendet die Web Audio API, um zu messen, wie der Audio-Hardware- und Software-Stack eines Geräts Schall verarbeitet. Der AudioContext, OscillatorNode und DynamicsCompressorNode erzeugen Ausgaben, die variieren je nach:

  • Audio-Treiber-Implementierung (ALSA, PulseAudio, PipeWire, CoreAudio, WASAPI)
  • Hardware-DAC/ADC-Charakteristiken
  • Abtastraten-Konvertierungsalgorithmen
  • Dynamikkompressionsverhalten (Threshold, Knee, Ratio-Kurven)
  • Audio-Puffer-Handling und Latenz
  • FFT-Implementierungsunterschieden

2. Vektoren

2.1 DynamicsCompressor-Fingerprinting

const ctx = new AudioContext()
const osc = ctx.createOscillator()
const compressor = ctx.createDynamicsCompressor()
compressor.threshold.value = -50
compressor.knee.value = 40
compressor.ratio.value = 12
osc.frequency.value = 1000
osc.type = 'sawtooth'

osc.connect(compressor)
const dest = ctx.createAnalyser()
compressor.connect(dest)
const buffer = new Float32Array(dest.fftSize)
dest.getFloatFrequencyData(buffer)
const hash = md5(buffer) // Hardwarespezifisch

Entropie: ~8-12 Bits

Stabilität: Hoch über Sitzungen hinweg, moderat über Browser-Updates

2.2 AudioContext-Basislatenz

const ctx = new AudioContext()
// baseLatency spiegelt die Audio-Hardware-Latenz in Sekunden wider
const latency = ctx.baseLatency  // z. B. 0,0026666666666666665

Entropie: ~4-6 Bits

Stabilität: Sehr hoch – hardwareabhängig

2.3 Zusätzliche Audio-Signale

Signal Beschreibung Entropie
sampleRate Audio-Context-Abtastrate (44100, 48000, etc.) ~1-2 Bits
maxChannelCount Maximale unterstützte Audio-Kanäle ~1-2 Bits
Kanalanzahl-Modus 'explicit' vs. 'clamped-max' vs. 'max' ~1-2 Bits
FFT-Größen-Variationen Unterschiedliche FFT-Implementierungen ~2-3 Bits

3. Stärken des Angreifers

Stärke Erklärung
Hardware-gebunden Audio-Fingerprint wird durch Audio-Hardware und Treiber bestimmt
Keine Berechtigung erforderlich AudioContext kann ohne Benutzerzustimmung erstellt werden
Schnell Fingerprint-Generierung dauert ~50-100ms
Hintergrund Spielt keinen hörbaren Ton ab
Passiver Benutzer Benutzer kann nicht erkennen, dass es passiert

4. Schwächen des Angreifers

Schwäche Erklärung
Blockierbar AudioContext kann deaktiviert werden (Firefox resistFingerprinting blockiert es vollständig)
Browserabhängig Gleiche Hardware + verschiedene Browser können unterschiedliche Ausgaben erzeugen
Treiberupdates ändern es Audio-Treiberupdates können gespeicherte Fingerprints ungültig machen
Rauschboden ändert sich Hintergrundgeräusche beeinflussen DynamicsCompressor-Ausgabe
Niedrigere Entropie als GPU ~8-12 Bits vs. ~20+ Bits für WebGL

5. Erkennung von Manipulation

Technik Funktionsweise
Erkennung geglätteter Ausgabe Alle Werte, die -100dB zurückgeben, sind nicht natürlich
Kreuz-Lesevergleich Audio-Puffer zweimal lesen, auf injizierte Rauschmuster vergleichen
Basislatenz-Prüfung Ungewöhnliche Latenzwerte deuten auf Überschreibung hin
Abtastraten-Konsistenz Widerspricht anderen Signalen (seltene Abtastrate + häufiger Browser)

6. Abschwächungen für Obscura

6.1 Was Obscura tun kann

Abschwächung Effektivität Erkennbarkeit Implementierung
AudioContext vollständig blockieren Hoch Mittel JS: AudioContext → undefined
Kompressor-Ausgabe glätten Mittel Hoch getFloatFrequencyData überschreiben
Audio-Basislatenz blockieren Niedrig Mittel baseLatency-Getter überschreiben
Abtastrate runden Niedrig Niedrig sampleRate-Getter überschreiben

6.2 Was Obscura nicht tun kann

Kann nicht Warum
Echte Audioverarbeitung ändern Audioverarbeitung ist lokale Hardware
DynamicsCompressor-Ausgabe spoofen Ausgabe hängt vom physischen Audio-DSP ab
Über Benutzer hinweg normalisieren Unterschiedliche Hardware → unterschiedliche Verarbeitung
Timing-Seitenkanäle entfernen Audio-Timing ist auch mit blockierter API messbar

6.3 Empfohlener Ansatz

1. AudioContext vollständig blockieren  (hoher Wert, niedrige Kosten)
2. Restrisiko akzeptieren               (Audio allein ist ~8-12 Bits, allein unzureichend)

7. Forschungsreferenzen

  • Acar, G. et al. (2014). "The Web Never Forgets: Persistent Tracking Mechanisms in the Wild." CCS 2014.
  • Englehardt, S. & Narayanan, A. (2016). "Online Tracking: A 1-million-site Measurement and Analysis." CCS 2016.
  • FingerprintJS (2026). Quellcode: src/sources/audio.ts.