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:
| PII | Doğrulama |
|---|---|
| TC | Mod-10 (2 check digit) |
| VKN | Mod-10 |
| IBAN | Mod-97 |
| Kart | Luhn |
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-caseddbmdz/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
remodü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:
regexcrate - NER:
ortcrate 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