PowerScan
PT

Fingerprinting de áudio sem microfone

Impressões digitais do navegador · 5 min de leitura · por PowerScan

Foto: Unsplash

“Fingerprint de áudio” parece algo gravado por um microfone. Não é. É um número derivado de como a sua máquina processa um som sintético que nunca é reproduzido, nunca é capturado e nunca sai da aba.

Como ele é feito

O script cria um OfflineAudioContext, que renderiza áudio em um buffer na memória em vez de nos alto-falantes. Ele conecta um oscilador, geralmente uma onda triangular em frequência fixa, por meio de um compressor de dinâmica ao destino e inicia a renderização. Quando o buffer fica pronto, lê uma fatia das amostras, muitas vezes algumas centenas de valores, e calcula o hash. O resultado é uma string curta como d4f50eb9.

A operação inteira leva algumas dezenas de milissegundos e não exige permissão, porque nada é capturado. O OfflineAudioContext é fechado quando o script termina.

Por que difere entre máquinas

O compressor e o oscilador são implementados com aritmética de ponto flutuante dentro do motor de áudio do navegador, e a saída exata depende da versão do motor, da biblioteca matemática do sistema operacional, do comportamento de ponto flutuante da CPU e, em algumas configurações, da taxa de amostragem do hardware de áudio. As diferenças são minúsculas, alguns bits nas últimas casas decimais, mas o hash amplifica diferenças minúsculas em strings totalmente distintas. Como o hash de canvas, ele é estável em uma máquina e varia entre máquinas.

Sua diversidade é menor do que a do canvas: muitas máquinas com a mesma versão do navegador e o mesmo sistema operacional produzem o mesmo hash de áudio. Ele é útil principalmente como sinal de confirmação e como forma de detectar navegadores que randomizam a saída.

O que os navegadores fazem

O Brave adiciona ruído às leituras de áudio do mesmo modo que faz com o canvas. O Firefox com resist-fingerprinting desativa partes da Web Audio API ou devolve valores constantes. O Chromium não altera a saída. Um navegador que randomiza o hash produz um valor diferente a cada recarga, o que um diagnóstico torna visível simplesmente permitindo que você recarregue e compare.

Privacidade, com precisão

Nenhum som é gravado. Nenhum microfone é aberto. O buffer existe na memória durante o cálculo e é descartado. A única coisa que poderia sair da aba é o hash, e só se a página optar por enviá-lo. Um diagnóstico que calcula o hash localmente e o mostra a você está lendo exatamente o que um rastreador leria, e depois não faz nada com isso.

Lendo o valor

Duas coisas merecem verificação. Primeiro, que o hash exista: “Indisponível” significa que a API está bloqueada, o que alguns sites tratam como um sinal em si. Segundo, que ele seja estável: recarregue e o valor não deve mudar. Um hash que muda entre carregamentos indica que o navegador está injetando ruído, o que protege contra o rastreamento entre sites, mas também marca o navegador como um que faz isso.

Todos os artigos · Executar a verificação