Pular para conteúdo

Projeto 14: Mecanismo de Anonimização, Pseudonimização e Conformidade LGPD 🗂️

Escopo do Projeto

Objetivo: Projetar e codificar um motor de privacidade de dados em conformidade com a LGPD (Lei 13.709/2018) e GDPR, implementando pseudonimização determinística via HMAC, mascaramento dinâmico e o mecanismo de destruição criptográfica (Crypto-Shredding).


🎯 1. Contexto & Desafio Prático

A conformidade com legislações de privacidade exige que sistemas saibam proteger dados de identificação pessoal (PII) mesmo em relatórios analíticos ou logs, e atendam ao direito do titular de ser esquecido sem corromper a integridade referencial dos bancos relacionais. Você criará a infraestrutura de anonimização e o método de destruição de chaves por titular.


📋 2. Requisitos Técnicos Obrigatórios

  • R1 (Pseudonimização Determinística de PII): Gerar identificadores de usuários irreversíveis mas consistentes para reconciliação contábil utilizando HMAC-SHA-256 com chave secreta corporativa.
  • R2 (Mascaramento Dinâmico de Apresentação): Implementar filtros de visualização parcial para CPF (***.123.456-**), cartões de crédito e e-mails (j***@empresa.com.br) conforme o privilégio da sessão do operador.
  • R3 (Mecanismo de Crypto-Shredding para Esquecimento): Estruturar o armazenamento dos dados pessoais cifrados com uma chave individual por titular; ao receber solicitação de exclusão, destruir a chave do titular tornando os dados matematicamente irrecuperáveis.
  • R4 (Livro de Registro de Operações - Trilha de Consentimento): Construir log de auditoria encadeado (Hash Chain) registrando quando o consentimento foi concedido ou revogado.

📐 3. Diagrama Conceitual & Arquitetura

graph LR
    Input["Dado Pessoal (Nome, CPF, E-mail)"] --> Engine["LGPD Privacy Engine"]
    Engine -->|Regra de Exibição| Mask["Dado Mascarado (j***@corp.com)"]
    Engine -->|HMAC com Pepper Secreto| Pseudo["Identificador Pseudonimizado (Hash Imutável)"]
    Engine -->|Chave Individual do Titular K_user| EncData["Payload Cifrado em Repouso"]
    DeleteReq["Pedido de Exclusão (Direito ao Esquecimento)"] --> Shred["Crypto-Shredding: Deletar K_user"]
    Shred -.->|Chave Inexistente: Dado Inutilizado Irreversivelmente| EncData
    style Input fill:#e1f5fe,stroke:#01579b
    style Engine fill:#fff3e0,stroke:#e65100
    style Shred fill:#ffebee,stroke:#c62828
    style Pseudo fill:#e8f5e9,stroke:#2e7d32

💻 4. Especificação Técnica & Código de Referência

// lgpd_privacy_engine.py
import hmac
import hashlib
import re

class LGPDPrivacyEngine:
    def __init__(self, pepper_key: bytes):
        self.pepper_key = pepper_key
        # Repositório de chaves individuais de usuários para Crypto-Shredding
        self.user_keys = {}

    def pseudonymize(self, raw_cpf: str) -> str:
        """Gera um identificador determinístico pseudoanonimizado via HMAC."""
        clean_cpf = re.sub(r"\D", "", raw_cpf)
        return hmac.new(self.pepper_key, clean_cpf.encode('utf-8'), hashlib.sha256).hexdigest()

    def mask_email(self, email: str) -> str:
        """Aplica máscara preservando contexto sem expor a identidade."""
        parts = email.split('@')
        if len(parts) != 2:
            return "***@***"
        user, domain = parts
        masked_user = user[0] + "***" if len(user) > 1 else "*"
        return f"{masked_user}@{domain}"

    def mask_cpf(self, cpf: str) -> str:
        clean = re.sub(r"\D", "", cpf)
        if len(clean) != 11:
            return "***.***.***-**"
        return f"***.{clean[3:6]}.{clean[6:9]}-**"

    def crypto_shred_user(self, user_id: str) -> bool:
        """Executa o direito ao esquecimento destruindo a chave de criptografia do titular."""
        if user_id in self.user_keys:
            del self.user_keys[user_id]
            return True
        return False

if __name__ == '__main__':
    engine = LGPDPrivacyEngine(pepper_key=b'segredo_mestre_lgpd_2026')
    print("Pseudônimo CPF:", engine.pseudonymize("123.456.789-00"))
    print("E-mail mascarado:", engine.mask_email("ricardo@empresa.com.br"))
    print("CPF mascarado:", engine.mask_cpf("123.456.789-00"))

📦 5. Critérios de Avaliação e Entrega

  1. Pseudonimização determinística com HMAC prevenindo correlação direta de dados.
  2. Políticas de mascaramento para diferentes tipos de dados sensíveis.
  3. Conceituação e código demonstrativo do padrão Crypto-Shredding para direito ao esquecimento.