Ana içeriğe geç
DLP · 4 dk okuma

Hassas Veri Tespiti — DLP'nin 3 Katmanlı Pipeline'ı

DLP yazılımı hassas veriyi nasıl bulur? Regex + NER + Sözlük 3 katmanlı pipeline. Her katmanın yapısı ve neden gerekli olduğu.

Yazar: Mehmet Özbakır

DLP yazılımı bir dosyada hassas veri olup olmadığını nasıl anlar? Modern DLP’ler 3 katmanlı pipeline kullanır. Bu yazıda her katmanın ne yaptığını ve neden gerekli olduğunu anlatıyoruz.

Niye tek katman yetmez?

Tek başına:

  • Sadece regex → %30+ false positive (TC zannedilen sipariş no, vs.)
  • Sadece NER → Türkçe modeller F1 %85-90, yapısal PII (IBAN, kart) için kötü
  • Sadece sözlük → kapsama düşük (TÜİK 1000 ad listesi yetersiz)

3 katmanı kombine ederek %95+ doğruluk + %5 altı FP mümkün.

Katman 1 — Regex pass

Ne yapar: yapısal pattern’leri yakalar.

Hangi PII:

  • TC kimlik ([1-9][0-9]{10} + mod-10)
  • VKN ([0-9]{10} + check digit)
  • IBAN (TR\d{24} + mod-97)
  • Kredi kartı (brand-spesifik + Luhn)
  • Türkiye telefon
  • E-posta
  • Plaka

Hız: çok hızlı (10MB dosya 100ms altında)

Avantaj: deterministik (aynı input → aynı output)

Dezavantaj: bağlam görmez. “Sipariş 12345678901” cümlesinde TC algoritma geçerse FP.

Optimizasyon — algoritma doğrulama:

PIIDoğrulama
TCMod-10 (2 check digit)
VKNMod-10
IBANMod-97
KartLuhn

Algoritma olmadan regex işe yaramaz — %50+ FP.

Katman 2 — NER pass (Named Entity Recognition)

Ne yapar: serbest metin entity’lerini tanır (ad, yer, organizasyon).

Teknoloji: Türkçe BERT NER modeli. Örnek:

  • savasy/bert-base-turkish-ner-cased
  • dbmdz/bert-base-turkish-cased + custom fine-tune

Çıktı:

"Ahmet İstanbul'da yaşıyor."
→ Ahmet: PERSON (güven 0.96)
→ İstanbul: LOC (güven 0.99)

Hız: ortalama PC’de 50-200ms (GPU ile 10x hızlı).

Avantaj: bağlam farkında. “Mehmet bir film izledi” cümlesinde “Mehmet” = ad olarak tanır.

Dezavantaj:

  • Türkçe F1 ~%85-90 — atla rama oranı %10-15
  • BERT model ~400 MB RAM kullanır (agent’a yüklenmesi durumunda)
  • Sürekli tahmin (deterministik değil — küçük varyans var)

Katman 3 — Sözlük pass (safety net)

Ne yapar: NER’in atladıklarını “şu liste var mı?” diye sözlük araması ile yakalar.

Sözlükler:

  • TÜİK en yaygın ad listesi: 1000 erkek + 1000 kadın isim
  • TÜİK soyad listesi: 1000+ yaygın soyad
  • TR yer adları: 81 il + ~970 ilçe + büyük mahalle/sokak
  • Tenant özel sözlük: müşteri firma adları, proje kodları, ürün kodları

Hız: çok hızlı (set lookup O(1)).

Avantaj: NER’in atladığı “Çetin Karaca” gibi yaygın ad-soyad kombinasyonlarını yakalar.

Dezavantaj: kapsama sınırlı. Sözlükte olmayan isim atlanır.

Katman 4 — Safety net check

3 katmandan geçen metin yine de “garip” görünüyorsa (yabancı dil, exotic format, bozuk encoding):

Kontrol: tanımlanamamış büyük harfli kelime oranı > %10 ise şüphe.

Aksiyon: tüm özet [icerik_analiz_edilemedi] ile değiştirilir. Ham metin yine saklanmaz.

Bu safety net fail-closed yaklaşımıdır: emin değilsek varsayım “hassas”. KVKK uyum açısından doğru tercih.

Pipeline çıktısı

3 katman sonrası tek konsolide rapor:

{
  "regex_hits": {
    "tc_kimlik": [{"position": 42, "value_masked": "123******01"}],
    "iban": [{"position": 89, "value_masked": "TR33...26"}]
  },
  "ner_entities": {
    "PERSON": ["Mehmet Ö*****r"],
    "LOC": ["İzmir"]
  },
  "dictionary_hits": {
    "person_name": ["Ayşe"],
    "city": ["Konak"]
  },
  "safety_net": "passed",
  "risk_score": 78
}

Bu çıktı politika engine’e girer, karar verilir.

Türk dili neden zor?

Türkçe morfolojik zenginlik (eklemeli dil) NER’i zorlaştırır:

  • “Mehmet’in” → ad + iyelik eki
  • “Mehmet’i”, “Mehmet’e”, “Mehmet’ten” — aynı ad, farklı çekim
  • Birleşik kelime: “babamlar” = “baba + m + lar”

İngilizce NER modeli bu varyasyonları tanımaz. Türkçe BERT özel fine-tune gerek.

VeritaDLP pipeline implementasyon

Python stack:

  • Regex: built-in re modülü + algoritma doğrulama Python
  • NER: HuggingFace transformers + BERT tr modeli
  • Sözlük: in-memory set (50k entry, 10ms lookup)
  • Safety net: heuristik kelime sayım

Rust agent stack:

  • Regex: regex crate
  • NER: ort crate ile ONNX runtime + quantized BERT
  • Sözlük: phf (perfect hash function) compile-time

Agent ~30 MB RAM ile 200 char/ms throughput.

False positive vs False negative dengesi

Pipeline ne için optimize edilir?

FP odaklı (precision-first):

  • Sadece regex + algoritma doğrulama
  • Sözlük + NER kapalı
  • Sonuç: %2 FP, %15 FN
  • Kullanılır: yüksek hacim ortam, “yanlış alarm cezalı”

FN odaklı (recall-first):

  • 3 katman + safety net agresif
  • Sonuç: %5 FP, %3 FN
  • Kullanılır: hassas sektör (sağlık, bankacılık)

VeritaDLP default recall-first (sızıntı kaçırma > yanlış alarm) ama tenant ayarlanabilir.

Sonuç

DLP’nin “akıllı” olması 3 katmanlı pipeline’da gizli. Regex hız + NER bağlam + sözlük güvenlik ağı kombinasyonu Türkçe metinde %95+ doğruluk sağlar. Tek katmana güvenen DLP (özellikle yabancı vendor’lar) Türk pazarında zayıf.

VeritaDLP 3 katmanlı pipeline’ı default kullanır, tenant kendi sözlüğünü yükleyebilir.

Etiketler: #hassas-veri-tespiti #pii-tespit #dlp #teknik

İlgili yazılar

Yeni rehberler için kaydolun

Ayda en fazla 2 e-posta. KVKK rehberleri, ürün güncellemeleri ve vaka çalışmaları. Tek tıkla iptal.

Double opt-in: kaydolduktan sonra e-postanıza onay bağlantısı gönderilir. Bağlantıya tıklayana kadar listeye eklenmezsiniz. KVKK Madde 11 başvuruları: dpo@veritadlp.com .