Guia Definitivo de Anonimização e Privacidade de Dados em Analytics Mobile e Web

Hashing não anonimiza. Como distinguir pseudonimização de anonimato real, aplicar o teste dos 3 critérios e coletar web/app sem ferir LGPD.

Contexto

Time de produto liga o banner, ativa “IP anonymization” no GA4, hasheia e-mail no data layer — e o jurídico ainda pergunta: isso é dado pessoal? Na maioria dos casos, sim.

Sob LGPD e GDPR, pseudonimizar (trocar o nome por um código, mantendo a chave em outro lugar) não tira o dado do escopo. Continua sendo dado pessoal: base legal, direitos do titular, segurança e accountability seguem valendo. Anonimizar de verdade é o processo irreversível em que, com meios razoavelmente disponíveis, ninguém consegue religar o registro a uma pessoa. Só aí o conjunto deixa de ser tratado como dado pessoal.

Dois corolários que produto costuma ignorar:

  1. Anonimizar é tratamento. A transformação em si precisa de base legal e transparência. Não “lava” uma coleta que já nasceu sem hipótese legal.
  2. Hash ≠ anonimato. SHA-256 de e-mail sem salt secreto (ou com salt previsível) é pseudonimização frágil — e ainda dado pessoal.

O objetivo deste guia é operacional: saber o que você está coletando de verdade, o que passa no teste de reidentificação e o que mudar na arquitetura web e mobile para medir sem fingir conformidade.

Problema

Dashboards “privacy-first” no slide e payload de telemetria no Network são coisas diferentes. Em analytics web e app, o risco não está só no user_id explícito — está nos quase-identificadores que, combinados, viram fingerprint:

Quase-identificador típico Onde aparece
IP completo (ou pouco truncado) Hit client → vendor; headers no servidor
User-Agent + Client Hints Browser / WebView
Resolução, timezone, clock skew Telemetria / SDK
gclid / fbclid / tokens em query URL, referrer, event params
IDFA / IDFV / advertising ID App sem ATT / sem política clara

Com dimensionalidade alta, o dataset falha em três frentes que o EDPB usa para avaliar se o dado ainda é identificável:

  1. Isolamento (singling out) — dá para apontar “este registro é de uma pessoa”, mesmo sem saber o nome.
  2. Vinculação (linkage) — dá para juntar dois eventos (ou dois sistemas) como sendo da mesma pessoa.
  3. Inferência — dá para deduzir atributo sensível com probabilidade alta a partir do restante.

Consent Mode v2 e cookieless pings não resolvem sozinhos o ponto do IP: sem cookie, o ping ainda pode carregar o endereço até a infraestrutura do fornecedor. Banner certo ≠ coleta anonimizada.

Para o how-to de CMP → gcs/gcd, veja: Como Configurar o Google Consent Mode v2 Sem Quebrar Suas Métricas no GA4.

No mobile, a mesma ilusão: otimizar campanha como se IDFA fosse o default pós-iOS 14.5, com opt-in ATT na casa dos ~15% globalmente, é desenhar produto e mídia em cima de uma fatia que não representa o funil.

Anonimização vs pseudonimização

Dimensão Pseudonimização Anonimização
O que é Identificador trocado; chave / info adicional existe em outro lugar Ligação à pessoa removida de forma irreversível (meios razoáveis)
Estatuto Dado pessoal (LGPD/GDPR) Fora do escopo material depois de efetiva
Reversível? Sim, para quem tem a chave Não (na prática avaliada)
Base legal / direitos Continuam obrigatórios Não se aplicam ao dataset já anônimo
Exemplo em analytics user_id HMAC no warehouse; client ID estável Relatório agregado com limiar; postback SKAN sem ID de dispositivo

A leitura moderna (guidelines EDPB de anonimização) é relativa ao receptor: o mesmo conjunto pode ser pessoal para quem guarda a chave e anônimo para um terceiro sem meios legais/técnicos de reidentificar. Isso não é desculpa para declarar “anônimo” no slide — é motivo para documentar quem recebe o quê e com quais barreiras.

O teste dos três critérios (na prática)

Antes de rotular um export BigQuery, um data share com parceiro ou um treino de modelo como “anônimo”, pergunte:

Critério Pergunta operacional Falha clássica em analytics
Sem isolamento Consigo isolar um indivíduo no arquivo? Evento raro + cidade + device = 1 pessoa
Sem vinculação Consigo religar sessão web ↔ app ↔ CRM? Mesmo client_id / e-mail hash / IDFV em dois lados
Sem inferência Consigo deduzir atributo sensível do grupo? Classe homogênea (“todos converteram no funnel X”)

Fingerprint de browser/app é o atalho para falhar os dois primeiros. Por isso “remover o nome e manter UA + IP + timestamp milimétrico” quase nunca passa.

Governança: o risco não é estático. Mais poder de cruzamento, mais dados públicos, novo incidente que vaza a chave — a condição de anonimato precisa ser reavaliada. Accountability (LGPD art. 6º, X) = registrar o teste, não só a opinião do time.

Modelos úteis (sem virar paper)

Para produto, três ideias bastam para conversar com dados/segurança:

k-anonimato

Cada combinação de quase-identificadores aparece em pelo menos k registros (classe de equivalência). Técnicas: generalizar (idade → faixa; CEP → prefixo) e suprimir outliers. Protege isolamento grosseiro; não protege se todos no grupo têm o mesmo atributo sensível (ataque de homogeneidade).

l-diversidade e t-closeness

Exigem variedade (e proximidade distributiva) do atributo sensível dentro da classe. Úteis em data share tabular; caros e pouco naturais em event streams de alta cardinalidade.

Privacidade diferencial (DP)

Garante que o resultado de uma consulta muda pouco se um indivíduo entra ou sai do dataset — via ruído calibrado (orçamento ε: menor ε = mais privacidade, menos precisão). Em analytics de produto, aparece mais em agregados e APIs de medição com limiar do que em “cada hit do GA4 com DP”.

Modelo Serve para Limite
k-anonimato Relatórios / exports tabulares Homogeneidade; QIs demais
l-diversidade / t-closeness Compartilhar atributos sensíveis Complexidade; perda de utilidade
DP (ε) Agregados e APIs com ruído Amostra pequena; gestão do orçamento

Na stack de marketing/produto do dia a dia, o ganho mais imediato costuma ser arquitetura (menos QI no fio, agregação, limiares) — não implementar DP no pixel.

Web: consentimento não substitui sanitização

Fluxo mínimo alinhado à ANPD (cookies necessários vs analíticos vs ads) e ao ecossistema Google:

  1. Consentimento / base legal — analytics próprio limitado ≠ ads/cross-site (que pedem opt-in claro). Consent Mode v2 governa o que as tags Google fazem com o estado; não redefine sozinho a base legal na LGPD.
  2. Proxy first-party (server-side) — o browser fala com seu endpoint; o servidor sanitiza e só então encaminha ao GA4/Ads/Meta.

Quatro transformações que um container sGTM (ou equivalente) deveria fazer antes de republicar para terceiros:

# Sanitização Por quê
1 Truncar / descartar IP (ex.: último octeto IPv4; não repassar IP bruto) IP é dado pessoal; ping “sem cookie” ainda carrega IP
2 Pseudonimizar IDs com HMAC + salt no servidor (rotação) Hash sem chave secreta é reversível por rainbow table
3 Purgar query/referrer (gclid, fbclid, tokens, PII acidental) Linkage e vazamento em URL
4 Reduzir UA / Client Hints (categoria de browser, não fingerprint) Combate singling out por device

Isso é pseudonimização + minimização no caminho — passo necessário para aproximar anonimato em agregados. Não declare o hit individual “anônimo” só porque passou pelo servidor.

Sobre o “fim” do cookie 3P e a urgência de first-party: ver O Fim dos Cookies de Terceiros: O Que Mudar no Seu Tagueamento Hoje.

Mobile: atribuição sem ID de anunciante

No iOS, ATT exige opt-in para IDFA. Sem consentimento, insistir em atribuição determinística por advertising ID é desenho errado — e risco de store/compliance.

SKAdNetwork (e evolução AdAttributionKit) desloca a atribuição para o sistema operacional e devolve postbacks agregados:

  • Sem IDFA/IDFV/IP no postback de atribuição no modelo privacy-preserving da Apple
  • Conversion values (fino 0–63 / grosso low-medium-high) para engajamento pós-install
  • Privacy thresholds — campanha com volume baixo perde granularidade (anti-isolamento)
  • Timers aleatórios — quebram correlação temporal click → install

Para produto: modele KPIs e experimentos em cima de sinais agregados e delayed, não do “usuário X veio da campanha Y” em tempo real para 100% do tráfego. Firebase/MMP continuam úteis para telemetria first-party dentro do app — com o mesmo rigor de QI e base legal da web.

Roteiro de implementação

Etapa Ação Objetivo
1. Consentimento CMP transparente + Consent Mode v2 com default denied (se stack Google) Licitude do não essencial; tags alinhadas ao estado
2. Proxy server-side sGTM (ou similar) em subdomínio próprio Cortar hop direto browser → vendor com IP cru
3. Sanitização IP, HMAC de IDs, purge de clids/PII, UA reduzido Reduzir isolamento e linkage
4. Mobile privacy ATT honesto; SKAN/AdAttributionKit; sem IDFA sem opt-in Atribuição agregada compliant
5. Agregação / ruído Limiares em exports; DP ou k-anonimato se for share externo Mitigar inferência em datasets publicados
6. Governança Registrar teste de reidentificação; reavaliar após incidentes/mudança de stack Accountability

Checklist rápido para o time de produto:

# Pergunta Se a resposta for “não”…
1 Sabemos quais QIs sobem em cada evento? Inventário antes de “anonimizar”
2 Hash/HMAC tem salt secreto só no servidor? Tratar como identificador frágil
3 Hits de marketing passam por endpoint próprio? IP e fingerprint seguem no vendor
4 iOS mede sem depender de IDFA default? Funil e CPA estão enviesados
5 Existe dono e data da última revisão de risco? Conformidade cosmética

Próximo passo

Coletar “sem ferir privacidade” não é um toggle no GA4. É separar pseudônimo de anônimo, passar o dataset pelos três critérios e redesenhar o fio (web com proxy sanitizado, mobile com atribuição agregada) — com registro do que foi testado.

Use o roteiro acima como diagnóstico interno. Se a stack mistura banner, hash no client, IP no vendor e IDFA “quando der”, o movimento seguinte é uma auditoria de tracking e compliance: o que ainda é identificável, o que pode ser agregado e o que precisa sair do payload — nessa ordem.