Аудио-отпечаток без микрофона

«Аудио-отпечаток» звучит как что-то, записанное через микрофон. Это не так. Это число, полученное из того, как ваш компьютер обрабатывает синтетический звук, который никогда не воспроизводится, не записывается и не покидает вкладку.
Как он создаётся
Скрипт создаёт OfflineAudioContext, который отрисовывает звук в буфер в памяти, а не на динамики. Он подключает осциллятор, обычно треугольную волну фиксированной частоты, через компрессор динамического диапазона к выходу и запускает отрисовку. Когда буфер готов, скрипт читает фрагмент сэмплов, часто несколько сотен значений, и хеширует их. Результат — короткая строка вроде d4f50eb9.
Вся операция занимает несколько десятков миллисекунд и не требует разрешения, потому что ничего не записывается. OfflineAudioContext закрывается, когда скрипт заканчивает.
Почему он различается между компьютерами
Компрессор и осциллятор реализованы на арифметике с плавающей запятой внутри аудиодвижка браузера, и точный результат зависит от версии движка, математической библиотеки операционной системы, поведения процессора при вычислениях с плавающей запятой и, в некоторых конфигурациях, частоты дискретизации аудиооборудования. Различия крошечные, несколько бит в последних десятичных знаках, но хеширование превращает крошечные различия в совершенно разные строки. Как и хеш canvas, он стабилен на одном компьютере и различается между компьютерами.
Его разнообразие ниже, чем у canvas: многие компьютеры с одной сборкой браузера и операционной системой дают один и тот же аудиохеш. Он полезен в основном как подтверждающий сигнал и как способ обнаружить браузеры, рандомизирующие свой вывод.
Что делают браузеры
Brave добавляет шум в считываемые аудиоданные так же, как и для canvas. Firefox с resist-fingerprinting отключает части Web Audio API или возвращает постоянные значения. Chromium выход не изменяет. Браузер, рандомизирующий хеш, даёт другое значение при каждой перезагрузке, что диагностика делает видимым просто тем, что позволяет перезагрузить страницу и сравнить.
Приватность, точно
Никакой звук не записывается. Никакой микрофон не открывается. Буфер существует в памяти на время вычисления и затем отбрасывается. Покинуть вкладку может только хеш, и лишь если страница решит его отправить. Диагностика, которая вычисляет хеш локально и показывает его вам, читает ровно то, что прочитал бы трекер, и затем ничего с этим не делает.
Как читать значение
Стоит проверить две вещи. Во-первых, что хеш вообще есть: «Недоступно» означает, что API заблокирован, и некоторые сайты считают это отдельным сигналом. Во-вторых, что он стабилен: после перезагрузки значение не должно измениться. Хеш, меняющийся между загрузками, говорит, что браузер вносит шум, что защищает от отслеживания между сайтами, но и помечает браузер как делающий это.


