anonym.legal
Назад до блогуGDPR та відповідність

Прогалини у покритті Presidio для EU-специфічних...

Microsoft Presidio відмінно виявляє US-ідентифікатори, але має суттєві прогалини для EU-специфічних PII: Codice Fiscale, NIF, CPR, PESEL.

April 21, 20267 хв читання
Presidio entity coverageEU GDPR PIIIBAN detectionEuropean identifiersPresidio vs managed

Проблема: Presidio оптимізований для США

Microsoft Presidio спочатку розроблений командою Microsoft з сильним фокусом на англомовний контент і американські ідентифікатори. Це чудовий інструмент — але для GDPR-відповідності в ЄС він потребує значного розширення.

Що Presidio виявляє добре

Стандартні ідентифікатори (всі юрисдикції):

  • EMAIL_ADDRESS
  • PHONE_NUMBER (міжнародний формат)
  • PERSON (NER через spaCy)
  • URL
  • IP_ADDRESS
  • CREDIT_CARD

US-специфічні:

  • US_SSN
  • US_BANK_NUMBER
  • US_PASSPORT
  • US_DRIVER_LICENSE

Що Presidio НЕ виявляє (EU-Gap)

Країни ЄС без покриття в Presidio (базовий)

КраїнаІдентифікаторСтатус у Presidio
ІталіяCodice FiscaleВідсутній
ІспаніяNIF/NIEВідсутній
ДаніяCPRВідсутній
ПольщаPESELВідсутній
НідерландиBSNВідсутній
АвстріяSozialversicherungsnummerВідсутній
ШвеціяPersonnummerВідсутній
НорвегіяPersonnummerВідсутній
ФінляндіяHenkilötunnusВідсутній
ГреціяAFM/AMKAВідсутній
УгорщинаTAJ-számВідсутній
ЯпоніяMy NumberВідсутній
БразиліяCPF/CNPJВідсутній

Критична прогалина: Якщо ваша організація обробляє дані резидентів ЄС і використовує лише базовий Presidio — ви пропускаєте більшість країна-специфічних ідентифікаторів.

Вирішення: Кастомні recognizers

Presidio дозволяє додавати кастомні recognizers через PatternRecognizer або EntityRecognizer.

Приклад: Codice Fiscale (Італія)

from presidio_analyzer import PatternRecognizer, Pattern

cf_pattern = Pattern(
    name="codice_fiscale",
    regex=r'[A-Z]{6}[0-9]{2}[A-Z][0-9]{2}[A-Z][0-9]{3}[A-Z]',
    score=0.7
)

cf_recognizer = PatternRecognizer(
    supported_entity="IT_CODICE_FISCALE",
    patterns=[cf_pattern],
    context=["codice fiscale", "CF", "C.F.", "codice"],
    supported_language="it"
)

analyzer.registry.add_recognizer(cf_recognizer)

Приклад: PESEL (Польща)

Представляє більшу складність — алгоритм перевірки Luhn-подібний:

def validate_pesel(pesel: str) -> bool:
    if len(pesel) != 11 or not pesel.isdigit():
        return False
    weights = [1, 3, 7, 9, 1, 3, 7, 9, 1, 3, 1]
    total = sum(int(pesel[i]) * weights[i] for i in range(11))
    return total % 10 == 0

class PeselRecognizer(EntityRecognizer):
    def analyze(self, text, entities, nlp_artifacts):
        results = []
        for match in re.finditer(r'\b[0-9]{11}\b', text):
            if validate_pesel(match.group()):
                results.append(RecognizerResult(
                    entity_type='PL_PESEL',
                    start=match.start(),
                    end=match.end(),
                    score=0.9
                ))
        return results

Підхід anonym.legal до покриття EU-ідентифікаторів

anonym.legal використовує Presidio як основу, але значно розширює його за допомогою:

  1. 285+ кастомних recognizers для 40+ юрисдикцій
  2. Алгоритмічна валідація для ідентифікаторів з контрольними цифрами (PESEL, CPR, IBAN)
  3. Контекстне покращення специфічне для кожної мови та юрисдикції
  4. Регулярне оновлення при змінах у стандартах ідентифікаторів

Пріоритетизація прогалин для вашої організації

Не потрібно закривати всі прогалини одразу. Пріоритизуйте на основі:

  1. Яких резидентів ЄС ви обслуговуєте? Якщо 80% клієнтів — з Польщі, PESEL — пріоритет 1
  2. Які ідентифікатори з'являються у ваших даних? Проведіть аудит існуючих даних
  3. Які ризики для регулятора? Якщо Garante вже розслідував вашу галузь — Codice Fiscale критичний

Висновок

Presidio — потужна основа, але для GDPR-відповідності в ЄС потребує розширення. Кастомні recognizers для країна-специфічних ідентифікаторів — необхідний крок для організацій, що обробляють дані резидентів ЄС.

Джерела:

Готові захистити свої дані?

Почніть анонімізувати PII з 285+ типами сутностей на 48 мовах.