MLSecOps · Adli-Uyum Loglama

Canary Token ile İspatlanabilir LLM Sızıntısı: Adli-Uyum Odaklı KVKK Loglama Oracle'ı
Tahmin değil kanıt: oturum-özel kanaryayla sızıntının denetim zinciri

Bir chatbot "gizli veriyi sızdırdı mı?" sorusunun cevabı çoğu kurumda bir tahmindir. Oturum-özel bir canary token'ı RAG dokümanına gömer ve çıktıda ararsanız, tahmin yerine mahkemede ve denetimde savunulabilir bir kanıta sahip olursunuz.

Canary-Oracle Nedir? Tek Paragraflık Tanım

Canary-oracle, bir LLM/RAG sistemine her oturum için benzersiz, yüksek-entropili ve gerçek dünyada hiçbir yerde geçmeyen bir işaret dizisi (canary token) enjekte edip, bu dizinin modelin çıktısında görünüp görünmediğini kesin olarak kontrol eden bir sızıntı tespit desenidir. Kanaryanın çıktıda belirmesi olasılıksal bir sinyal değildir: token yalnızca gizli tutulması gereken bağlama (örneğin bir RAG dokümanına veya sistem promptuna) gömüldüğü için, kullanıcıya ulaşan yanıtta ortaya çıkması, o gizli bağlamın sızdırıldığının doğrudan kanıtıdır. "Oracle" adı buradan gelir: sistem, sızıntının olup olmadığını tahmin etmez, deterministik olarak bilir. Bu yaklaşım, güvenlik dünyasındaki klasik canary token mantığının LLM katmanına taşınmış halidir ve gözlemlenebilirlik ile adli-uyum arasındaki boşluğu kapatır.

Bu makale ne loglanır tartışmasını değil, sızıntı iddiasını nasıl kanıta çevirirsiniz sorusunu ele alır. Ham prompt'ları saklamadan hash/özellik/karar olaylarıyla loglama konusunu, tamamlayıcı yazımız gizlilik-korumalı AI güvenlik telemetrisi işliyor; burada odak, o telemetrinin taşıyacağı tek özel olay olan canary sızıntısıdır.

Neden "Tahmin" Değil "Kanıt": İspat Zinciri

Çoğu sızıntı tespiti dolaylı sinyallere dayanır: benzerlik skoru, PII regex isabeti, anomali puanı. Bunların hepsi olasılıksaldır ve bir denetçi ya da hâkim karşısında "belki" der. Canary-oracle deseninin gücü, sızıntı iddiasını yanlışlanabilir bir önermeye indirgemesidir:

  • Benzersizlik: Canary yeterince yüksek entropiye sahipse (ör. 80+ bit rastgelelik), modelin eğitim verisinde veya kullanıcı girdisinde tesadüfen üretilme olasılığı pratikte sıfırdır.
  • Köken izolasyonu: Token yalnızca korunması gereken bağlama gömülür; kullanıcı onu asla görmez. Dolayısıyla çıktıdaki her görünüm, ancak korunan bağlamdan geçmiş olabilir.
  • Kayıt bütünlüğü: Olay, değiştirilemez, zaman damgalı ve önceki kayda hash'le zincirlenmiş bir denetim kaydına yazılır. Bu, KVKK Madde 12 kapsamında önerilen "tüm veri hareketlerinin değiştirilemez kaydı" beklentisiyle örtüşür.

Bu üçlü — benzersizlik, köken izolasyonu, kayıt bütünlüğü — bir ispat zinciri oluşturur. Sızıntı sonrası bir denetimde "gizli doküman kullanıcıya ulaştı mı?" sorusuna, kayıttaki canary_id ve doküman kimliğiyle nokta atışı yanıt verilebilir. AltaySec'in açık kaynak Bekçi/kalkan-arena red-team labında canary-oracle deseni tam da bu amaçla, oturum-özel kanarya + gizli oracle mantığıyla doğrulanmıştır (AltaySec'in kendi ölçüm ortamıdır, dış-genel bir istatistik değildir).

Canary Üretme ve Eşleştirme (Sözde-Kod)

Desen iki taraftan oluşur: enjeksiyon anında canary üretimi, çıktı anında eşleştirme. Kanaryanın kendisi loglanmaz; onun yerine sunucu-taraflı bir HMAC saklanır, böylece kaydın kendisi ikincil bir sızıntı yüzeyi olmaz.

# --- 1) Oturum başında canary üretimi ---
def canary_uret(session_id, server_secret):
    ham = secrets.token_urlsafe(15)          # ~120 bit entropi
    canary = f"AS-CANARY-{ham}"              # taranabilir sabit onek
    canary_id = uuid4()
    hmac_deger = hmac_sha256(server_secret, canary)
    store.kaydet(session_id, canary_id, hmac_deger)  # ham canary DISK'e yazilmaz
    return canary, canary_id

# Kanaryayi korunan baglama gom (kullanici asla gormez):
decoy_chunk = f"[DAHILI-REF {canary}] Bu satir yalnizca sistem icindir."
rag_index.ekle(decoy_chunk, meta={'canary_id': canary_id})

# --- 2) Cikti aninda eslestirme (oracle) ---
def sizinti_kontrol(model_ciktisi, session_id):
    norm = nfkc_casefold(strip_zero_width(model_ciktisi))
    for eslesme in re.finditer(r"AS-CANARY-[A-Za-z0-9_-]{20,}", norm):
        aday = eslesme.group()
        hmac_aday = hmac_sha256(server_secret, aday)
        kayit = store.oturum_canary(session_id)
        if kayit and sabit_zamanli_esit(hmac_aday, kayit.hmac):
            return Sizinti(
                tip='exact',
                canary_id=kayit.canary_id,
                offset=eslesme.start())
    return None  # kesin sizinti yok

Kritik detaylar: eşleştirme Unicode normalizasyonu (NFKC), casefold ve sıfır-genişlik karakter temizliği ile yapılır; aksi halde model kanaryayı görsel olarak bozarak eşleşmeden kaçabilir. HMAC karşılaştırması sabit-zamanlı olmalıdır. Kanaryayı gömdüğünüz decoy chunk'ın meşru bir yanıtta asla getirilmemesi gereken, açıkça "yalnızca dahili" etiketli bir tuzak olması gerekir — Türkçe LLM güvenliğinde az işlenen bu tuzak-doküman tekniği, LLM honeypot tasarımı mantığıyla akrabadır.

Yanlış-Pozitif Elemesi

Bir sızıntı iddiasının kanıt değeri taşıması için yanlış-pozitiflerin sistematik biçimde elenmesi şarttır. Aşağıdaki elemeler eşleştirmeyi "görünüm"den "onaylı sızıntı"ya taşır:

  • Kullanıcı eko elemesi: Canary'yi kullanıcının kendisi girdiyse (kopyalayıp yapıştırdıysa), çıktıdaki tekrar sızıntı değil ekodur. Girdi de aynı canary için taranır; girdide varsa olay dismissed işaretlenir.
  • Oturum bağlama elemesi: Eşleşen HMAC gerçekten bu oturumun canary'sine mi ait? Başka oturumun kanaryası çıkıyorsa bu, tenant/oturum izolasyon ihlalidir ve ayrı, daha ağır bir bulgudur.
  • Bozulmuş eşleşme = şüpheli, onaylı değil: Kanarya kodlanmış/parçalanmış (base64, ROT13, karakter araya sokma) biçimde çıkıyorsa, match_type obfuscated olarak işaretlenir ve otomatik onay verilmez; insan incelemesine düşer. Yalnızca exact ve normalized eşleşmeler ilk elde ispatlanabilir sayılır.
  • Entropi eşiği: Düşük entropili canary kullanılmışsa (kısa, tahmin edilebilir), tesadüf olasılığı sıfır değildir; bu tür kayıtlar kanıt değil sinyal olarak sınıflanır.

Bu eleme mantığı, "sızıntı oldu" cümlesini bir denetimde savunabileceğiniz üç durumdan birine ayırır: onaylı sızıntı, izolasyon ihlali, şüpheli/incelemede. PII maskeleme tarafını KVKK PII maskeleme yazımız tamamlar.

Minimal Log Şeması: 24 Alanlı Canary Denetim Kaydı

Log şeması burada ana konu değil, canary olayını adli-uyum standardında taşıyan minimal ektir. Amaç, ham prompt veya ham canary saklamadan; olayı, kökenini ve bütünlük çapasını tutmaktır. Aşağıdaki 24 alan; her alan için işlem (açık / hash / maskeli), saklama ilkesi ve KVKK Madde 12 karşılığıyla işaretlenmiştir. Örnek gövde:

{
  "event_id": "a1f0...", "event_type": "canary_leak_detected",
  "timestamp_utc": "2026-08-03T09:14:22Z", "prev_event_hash": "sha256:...",
  "tenant_id": "hmac:...", "session_id": "hmac:...", "user_ref": "psd:...",
  "canary_id": "c7e2...", "canary_hmac": "hmac:...",
  "canary_placement": "rag_chunk", "source_doc_id": "doc-9931",
  "retrieval_doc_ids": ["doc-9931","doc-4420"], "detection_stage": "output",
  "match_type": "exact", "match_confidence": 1.0, "match_offset": 412,
  "output_sha256": "...", "output_excerpt_masked": "...[MASKELI]...",
  "prompt_sha256": "...", "model_version": "guardian-rt-3.1",
  "severity": "critical", "fp_review_state": "confirmed",
  "retention_expiry": "2027-08-03", "kvkk_basis": "Md.12-veri-guvenligi"
}
#AlanİşlemSaklamaKVKK Md.12 karşılığı
1event_idaçıkolay + 1 yılHesap verebilirlik
2event_typeaçıkolay + 1 yılOlay sınıflandırma
3timestamp_utcaçık (değiştirilemez)olay + 1 yılZaman damgalı kayıt
4prev_event_hashaçıkolay + 1 yılDeğiştirilemezlik (zincir)
5tenant_idhash (HMAC)olay + 1 yılErişim/izolasyon ayrımı
6session_idhasholay + 1 yılİzlenebilirlik
7user_refhash (takma ad)olay + 1 yılVeri minimizasyonu
8canary_idaçıkolay + 1 yılKöken referansı
9canary_hmachasholay + 1 yılGizli oracle (ham canary tutulmaz)
10canary_placementaçıkolay + 1 yılKöken bağlamı
11source_doc_idaçıkolay + 1 yılSızan varlığın kimliği
12retrieval_doc_idsaçıkolay + 1 yılGetirme izi
13detection_stageaçıkolay + 1 yılTespit noktası
14match_typeaçıkolay + 1 yılKanıt gücü (exact/obfuscated)
15match_confidenceaçıkolay + 1 yılYanlış-pozitif elemesi
16match_offsetaçıkolay + 1 yılKanıt konumu
17output_sha256hasholay + 1 yılÇıktı bütünlük çapası
18output_excerpt_maskedmaskeli (PII redakte)olay + 90 günKanıt penceresi + minimizasyon
19prompt_sha256hasholay + 1 yılGirdi bütünlüğü
20model_versionaçıkolay + 1 yılRegresyon takibi
21severityaçıkolay + 1 yılRisk derecelendirme
22fp_review_stateaçıkolay + 1 yılAdli karar durumu
23retention_expiryaçıkSaklama/imha politikası
24kvkk_basisaçıkolay + 1 yılHukuki dayanak etiketi

Dikkat: ham canary yalnızca canary_hmac olarak tutulur, çıktı yalnızca output_sha256 + maskeli pencere olarak tutulur. Böylece denetim kaydının kendisi yeni bir sızıntı yüzeyi olmaz — bu, gizlilik-korumalı loglama ilkesinin canary olayına uyarlanmış halidir.

KVKK Madde 12 ve Adli-Uyum Karşılığı

KVKK Madde 12, veri güvenliğine ilişkin yükümlülükleri düzenler ve teknik tedbirler kapsamında tüm veri hareketlerinin zaman damgalı, değiştirilemez biçimde kayıt altına alınması önerilir. Canary denetim kaydının timestamp_utc + prev_event_hash zinciri tam olarak bu beklentiyi karşılar: kayıtlar geriye dönük değiştirilirse hash zinciri kırılır ve tahrifat ortaya çıkar.

Bunun ötesinde, KVKK Etken Yapay Zeka Rehberi, çok-ajanlı ve otonom yapılarda izlenebilirlik ve hesap verebilirlik boşluğunu — yani "kara kutu" sorununu — açıkça bir risk olarak işaret etmektedir. Rehber "kaydedilmeli" der; ancak hangi alanların, nasıl loglanacağına dair somut teknik şablon Türkçe kaynaklarda az işlenmiştir. Bu makaledeki canary-oracle deseni ve 24 alanlı şema, o teknik boşluğu dolduran nadir Türkçe kaynaklardan biri olmayı hedefler. Adli-uyum açısından değeri şudur: bir veri ihlali bildirimi veya denetim talebinde, "gizli doküman kullanıcıya ulaştı mı?" sorusuna spekülasyonla değil, canary_id + source_doc_id + değiştirilemez zaman damgasıyla belgelenmiş bir yanıt verilebilir.

Sınırlar, Guardian ile Konumlama ve Kaynak Sınırı

Canary-oracle güçlü ama sihirli değildir. Sınırları dürüstçe belirtmek, yöntemin kanıt değerini korur:

  • Kapsam sınırı: Yalnızca gömdüğünüz canary'nin sızıntısını kanıtlar. Kanarya taşımayan hassas içeriğin sızıntısını yakalamaz; kapsamı tuzak-doküman stratejinizin genişliği belirler.
  • Yeniden ifade riski: Model, korunan bilgiyi kanaryayı hiç taşımadan başka kelimelerle özetleyerek sızdırabilir; bu semantik sızıntı canary ile değil, tamamlayıcı savunmalarla yakalanır.
  • Konumlama: Canary tespiti bir algılama katmanıdır; sızıntıyı engellemek için çıktının kullanıcıya ulaşmadan kesilmesi gerekir. AltaySec Guardian gibi bir çalışma-zamanı LLM güvenlik duvarı, canary tespitini bir engelleme kuralına bağlayarak algılamayı önlemeye çevirebilir. RAG tarafındaki bütünsel izleme için RAG güvenlik izleme yazısına bakın.

Kaynak sınırı: Bu makaledeki canary-oracle deseninin "tahmin değil kanıt" özelliği, AltaySec'in kendi açık red-team ortamı olan Bekçi/kalkan-arena'da gözlemlenmiş bir tasarım desenidir; harici, bağımsız bir kıyaslama istatistiği olarak sunulmamaktadır. 24 alanlı şema bir öneri şablonudur, zorunlu bir standart değildir; kurumunuzun saklama ve imha politikasına göre uyarlanmalıdır. Uygulama desteği için bizimle iletişime geçebilirsiniz.

Kaynaklar

İlgili Yazılar