1. Что такое AudioContext в фингерпринтинге браузеров
AudioContext — часть Web Audio API, предоставляющая граф обработки сигналов для управления аудиоисточниками, фильтрами и получателями внутри браузера. Хотя он не так заметен, как Canvas или WebGL, он может быть скрытым, но мощным идентификатором на уровне ПО.
Системы фингерпринтинга используют аудиопайплайны, например:
- Количество каналов и возможности аудиовыхода
- Расхождения в частоте дискретизации и точности воспроизведения
- Задержки обработки аудио
- Поддержка ScriptProcessorNode или AudioWorklet
- Отладочные свойства:
audioContext.listener
,currentTime
,baseLatency
Для создания AudioContext-фингерпринта не требуется взаимодействие с пользователем или запрос разрешений, что делает его популярной целью в пассивных системах распознавания устройств.
2. Как платформы обнаруживают AudioContext-фингерпринты
Современные платформы (особенно те, что занимаются аудиоводяными знаками, свёрткой аудио или анализом DSP) используют AudioContext для измерения различий в браузерах и аудиодвижках.
Пример кода для детекции:
const audioCtx = new AudioContext();
const oscillator = audioCtx.createOscillator();
const listener = audioCtx.listener;
const dest = audioCtx.destination;
console.log(listener.forwardX.value, listener.forwardY.value, listener.forwardZ.value);
console.log({
sampleRate: audioCtx.sampleRate,
baseLatency: audioCtx.baseLatency,
state: audioCtx.state,
outputChannelCount: dest.maxChannelCount,
});
Что можно использовать для фингерпринтинга:
Аудиосвойство | Использование в трекинге |
---|---|
Частота дискретизации | Определение ОС (macOS/Windows) |
Поддержка каналов | Определение возможностей устройства |
Пространство слушателя | Скрытые стерео/3D-паттерны |
Сигнатуры DSP-ядра | Особенно в свёрточных сетях |
Планирование аудио | События oncomplete + задержки |
Некоторые платформы генерируют синтетические волны, вычисляют БПФ (FFT) или анализируют артефакты (например, клиппинг), чтобы отличить реальные браузеры от эмулированных.
3. Как FlashID маскирует AudioContext-фингерпринты
Чтобы предотвратить фингерпринтинг через звук, FlashID полностью виртуализирует и подменяет поведение Web Audio API:
- Виртуализация AudioContext Listener
- Подменяет 3D-параметры (
forwardX
,positionX
,velocity
) дляPannerNode
иAudioListener
.
- Маскировка SampleRate и количества каналов
- Заменяет
audioContext.sampleRate
на типичные значения (44100, 48000 и др.). - Подменяет
destination.maxChannelCount
независимо от реальных возможностей устройства.
- Эмуляция DSP-путей
- Генерирует искусственные буферы вместо реальной обработки сигналов.
- Блокирует использование ScriptNode/Worklet для выявления уникальности.
- Контроль состояния и задержек
- Фиксирует
audioContext.state
(running/closed/suspended). - Маскирует
baseLatency
под стандартное поведение для ПК или мобильных устройств.
- Согласованность между сессиями
- Audio-фингерпринты привязываются к профилю.
- Исключает расхождения между сессиями, сохраняя одни и те же значения после сброса движка.
FlashID использует внутренний AudioBus-прокси, создающий поддельные узлы и цепочки, которые выглядят правдоподобно для Web Audio API, но не раскрывают реальные DSP-характеристики устройства.
Это делает невозможным использование AudioContext (изолированно или с Canvas/WebGL) для идентификации уникальности устройства или определения фейковых окружений — при сохранении ожидаемого интерфейса для вашего кода.
Рекомендуемое Чтение