ANPD LGPD Brazylia: Przewodnik anonimizacji dla zespołów przetwarzających dane w języku португueskim
Brazylijski identyfikatory
CPF (Cadastro de Pessoas Físicas)
- 11 cyfr: XXX.XXX.XXX-XX
- Struktura: data urodzenia + numer sekwencyjny + 2 cyfry kontrolne
- Przykład: 123.456.789-09
- Kod modulo-11
CNPJ (Cadastro Nacional da Pessoa Jurídica)
- 14 cyfr: XX.XXX.XXX/0001-XX
- Używany dla firm
- Przykład: 12.345.678/0001-90
Problemy z PII narzędziami
Większość narzędzi PII nie zna formatu CPF/CNPJ:
- Nie rozpoznają separatory (. i -)
- Nie walidują cyfry kontrolne
- Mogą wziąć "123.456.789" za zwykły tekst
Implementacja w Presidio
from presidio_analyzer import Pattern, PatternRecognizer
# CPF pattern - 11 digits, XXX.XXX.XXX-XX format
cpf_pattern = Pattern("CPF", r'\d{3}\.\d{3}\.\d{3}-\d{2}')
cpf_recognizer = PatternRecognizer(
supported_entity="CPF",
patterns=[cpf_pattern]
)
# CNPJ pattern - 14 digits
cnpj_pattern = Pattern("CNPJ", r'\d{2}\.\d{3}\.\d{3}/0001-\d{2}')
cnpj_recognizer = PatternRecognizer(
supported_entity="CNPJ",
patterns=[cnpj_pattern]
)
analyzer = AnalyzerEngine()
analyzer.add_recognizer(cpf_recognizer)
analyzer.add_recognizer(cnpj_recognizer)
Walidacja CPF
CPF ma algorytm kontrolny (modulo-11). Możesz walidować:
def validate_cpf(cpf):
# Usuń separatory
cpf = cpf.replace('.', '').replace('-', '')
# Oblicz pierwszą cyfrę kontrolną
sum1 = sum(int(cpf[i]) * (10 - i) for i in range(9))
digit1 = 11 - (sum1 % 11)
digit1 = 0 if digit1 > 9 else digit1
# Oblicz drugą cyfrę kontrolną
sum2 = sum(int(cpf[i]) * (11 - i) for i in range(9))
digit2 = 11 - (sum2 % 11)
digit2 = 0 if digit2 > 9 else digit2
return cpf[-2:] == f"{digit1}{digit2}"
LGPD wymogi anonimizacji
LGPD Art. 13 mówi:
"Dane mogą być przetwarzane bez zgody dla celów statystycznych, naukowych, historycznych i zabytkowych, jeśli dane zostały anonimizowane."
Ale co to znaczy "anonimizowane"? ANPD definiuje:
Prawdziwie anonimizowane: Dane nie mogą być powiązane ani samodzielnie ani z innymi, nawet jeśli połączy się z innymi bazami.
Pseudo-anonimizowane: Dane są zasłonięte, ale mogą być powiązane z ukrytymi kluczami. To NIE jest anonimizowane pod LGPD.
Praktyczny przykład
Oryginalne: João Silva, CPF: 123.456.789-09, email: joao@company.com
LGPD compliant anonimizacja:
- Usunąć imię i nazwisko całkowicie (nie zmieniać na "Person A")
- Usunąć CPF całkowicie (nie zmieniać na [CPF])
- Usunąć email całkowicie
- Zamiast tego: "Osoba 47" (bez laku do faktycznych danych)
Lub:
- Usunąć wszystkie personalne dane
- Zachować tylko: rok urodzenia, płeć, stan (dla statystyk)
- Upewnić się że nie ma sposobu powrotu do oryginalnych danych
Kontrola list
Przed wysłaniem dokumentów do przetwarzania:
- Wszystkie CPF usunięte?
- Wszystkie CNPJ usunięte?
- Wszystkie imiona usunięte?
- Wszystkie email usunięte?
- Wszystkie numery telefonów usunięte?
- Wszystkie adresy usunięte?
- Czy dane są prawdziwie anonimizowane (nie pseudonymizowane)?
Zaključak
Brazylijskie dane PII mają inne formaty niż europejskie. LGPD ma ścisłą definicję anonimizacji. Narzędzia muszą być dostosowane do formatów CPF/CNPJ i procedury muszą uwzględniać wymogi LGPD.