voltar à visão geral Mais artigos

Fingerprinting de Fontes: Suas Fontes Instaladas Entregam Você

Gerando impressão digital de fontes...

Sua lista de fontes levou anos para se formar. O sistema operacional colocou algumas centenas de fontes ali, o Office acrescentou as dele, a Adobe somou mais algumas a cada aplicativo, e aquela fonte display que você instalou para um único projeto em 2021 nunca mais foi embora. Qualquer site consegue ler o resultado em algumas centenas de milissegundos, sem nenhum pedido de permissão, e quanto mais essa lista cresceu, menor a chance de a lista de outra pessoa bater com a sua.

Os navegadores nunca deram aos sites um jeito de simplesmente pedir a lista de fontes, justamente porque ela identifica demais. No fim, isso não fez diferença. Um script pode medir as fontes em vez de perguntar por elas, usando nada além de uma linha de texto invisível e duas leituras de largura. O widget nesta página roda essa medição contra 175 fontes candidatas e mostra o que seu navegador entrega, além de quão comum o seu conjunto específico é entre todos que já rodaram o scan.

Versão resumida: o fingerprinting de fontes funciona porque sites não podem pedir sua lista de fontes, então eles a medem: renderizam um texto de teste oculto, trocam por uma fonte candidata e verificam se a largura mudou. Repita isso algumas centenas de vezes e o resultado é uma lista distintiva o bastante para seguir você através de limpezas de cookies, janelas anônimas e trocas de VPN. Bloquear o truque pela metade só entrega ao script um fingerprint mais raro.

Como funciona o fingerprinting de fontes: o truque da medição

Eis a técnica inteira. O script cria um <span> invisível contendo uma sequência sem sentido, mmmmmmmmmmlli, a 72 pixels, e pergunta ao navegador com que largura ela saiu em uma família genérica como monospace. Depois define a família como "Segoe UI", monospace e lê a largura de novo. Se a Segoe UI estiver instalada, o navegador a renderiza e a largura se mexe. Se não estiver, o fallback assume e o número fica onde está. Uma fonte candidata, duas leituras de largura, nenhuma API envolvida.

A sequência tampouco é aleatória: o m é a letra minúscula mais larga e o l, a mais estreita na maioria das famílias tipográficas, então substituir uma fonte por outra desloca a largura total o máximo possível. Veja acontecendo na sua própria máquina:

O teste de largura, ao vivo no seu navegador
font-family: monospace
mmmmmmmmmmlli
font-family: "Segoe UI", monospace
mmmmmmmmmmlli
Medindo…
Lendo as duas larguras no seu navegador.
Duas leituras de largura respondem "você tem esta fonte?" para uma candidata. O widget nesta página repete isso 175 vezes; um script de rastreamento faz o mesmo. Medições feitas a 72 px, o tamanho que os scripts reais usam para amplificar as diferenças.

Existem maneiras mais elegantes de obter a mesma resposta. document.fonts.check() a devolve como booleano em uma única chamada — em navegadores Chromium, graças a uma peculiaridade que viola a especificação; Firefox e Safari respondem true para qualquer fonte que você nomear — e medir texto em um canvas evita tocar no DOM. A plataforma web tem exatamente uma API educada nessa área, a queryLocalFonts(), que retorna nomes reais de fontes e até os arquivos delas — depois que o usuário aprova um pedido de permissão. Nenhum rastreador jamais fez esse pedido a você.

A família inteira de técnicas atende pelo nome de enumeração de fontes (font enumeration), e os rastreadores não são seus únicos clientes. Sistemas antifraude e de detecção de bots rodam a mesma sondagem para verificar se um dispositivo é o que diz ser, e é por isso que o resultado segue você até lugares aonde um mero anunciante nunca chegaria: fluxos de pagamento, pontuação de risco de login, revisões de conta.

O que suas fontes instaladas revelam

O que torna a lista valiosa não é o tamanho, mas o que cada entrada confessa. As fontes chegam à sua máquina como efeito colateral de todo o resto que você instala. Segoe UI significa Windows. Helvetica Neue significa Apple. DejaVu Sans significa Linux. Bahnschrift restringe o Windows a 10 ou mais recente, e Segoe UI Variable denuncia o 11. Minion Pro ou Myriad Pro significam que software da Adobe já passou por esta máquina. Uma instalação do Windows configurada para chinês carrega fontes que uma americana não teria por que ter. Suas fontes são um registro do que você usa e de mais ou menos quando você montou tudo:

O que sua lista de fontes confessa
Sistema operacional
Segoe UI vem com o Windows
Helvetica Neue vem com o macOS e o iOS
DejaVu Sans vem com desktops Linux
Geração do SO
Bahnschrift adicionada no Windows 10, ausente antes
Segoe UI Variable adicionada no Windows 11
Software instalado
Minion Pro instalada por aplicativos da Adobe
Myriad Pro instalada por aplicativos da Adobe
Sondagem feita ao vivo no seu navegador agora mesmo, com o mesmo truque de largura que um rastreador usa. As linhas que acendem esboçam a sua máquina: qual SO, mais ou menos quão recente, e parte do que você instalou nela. Nenhum pedido de permissão apareceu no caminho.

Essa é a mesma classe de vazamento que cobrimos em Um navegador, cinco alegações de SO: os rótulos que um navegador reporta são editáveis, mas a máquina por trás deles continua agindo como ela mesma. Um User-Agent de macOS falsificado em cima de uma lista de fontes cheia de Segoe e Calibri é uma contradição que qualquer script flagra em milissegundos.

No estudo Panopticlick da EFF, a lista de fontes — na época coletada via Flash e Java — carregava 13,9 bits de informação identificadora, mais do que qualquer outro sinal de fingerprinting de navegador medido no estudo, com exceção da lista de plugins. De lá para cá, os navegadores esvaziaram os plugins — navigator.plugins reporta a mesma listinha de visualizadores de PDF (ou nada) em todo lugar — enquanto as fontes seguem exatamente tão mensuráveis quanto eram em 2010. A lista também vaza duas vezes: uma como lista, outra pelo fingerprinting por canvas, em que as fontes disponíveis para o renderizador ajudam a decidir os pixels exatos que um desenho em canvas produz.

E a lista é paciente. Não muda quando você limpa os cookies, não muda em uma janela anônima e não dá a mínima para a sua VPN. Muda quando você instala ou remove software, o que para a maioria das pessoas acontece poucas vezes por ano. Para um identificador de rastreamento, isso é uma vida útil e tanto.

Dá para evitar o fingerprinting de fontes? A armadilha do bloqueio

Existem extensões que prometem barrar a medição, seja bloqueando as sondagens, seja alimentando-as com ruído. O problema é o mesmo que pega falsificações pela metade em todo canto deste site: a defesa é mais rara do que aquilo que ela esconde.

Um Chrome de desktop no Windows que reporta apenas um punhado de fontes web-safe não é anônimo; é peculiar, e é de peculiaridade que o fingerprinting vive. Randomizadores são piores. Uma lista de fontes real fica estável por meses, então uma lista que muda de uma visita para a outra marca você como uma das poucas pessoas rodando exatamente aquela extensão. E as extensões que falsificam os números fazem isso sobrescrevendo justamente as funções que a página usa para medir. Isso fabrica um segundo problema: uma função nativa sobrescrita para de reportar [native code] quando inspecionada, o mesmo indício que entrega os plugins de stealth.

Os navegadores que levam essa defesa a sério fazem isso por inteiro. O Tor Browser embute as próprias fontes e restringe os sites a essa lista fixa, então todo usuário do Tor apresenta mais ou menos o mesmo conjunto curto. Funciona, e conta a todo site que você usa o Tor. O Brave, em vez disso, aplica o que chama de farbling: por site e por sessão, mostra aos rastreadores as fontes do seu SO mais uma seleção aleatória das que você instalou, de modo que a lista que um rastreador coleta hoje discorda discretamente da de amanhã, sem nunca parecer impossível. As duas abordagens funcionam porque o navegador inteiro foi construído em torno delas, e não como um remendo brigando com o navegador dentro do qual vive.

O que realmente fazer

  1. Comece olhando a sua própria lista. O widget nesta página já mediu seu navegador. Expanda a lista de fontes para ver o que qualquer site vê e confira quão comum o seu conjunto exato é entre todos os scans que este site já rodou. Um conjunto único no mundo é o tipo de coisa que vale saber antes que faça diferença.
  2. Não remende aos poucos. Uma extensão que bloqueia fontes em um navegador de resto normal torna você mais raro, não mais seguro. Se quiser essa defesa no uso diário, use um navegador que foi projetado em torno dela, Brave ou Tor, e aceite os custos de cada um de olhos abertos.
  3. Se você gerencia múltiplas identidades, a lista de fontes faz parte da identidade. Cada perfil precisa de fontes que combinem com o SO que ele alega, sessão após sessão. O Incogniton dá a cada perfil a própria lista de fontes e a mantém estável de uma sessão para a outra, para que a biografia que um site lê pertença ao perfil, não à sua máquina.

Suas fontes vêm respondendo perguntas sobre você desde que esta máquina é sua. O widget acima mostra o que elas andam dizendo, e o scan completo do navegador mostra o que o resto do seu navegador acrescenta junto delas.

Logotipo da Incogniton

Eleve o nível da sua privacidade

Seta