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

obscura/research/uncontrollable/audio-hardware

4 min di lettura

Categoria: Hardware / Elaborazione Audio


1. Descrizione

Il fingerprinting audio utilizza l'API Web Audio per misurare come l'hardware audio e lo stack software di un dispositivo elaborano il suono. AudioContext, OscillatorNode e DynamicsCompressorNode producono output che variano per:

  • Implementazione del driver audio (ALSA, PulseAudio, PipeWire, CoreAudio, WASAPI)
  • Caratteristiche DAC/ADC hardware
  • Algoritmi di conversione frequenza di campionamento
  • Comportamento della compressione dinamica (curve di threshold, knee, ratio)
  • Gestione del buffer audio e latenza
  • Differenze implementative FFT

2. Vettori

2.1 Fingerprinting DynamicsCompressor

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) // Specifico dell'hardware

Entropia: ~8-12 bit

Stabilità: Alta tra sessioni, moderata tra aggiornamenti del browser

2.2 Latenza Base AudioContext

const ctx = new AudioContext()
// baseLatency riflette la latenza hardware audio in secondi
const latency = ctx.baseLatency  // es. 0.0026666666666666665

Entropia: ~4-6 bit

Stabilità: Molto Alta: dipendente dall'hardware

2.3 Segnali Audio Aggiuntivi

Segnale Descrizione Entropia
sampleRate Frequenza di campionamento AudioContext (44100, 48000, ecc.) ~1-2 bit
maxChannelCount Canali audio massimi supportati ~1-2 bit
Modalità conteggio canali 'explicit' vs 'clamped-max' vs 'max' ~1-2 bit
Variazioni dimensione FFT Diverse implementazioni FFT ~2-3 bit

3. Punti di Forza dell'Attaccante

Forza Spiegazione
Ancorato all'hardware Il fingerprint audio è determinato da hardware e driver audio
Nessun permesso richiesto AudioContext può essere creato senza consenso utente
Veloce La generazione del fingerprint richiede ~50-100ms
In background Non riproduce suono udibile
Utente passivo L'utente non può sapere che sta accadendo

4. Debolezze dell'Attaccante

Debolezza Spiegazione
Bloccabile AudioContext può essere disabilitato (Firefox resistFingerprinting lo blocca completamente)
Dipendente dal browser Stesso hardware + browser diversi possono produrre output diversi
Gli aggiornamenti driver lo cambiano Gli aggiornamenti del driver audio possono invalidare i fingerprint memorizzati
Il rumore di fondo cambia Il rumore ambientale influisce sull'output di DynamicsCompressor
Entropia inferiore alla GPU ~8-12 bit vs ~20+ bit per WebGL

5. Rilevamento della Manipolazione

Tecnica Come Funziona
Rilevamento output appiattito Tutti i valori che restituiscono -100dB non sono naturali
Confronto tra letture Leggi il buffer audio due volte, confronta per pattern di rumore iniettato
Verifica latenza base Valori di latenza insoliti suggeriscono override
Coerenza frequenza campionamento Contraddice altri segnali (frequenza rara + browser comune)

6. Mitigazioni per Obscura

6.1 Cosa Può Fare Obscura

Mitigazione Efficacia Rilevabilità Implementazione
Blocca AudioContext completamente Alta Media JS: AudioContext → undefined
Appiattisci output compressore Media Alta Override getFloatFrequencyData
Blocca latenza base audio Bassa Media Override getter baseLatency
Arrotonda frequenza campionamento Bassa Bassa Override getter sampleRate

6.2 Cosa Non Può Fare Obscura

Non Può Perché
Cambiare l'elaborazione audio reale L'elaborazione audio è hardware locale
Falsificare output DynamicsCompressor L'output dipende dal DSP audio fisico
Normalizzare tra utenti Hardware diverso = elaborazione diversa
Rimuovere canali laterali di temporizzazione La temporizzazione audio è misurabile anche con API bloccata

6.3 Approccio Raccomandato

1. Blocca AudioContext completamente  (alto valore, basso costo)
2. Accetta rischio residuo            (l'audio da solo è ~8-12 bit, insufficiente da solo)

7. Riferimenti di Ricerca

  • 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). Source code: src/sources/audio.ts.