Аудио-фингерпринтинг опознаёт ваше устройство через Web Audio API — без микрофона. Как работают отпечатки AudioContext и как от них защититься.
Аудио-фингерпринтинг — это техника отслеживания, которая опознаёт ваше устройство по тому, как оно обрабатывает звук: не записывая ничего через микрофон, а измеряя крошечные различия в том, как Web Audio API вашего браузера рендерит сгенерированный сигнал. Одна и та же звуковая волна, обработанная на разном аппаратном и программном стеке, выходит чуть-чуть иной, и этого различия достаточно стабильно, чтобы помочь узнавать вас на разных сайтах. Эта статья объясняет, как работает фингерпринтинг через AudioContext, насколько он отличителен и что с ним можно сделать.
Ключевые выводы
- Аудио-фингерпринтинг опознаёт ваше устройство, измеряя, как Web Audio API браузера обрабатывает сгенерированный сигнал, — он никогда не использует микрофон и не воспроизводит звук.
- Вся работа происходит беззвучно внутри
OfflineAudioContext, поэтому не появляется никакого запроса разрешения и ничего не записывается. - Сам по себе он лишь умеренно отличителен, но добавляет ощутимую энтропию в сочетании с отпечатками canvas, WebGL и шрифтов.
- Очистка cookie или приватный режим его не останавливают, потому что идентификатор берётся из характеристик устройства и браузера, а не из сохранённых данных.
- Приватные браузеры (Firefox, Tor, Brave) и инструменты против фингерпринтинга могут снизить или рандомизировать сигнал, но редко устраняют его полностью.
Что такое аудио-фингерпринтинг?
Аудио-фингерпринтинг использует Web Audio API браузера, чтобы сгенерировать звуковой сигнал внутри, пропустить его через аудиоконвейер и считать обратно числовой результат. Принципиально важно, что звук никогда не воспроизводится вслух, а микрофон никогда не задействуется — всё происходит в OfflineAudioContext, который беззвучно рендерит результат в буфер чисел.
Поскольку получаемые значения зависят от аудиооборудования вашего устройства, операционной системы, версии браузера и лежащих в основе математических библиотек, две разные машины дают слегка различающиеся результаты для одного и того же входного сигнала. Скрипт хеширует эти значения в компактный идентификатор. В сочетании с другими сигналами вроде отпечатков canvas и WebGL это помогает построить профиль, который узнаёт ваш браузер даже после очистки cookie.
Как работает фингерпринтинг через AudioContext
Техника следует предсказуемому рецепту:
- Создать офлайн-контекст. Скрипт создаёт
OfflineAudioContext, который обрабатывает звук настолько быстро, насколько возможно, без вывода звука. - Сгенерировать сигнал. Он создаёт
OscillatorNode(часто треугольную или синусоидальную волну на фиксированной частоте) как стабильный, воспроизводимый источник. - Обработать его. Сигнал проходит через узлы вроде
DynamicsCompressorNode, чья арифметика с плавающей запятой усиливает мелкие различия реализаций. - Считать буфер. Отрендеренные сэмплы суммируются или хешируются в одно значение.
Ключевая мысль в том, что аудиоматематика с плавающей запятой не побитово идентична на разных системах. Хотя спецификация W3C Web Audio API описывает граф обработки, она не требует побитово точного результата, поэтому разные CPU, аудиодрайверы и сборки браузеров округляют и обрабатывают эти сэмплы чуть-чуть по-разному. Итоговый хеш поэтому становится подписью устройства и браузера.
Упрощённый пример
Код ниже набрасывает основную идею — сгенерировать тон, сжать его и свести вывод к числу:
// Рендер тона офлайн и сведение его к значению отпечатка
const ctx = new OfflineAudioContext(1, 44100, 44100);
const oscillator = ctx.createOscillator();
oscillator.type = 'triangle';
oscillator.frequency.value = 10000;
const compressor = ctx.createDynamicsCompressor();
oscillator.connect(compressor);
compressor.connect(ctx.destination);
oscillator.start(0);
ctx.startRendering().then((buffer) => {
const samples = buffer.getChannelData(0);
// Сумма среза сэмплов; точная сумма зависит от устройства/браузера
let fingerprint = 0;
for (let i = 4000; i < 5000; i++) {
fingerprint += Math.abs(samples[i]);
}
console.log('Audio fingerprint value:', fingerprint);
});
Два браузера на идентичном железе и версии обычно совпадают; смените ОС, аудиостек или сборку браузера — и значение сместится.
Насколько он отличителен и стабилен?
Аудио-фингерпринтинг умеренно отличителен — он идентифицирует не так однозначно, как строка GPU-рендерера в WebGL, но вносит ощутимый вклад в сочетании с другими сигналами. Его поведение зависит от браузера:
| Браузер / режим | Поведение аудио-отпечатка |
|---|---|
| Chrome / Edge (Blink) | Доступен и стабилен; широко используется трекерами |
| Firefox (обычный) | Доступен; Firefox помечает его в рамках защиты от фингерпринтинга |
| Firefox (приватный режим) | Блокируется или возвращает нейтрализованное значение |
| Safari | Доступен, но с ограниченной точностью, что снижает энтропию |
Трекеров волнует именно стабильность: отпечаток полезен, только если остаётся неизменным между визитами. Аудио-отпечатки в целом стабильны для конкретного устройства и версии браузера, хотя обновление браузера может сдвинуть значение.
С точки зрения теории информации аудиосигнал даёт скромное число бит энтропии — достаточно, чтобы сузить совокупность, но редко достаточно, чтобы выделить одного человека сам по себе. Именно поэтому он почти никогда не выступает в одиночку. Трекер объединяет эти несколько бит от аудио с более крупными вкладами строки GPU-рендерера WebGL, установленных шрифтов, геометрии экрана и часового пояса, и биты складываются: каждый независимый сигнал кратно увеличивает число различимых конфигураций. Аудио заслуживает место в этом наборе именно потому, что его дёшево собирать беззвучно и оно достаточно стабильно, так что оно надёжно добавляет биты, не вызывая запроса разрешения и не настораживая пользователя.
Как защититься от аудио-фингерпринтинга
Сделать себя полностью неотслеживаемым не получится, но можно снизить сигнал:
- Используйте браузер со встроенной защитой. Защита от фингерпринтинга в Firefox и Tor Browser активно блокируют или нормализуют аудио-фингерпринтинг. Brave рандомизирует вывод для каждой сессии («farbling»).
- Расширения. Расширения против фингерпринтинга могут добавлять шум в вывод Web Audio, хотя слишком агрессивные могут ломать легитимные аудиоприложения.
- Понимайте пределы. Приватный режим или инкогнито сами по себе не останавливают фингерпринтинг — они лишь очищают cookie и историю. Аудио-фингерпринтинг работает независимо от этого, и это частое заблуждение, разобранное в нашем руководстве по фингерпринтингу браузера.
Компромисс тут привычный: более сильная защита может заставить сайты вести себя странно или сделать вас более необычным (а значит, более отслеживаемым), если ваша конфигурация редкая.
Как проверить свой аудио-отпечаток
Увидеть собственный аудио-отпечаток можно без написания кода:
- Запустите инструмент проверки отпечатка. Проверка отпечатка от BrowserInsight вычисляет ваше аудиозначение наряду с canvas и WebGL, а проект EFF Cover Your Tracks показывает, насколько идентифицирующей является вся ваша конфигурация браузера.
- Сравните в разных браузерах. Откройте один и тот же тест в Chrome, Firefox и Safari на одной машине. Аудиозначение обычно различается между движками рендеринга, что показывает, как результат формирует сборка браузера, а не только железо.
- Сравните обычный и защищённый режим. Перезапустите тест в Firefox со строгой Усиленной защитой от отслеживания или в Tor Browser и посмотрите, как аудиозначение блокируется или нормализуется до общего значения по умолчанию.
Наиболее влиятельные факторы итогового значения сведены ниже:
| Параметр | Типичная настройка | Почему это важно |
|---|---|---|
| Тип контекста | OfflineAudioContext | Рендерит беззвучно и быстрее реального времени, без вывода звука |
| Волна осциллятора | Треугольная или синусоида | Воспроизводимый, детерминированный исходный сигнал |
| Частота | ~10 000 Гц | Фиксированный тон, чтобы вариация шла только от обработки |
| Узел обработки | DynamicsCompressorNode | Компрессия с плавающей запятой усиливает мелкие различия реализаций |
| Хешируемый диапазон сэмплов | Срез буфера | Суммирование или хеширование сводит тысячи сэмплов к одному стабильному числу |
Поскольку каждый скрипт по этому рецепту использует сопоставимые параметры, два трекера на разных сайтах могут получить похожее значение для одного устройства — именно это и делает сигнал полезным для межсайтового распознавания.
Часто задаваемые вопросы
Использует ли аудио-фингерпринтинг мой микрофон?
Нет. Аудио-фингерпринтинг никогда не обращается к микрофону и не воспроизводит звук. Он генерирует сигнал внутри с помощью Web Audio API и измеряет, как ваше устройство его обрабатывает, поэтому не появляется никакого запроса разрешения и ничего не записывается.
Можно ли отследить меня только по аудио-отпечатку?
Сам по себе — редко: он умеренно отличителен, но не уникален. Трекеры комбинируют его с canvas, WebGL, шрифтами и другими сигналами, чтобы построить профиль, достаточно надёжный для вашего узнавания. Аудио — это один из слоёв, а не весь отпечаток целиком.
Останавливает ли очистка cookie аудио-фингерпринтинг?
Нет. Фингерпринтинг был задуман так, чтобы переживать очистку cookie. Поскольку идентификатор выводится из характеристик вашего устройства и браузера, а не из сохранённых данных, очистка cookie или приватный режим оставляют аудио-отпечаток неизменным.
Как увидеть собственный аудио- и устройственный отпечаток?
Запустите проверку отпечатка от BrowserInsight, чтобы увидеть сигналы, которые раскрывает ваш браузер, включая аудио, canvas и WebGL, и насколько они делают вас идентифицируемым.
Заключение
Аудио-фингерпринтинг превращает беззвучную обработку звука вашим браузером в стабильный идентификатор без всякого микрофона. Сам по себе он лишь умеренно отличителен, но как один из слоёв среди сигналов canvas, WebGL и шрифтов помогает трекерам узнавать вас на разных сайтах и переживать очистку cookie. Приватные браузеры и инструменты против фингерпринтинга могут его притупить, но реалистичная цель — снизить сигнал, а не устранить его полностью.
Рекомендуем прочитать: