Anonimização de CPF é irreversível e retira o dado do escopo da LGPD; pseudonimização é reversível com uma chave e mantém o dado como pessoal, mas com proteção adicional. Use anonimização quando não precisar mais recuperar o CPF original e pseudonimização quando o processo exigir re-identificação futura.
Introdução
A LGPD distingue claramente entre dados anonimizados e dados pseudonimizados, e essa distinção tem implicações diretas para empresas que tratam dados de CPF. Dados anonimizados não são mais considerados dados pessoais e, portanto, estão fora do escopo da LGPD. Já dados pseudonimizados continuam sendo dados pessoais, mas com uma camada adicional de proteção.
Para empresas que utilizam APIs de consulta de CPF, como a CPFHub.io, aplicar a técnica correta na etapa de armazenamento é tão importante quanto validar o CPF no momento do cadastro — e define diretamente o nível de exposição regulatória da organização.
Definições segundo a LGPD
Anonimização
Conforme o artigo 5o, inciso XI da LGPD, dado anonimizado é aquele "relativo a titular que não possa ser identificado, considerando a utilização de meios técnicos razoáveis e disponíveis na ocasião de seu tratamento". Ou seja, a anonimização é irreversível -- não é possível recuperar o CPF original a partir do dado anonimizado.
Pseudonimização
A pseudonimização substitui o dado pessoal por um identificador artificial, mas mantém a possibilidade de re-identificação por meio de uma chave ou mapeamento separado. Dados pseudonimizados continuam sendo dados pessoais sob a LGPD.
Comparação direta
| Característica | Anonimização | Pseudonimização |
|---|---|---|
| Reversibilidade | Irreversível | Reversível (com chave) |
| Escopo da LGPD | Fora do escopo | Dentro do escopo |
| Utilidade analítica | Limitada | Alta |
| Nível de proteção | Máximo | Alto |
| Complexidade técnica | Alta | Moderada |
Técnicas de anonimização de CPF
1. Hashing sem salt (não recomendado isoladamente)
Aplicar uma função hash ao CPF gera um valor fixo que não pode ser revertido diretamente. No entanto, como o espaço de CPFs é finito (11 dígitos numéricos), é possível gerar uma tabela de correspondência (rainbow table). Por isso, hashing sem salt não é considerado anonimização verdadeira.
2. Hashing com salt
Adicionar um salt aleatório antes de aplicar o hash dificulta ataques de rainbow table:
import hashlib
import os
def anonimizar_cpf_hash(cpf: str) -> str:
"""Anonimiza CPF usando SHA-256 com salt aleatorio."""
salt = os.urandom(32)
hash_cpf = hashlib.sha256(salt + cpf.encode()).hexdigest()
# O salt precisa ser descartado para garantir irreversibilidade
return hash_cpf
# Resultado: string hexadecimal sem possibilidade de reversao
cpf_anonimizado = anonimizar_cpf_hash('12345678900')
print(cpf_anonimizado)
Se o salt for descartado, a anonimização é verdadeira. Se o salt for armazenado, trata-se de pseudonimização.
3. Generalização
Substituir o CPF por uma faixa ou categoria que não permite identificação individual:
-
CPF
123.456.789-00passa a ser representado como "faixa 100-199". -
Útil para análises estatísticas que não precisam de identificação individual.
4. Supressão
Remover completamente o CPF do registro, mantendo apenas metadados não identificáveis:
- O registro passa a conter apenas data da transação, valor e tipo, sem CPF.
Técnicas de pseudonimização de CPF
1. Tokenização
Substituir o CPF por um token aleatório e manter o mapeamento em um cofre seguro:
import uuid
import os
# Cofre de tokens (em producao, usar banco seguro separado)
cofre_tokens = {}
def pseudonimizar_cpf(cpf: str) -> str:
"""Substitui CPF por token aleatorio."""
if cpf in cofre_tokens:
return cofre_tokens[cpf]
token = str(uuid.uuid4())
cofre_tokens[cpf] = token
return token
def reverter_token(token: str) -> str:
"""Recupera CPF original a partir do token."""
for cpf, t in cofre_tokens.items():
if t == token:
return cpf
return None
# Uso
token = pseudonimizar_cpf('12345678900')
print(f'Token: {token}')
cpf_original = reverter_token(token)
print(f'CPF original: {cpf_original}')
2. Criptografia reversível
Criptografar o CPF com uma chave que permite descriptografia quando necessário:
from cryptography.fernet import Fernet
CHAVE = os.environ.get('CHAVE_PSEUDO', Fernet.generate_key())
cipher = Fernet(CHAVE)
def pseudonimizar(cpf: str) -> str:
return cipher.encrypt(cpf.encode()).decode()
def reverter(cpf_pseudo: str) -> str:
return cipher.decrypt(cpf_pseudo.encode()).decode()
3. Mascaramento parcial
Ocultar parte do CPF mantendo apenas dígitos suficientes para referência:
-
123.456.789-00torna-se123.***.***-00. -
Útil para exibição em interfaces, mas não é anonimização completa.
Quando aplicar cada técnica
Anonimização -- use quando
-
Análises estatísticas -- relatórios agregados que não precisam identificar indivíduos.
-
Dados de treinamento para machine learning -- modelos que não devem conter dados pessoais.
-
Dados compartilhados externamente -- quando compartilhar dados com terceiros sem vínculo a titulares.
-
Após o período de retenção -- quando a finalidade do tratamento foi cumprida, mas os dados agregados ainda têm valor analítico.
Pseudonimização -- use quando
-
Operações que exigem re-identificação -- processos que podem precisar recuperar o CPF original (ex.: atendimento ao titular, auditorias).
-
Ambientes de desenvolvimento e testes -- bases de teste não devem conter CPFs reais, mas precisam de dados com formato consistente.
-
Segregação de dados -- separar o CPF real dos dados operacionais, mantendo o vínculo apenas em um cofre seguro.
-
Dados em trânsito entre sistemas internos -- reduzir a exposição ao transmitir tokens em vez de CPFs.
Integração com a API da CPFHub.io
Ao consultar um CPF via API, aplique a técnica adequada antes de armazenar os dados:
import requests
import uuid
CPFHUB_API_KEY = 'SUA_CHAVE_DE_API'
cofre = {}
def consultar_e_pseudonimizar(cpf: str) -> dict:
url = f'https://api.cpfhub.io/cpf/{cpf}'
headers = {
'x-api-key': CPFHUB_API_KEY,
'Accept': 'application/json'
}
response = requests.get(url, headers=headers, timeout=10)
resultado = response.json()
if not resultado.get('success'):
return None
dados = resultado['data']
# Pseudonimizar o CPF para armazenamento
token = str(uuid.uuid4())
cofre[token] = dados['cpf']
return {
'token': token,
'nome': dados['name'],
'validado': True
}
registro = consultar_e_pseudonimizar('12345678900')
print(registro)
Erros comuns
-
Confundir mascaramento com anonimização -- Mascarar parte do CPF não é anonimização; com os dígitos restantes, pode ser possível identificar o titular.
-
Armazenar salt junto com o hash -- Se o salt é armazenado, o hash pode ser revertido por força bruta.
-
Não proteger o cofre de tokens -- O cofre que mapeia tokens para CPFs deve ter controle de acesso rigoroso e criptografia.
-
Aplicar anonimização quando re-identificação é necessária -- Se o processo exige recuperar o CPF original, use pseudonimização.
Perguntas frequentes
Dado anonimizado de CPF ainda é protegido pela LGPD?
Não, desde que a anonimização seja verdadeira. Conforme o artigo 5o, inciso XI da LGPD, dado anonimizado é aquele do qual não se pode identificar o titular com meios técnicos razoáveis. Se a anonimização for reversível — por exemplo, o salt foi armazenado junto com o hash — o dado continua sendo pessoal sob a LGPD.
Qual técnica de pseudonimização é mais segura para CPF em banco de dados?
Tokenização com cofre separado é a abordagem mais robusta: o sistema operacional nunca vê o CPF real, apenas o token. O cofre (mapeamento token → CPF) deve estar em um banco isolado, com acesso restrito e logs de auditoria. Criptografia reversível com Fernet também é segura, mas exige gestão de chave adequada.
Posso usar CPF mascarado (ex.: 123..-00) em ambientes de teste?
O mascaramento parcial não é pseudonimização nem anonimização — ainda permite identificar o titular se combinado com outros dados. Para ambientes de teste, gere CPFs sintéticos com o mesmo formato (11 dígitos com dígitos verificadores válidos) ou use tokenização para substituir CPFs reais por identificadores sem relação com o dado original.
Como integrar pseudonimização ao fluxo de consulta da CPFHub.io?
Após a chamada GET https://api.cpfhub.io/cpf/{CPF}, gere um UUID como token, armazene o par {token: cpf} em cofre seguro e salve apenas o token no banco operacional junto com os demais dados retornados (nome, gênero, data de nascimento). Quando precisar re-identificar, consulte o cofre com o token — o CPF real nunca transita pelo sistema operacional.
Conclusão
Anonimização e pseudonimização são técnicas complementares que protegem dados de CPF em diferentes cenários. A escolha entre uma e outra depende da finalidade do tratamento: se o CPF não precisa mais ser recuperado, anonimize; se há necessidade de re-identificação futura, pseudonimize com controles adequados.
Cadastre-se em cpfhub.io — 50 consultas mensais gratuitas, sem cartão de crédito — e valide CPFs com segurança antes de aplicar a técnica de proteção adequada ao seu contexto de armazenamento.
CPFHub.io
Pronto para integrar a API?
50 consultas gratuitas para testar agora. Sem cartão de crédito. Acesso imediato à documentação.
Sobre a redação
Redação CPFHub.io
Time editorial especializado em APIs de CPF, identidade digital e compliance no mercado brasileiro. Produzimos guias técnicos, análises regulatórias e tutoriais sobre LGPD e KYC para desenvolvedores e líderes de produto.



