Ders 10 / 18
Dosya ve Bağlantı İtibar Servisleri
Çoklu motor itibar sonucunun birleştirilmesinin ölçülmesi: 24 kalem ve 12 motorda çoğunluk eşiği yükseldikçe kesinliğin yüzde 50'den 86'ya çıkıp anmanın yüzde 92'den 8'e düşmesi, tek motor ailesi içinde çoğunluk kararının tek motor seçmekle özdeş çıkması, 24 kalemin 10'unun gizlilik sınırı nedeniyle hiç sorulamaması ve her sorgunun karşı tarafa iz bırakması.
İçindekiler
Önceki derste iki kalem hiçbir çözümleme ortamında karara bağlanamadı ve her kalem için ayrı bir hazırlık, gözlem ve elle inceleme bütçesi harcandı. Bir kalemi karara bağlamanın ikinci bir yolu daha vardır: aynı kalemi çok sayıda bağımsız motora sorup çıkan sonuçları birleştirmek. Bu yol saniyeler sürer ve karşılığında yeni bir soru getirir — birbiriyle çelişen sonuçlar nasıl birleştirilir.
Çoklu motor itibar servisi bir kalemi ya da bir bağlantı hedefini birçok denetim motoruna sorar ve dönen işaretleri bir arada gösterir. Çıktı bir karar değil, bir oy dağılımıdır; kararı veren, o dağılımı okuyan taraftır. Bu dersin ölçtüğü şey o okumanın kalitesidir.
Oy Saymak ve Bağımsızlık
Bir eşik seçmek gerekir: kaç motor işaretlerse kalem kötü sayılacak. Eşik düştükçe daha çok kötü kalem yakalanır ve daha çok temiz kalem yanlışlıkla işaretlenir; yükseldikçe tersi olur. İki sayı bu ödünleşimi ölçer. Kesinlik (precision), kötü dediklerimizin ne kadarının gerçekten kötü olduğudur. Anma (recall), gerçekten kötü olanların ne kadarını yakaladığımızdır.
Çoğunluk kararının kazanç sağlaması tek bir koşula bağlıdır: motorların birbirinden bağımsız yanılması. Aynı yöntemi kullanan iki motor aynı kalemlerde yanılır; ikisinin oyu bir oydan fazlasını söylemez. Bu derste motorlar iki aileye ayrılır ve aile içinde iç içe geçmiş kabul edilir: duyarlılığı yüksek bir motor, düşüğünün işaretlediği her kalemi işaretler. Aileler arasında böyle bir ilişki yoktur.
- AA29. Motor listesi, kalem listesi ve eşik değerleri modeldir; gerçek bir itibar servisi, gerçek bir dosya ve gerçek bir açık kimliği yok.
- AA30. Bir motor bir kalemi ancak duyarlılığı, kalemin o ailedeki eşiğinden büyük ya da eşitse işaretler. Kötü kalemlerde eşik “yakalanması için gereken duyarlılık”, temiz kalemlerde “yanlış işaretlenmesi için gereken duyarlılık” anlamına gelir.
- AA31. Aile içinde motorlar iç içe geçmiştir; aileler arasında bağımsızdır. Gerçekte motorlar arasında kısmi bağımlılık vardır ve bu model iki uç durumu birlikte gösterir.
- AA32. Rastgelelik yok; bütün eşikler elle yazıldı.
- AA33. Gizlilik sınıfı
acikolan kalemin dosyası gönderilebilir.icveabone-verisikalemlerinde dosya gönderilmez; yalnız özet sorulur ve özet sorgusu ancak kalem servis tarafında biliniyorsa bir sonuç döndürür. - AA34. Bir dosyayı dışarıdaki bir servise göndermek onu yayımlamaktır; geri alınamaz.
- AA35. Sorgu hedef sistemlere gitmez; hedefte kayıt üretmez.
// itibar/motor.mjs — coklu motor itibar servisi MODELIDIR. Gercek bir servis, gercek bir // dosya ve gercek bir kalem yok; motorlar yalniz aile ve duyarlilik degeriyle anilir. // Iki aile iki ayri sinyale bakar. Bir aile icinde motorlar ic ice gecmistir: // duyarliligi yuksek motor, dusugunun isaretledigi her kalemi isaretler. export const MOTOR = [ ...[30, 40, 50, 60, 75, 90].map((d, i) => ({ ad: `i${i + 1}`, aile: 'imza', duyarlilik: d })), ...[30, 40, 50, 60, 75, 90].map((d, i) => ({ ad: `d${i + 1}`, aile: 'davranis', duyarlilik: d })), ]; // Kalem: kotu ise esik = yakalanmasi icin gereken en dusuk duyarlilik (aile basina). // Temiz ise esik = yanlis isaretlenmesi icin gereken en dusuk duyarlilik. 95 = hicbir motor. // gizlilik: acik = dosya gonderilebilir; ic ve abone-verisi = gonderilemez, yalniz ozet sorulur. // bilinen: ozet sorgusunun servis tarafinda karsiligi var mi. export const KALEM = ` k01 kotu 30 30 acik evet k02 kotu 40 40 acik evet k03 kotu 50 40 ic evet k04 kotu 60 50 acik hayir k05 kotu 50 60 ic hayir k06 kotu 75 60 abone-verisi evet k07 kotu 60 75 ic hayir k08 kotu 75 75 acik hayir k09 kotu 90 75 ic evet k10 kotu 95 60 abone-verisi hayir k11 kotu 95 95 ic hayir k12 kotu 40 50 acik hayir k13 temiz 95 95 acik evet k14 temiz 30 95 ic evet k15 temiz 95 30 abone-verisi evet k16 temiz 40 95 ic hayir k17 temiz 95 40 acik evet k18 temiz 50 95 ic hayir k19 temiz 95 50 abone-verisi evet k20 temiz 60 95 ic hayir k21 temiz 95 60 acik evet k22 temiz 75 95 ic hayir k23 temiz 95 75 abone-verisi hayir k24 temiz 30 30 abone-verisi hayir `.trim().split('\n').map((r) => { const [ad, gercek, imza, dav, gizlilik, bilinen] = r.trim().split(/\s+/); return { ad, kotu: gercek === 'kotu', esik: { imza: +imza, davranis: +dav }, gizlilik, bilinen: bilinen === 'evet' }; }); export const isaretler = (m, k) => m.duyarlilik >= k.esik[m.aile]; export const isaretSayisi = (k, kume = MOTOR) => kume.filter((m) => isaretler(m, k)).length; // Cogunluk karari: verilen motor kumesinde en az 'esik' motor isaretlediyse kalem kotu sayilir. export function cogunluk(esik, kume = MOTOR) { const s = { dp: 0, yp: 0, yn: 0, dn: 0 }; for (const k of KALEM) { const kotuDendi = isaretSayisi(k, kume) >= esik; if (kotuDendi && k.kotu) s.dp += 1; else if (kotuDendi) s.yp += 1; else if (k.kotu) s.yn += 1; else s.dn += 1; } s.kesinlik = s.dp + s.yp ? s.dp / (s.dp + s.yp) : 1; s.anma = s.dp / KALEM.filter((k) => k.kotu).length; return s; } export const tekMotor = (m) => cogunluk(1, [m]); // Gizlilik siniri: dosya yalniz 'acik' kalemlerde gonderilebilir. Digerlerinde ozet sorulur // ve ozet sorgusu ancak kalem servis tarafinda biliniyorsa bir sonuc dondurur. export const sorulabilir = (k) => k.gizlilik === 'acik' || k.bilinen; export const yayimlanan = (k) => k.gizlilik === 'acik';
Yirmi Dört Kalem, On İki Motor
// itibar/olc.mjs — 24 kalem 12 motordan gecirilir; cogunluk esigi ve motor ailesi taranir. import { MOTOR, KALEM, isaretSayisi, cogunluk, tekMotor, sorulabilir, yayimlanan } from './motor.mjs'; const y = (g, ...s) => console.log(s.map((v, i) => (g[i] < 0 ? String(v).padEnd(-g[i]) : String(v).padStart(g[i]))).join('').trimEnd()); const yuzde = (x) => `${(x * 100).toFixed(0)}%`; const imza = MOTOR.filter((m) => m.aile === 'imza'); const dav = MOTOR.filter((m) => m.aile === 'davranis'); console.log(`${KALEM.length} kalem (${KALEM.filter((k) => k.kotu).length} kotu), ` + `${MOTOR.length} motor: ${imza.length} imza + ${dav.length} davranis`); const A = [-8, 8, 8, 10, 10, 14]; console.log('\n1. kalem basina isaret sayisi'); y(A, 'kalem', 'gercek', 'imza', 'davranis', 'toplam', 'gizlilik'); for (const k of KALEM) y(A, k.ad, k.kotu ? 'kotu' : 'temiz', isaretSayisi(k, imza), isaretSayisi(k, dav), isaretSayisi(k), k.gizlilik); const B = [-6, 8, 8, 8, 10, 10]; console.log('\n2. cogunluk esigi taramasi (12 motor)'); y(B, 'esik', 'dogru+', 'yanlis+', 'yanlis-', 'kesinlik', 'anma'); for (let e = 1; e <= MOTOR.length; e += 1) { const s = cogunluk(e); y(B, e, s.dp, s.yp, s.yn, yuzde(s.kesinlik), yuzde(s.anma)); } const C = [-24, 8, 8, 8, 10, 10]; console.log('\n3. karar kurallarinin karsilastirmasi'); y(C, 'karar kurali', 'dogru+', 'yanlis+', 'yanlis-', 'kesinlik', 'anma'); const satir = (ad, s) => y(C, ad, s.dp, s.yp, s.yn, yuzde(s.kesinlik), yuzde(s.anma)); const tekler = MOTOR.map((m) => ({ m, s: tekMotor(m) })).filter((x) => x.s.dp > 0); const enKesin = tekler.reduce((a, b) => (b.s.kesinlik > a.s.kesinlik ? b : a)); satir(`en kesin tek motor (${enKesin.m.ad})`, enKesin.s); satir('yalniz imza, esik 2', cogunluk(2, imza)); satir('yalniz davranis, esik 2', cogunluk(2, dav)); satir('karma, esik 3', cogunluk(3)); satir('karma, esik 5', cogunluk(5)); satir('karma, esik 7', cogunluk(7)); const ozdes = (kume) => kume.every((_, i) => { const a = cogunluk(i + 1, kume), b = tekMotor(kume[kume.length - 1 - i]); return a.dp === b.dp && a.yp === b.yp; }); console.log(` tek aile icinde cogunluk, tek motor secmekle ozdes mi: ` + `imza ${ozdes(imza) ? 'evet' : 'hayir'}, davranis ${ozdes(dav) ? 'evet' : 'hayir'}`); console.log('\n4. gizlilik siniri ve iz'); const acik = KALEM.filter(yayimlanan), sorulur = KALEM.filter(sorulabilir); console.log(` dosyasi gonderilebilen (yayimlanan) kalem ${acik.length} / ${KALEM.length}`); console.log(` ozet sorgusuyla karsilik bulunan kalem ${sorulur.length - acik.length}`); console.log(` hicbir bicimde sorulamayan kalem ${KALEM.length - sorulur.length}`); console.log(` bunlarin kotu olani ` + `${KALEM.filter((k) => k.kotu && !sorulabilir(k)).length}`); console.log(` abone verisi tasidigi icin gonderilemeyen ` + `${KALEM.filter((k) => k.gizlilik === 'abone-verisi').length}`); console.log(` karsi tarafa iz birakan gonderim ${sorulur.length}`); console.log(` hedef sistemlerde uretilen kayit 0`); console.log(`\nhicbir motorun isaretlemedigi kotu kalem ` + `${KALEM.filter((k) => k.kotu && isaretSayisi(k) === 0).length}`); console.log(`butun motorlarin isaretledigi temiz kalem ` + `${KALEM.filter((k) => !k.kotu && isaretSayisi(k) === MOTOR.length).length}`); console.log(`tek ailenin kor kaldigi kotu kalem ` + `${KALEM.filter((k) => k.kotu && (isaretSayisi(k, imza) === 0 || isaretSayisi(k, dav) === 0)).length}`);
24 kalem (12 kotu), 12 motor: 6 imza + 6 davranis
1. kalem basina isaret sayisi
kalem gercek imza davranis toplam gizlilik
k01 kotu 6 6 12 acik
k02 kotu 5 5 10 acik
k03 kotu 4 5 9 ic
k04 kotu 3 4 7 acik
k05 kotu 4 3 7 ic
k06 kotu 2 3 5 abone-verisi
k07 kotu 3 2 5 ic
k08 kotu 2 2 4 acik
k09 kotu 1 2 3 ic
k10 kotu 0 3 3 abone-verisi
k11 kotu 0 0 0 ic
k12 kotu 5 4 9 acik
k13 temiz 0 0 0 acik
k14 temiz 6 0 6 ic
k15 temiz 0 6 6 abone-verisi
k16 temiz 5 0 5 ic
k17 temiz 0 5 5 acik
k18 temiz 4 0 4 ic
k19 temiz 0 4 4 abone-verisi
k20 temiz 3 0 3 ic
k21 temiz 0 3 3 acik
k22 temiz 2 0 2 ic
k23 temiz 0 2 2 abone-verisi
k24 temiz 6 6 12 abone-verisi
2. cogunluk esigi taramasi (12 motor)
esik dogru+ yanlis+ yanlis- kesinlik anma
1 11 11 1 50% 92%
2 11 11 1 50% 92%
3 11 9 1 55% 92%
4 9 7 3 56% 75%
5 8 5 4 62% 67%
6 6 3 6 67% 50%
7 6 1 6 86% 50%
8 4 1 8 80% 33%
9 4 1 8 80% 33%
10 2 1 10 67% 17%
11 1 1 11 50% 8%
12 1 1 11 50% 8%
3. karar kurallarinin karsilastirmasi
karar kurali dogru+ yanlis+ yanlis- kesinlik anma
en kesin tek motor (d5) 11 6 1 65% 92%
yalniz imza, esik 2 9 6 3 60% 75%
yalniz davranis, esik 2 11 6 1 65% 92%
karma, esik 3 11 9 1 55% 92%
karma, esik 5 8 5 4 62% 67%
karma, esik 7 6 1 6 86% 50%
tek aile icinde cogunluk, tek motor secmekle ozdes mi: imza evet, davranis evet
4. gizlilik siniri ve iz
dosyasi gonderilebilen (yayimlanan) kalem 8 / 24
ozet sorgusuyla karsilik bulunan kalem 6
hicbir bicimde sorulamayan kalem 10
bunlarin kotu olani 4
abone verisi tasidigi icin gonderilemeyen 6
karsi tarafa iz birakan gonderim 14
hedef sistemlerde uretilen kayit 0
hicbir motorun isaretlemedigi kotu kalem 1
butun motorlarin isaretledigi temiz kalem 1
tek ailenin kor kaldigi kotu kalem 2
Eşik Neyi Satın Alır
İkinci tablo bütün eşikleri sırayla deniyor ve tek bir satırın hem kesinliği hem anmayı birlikte yükseltmediğini gösteriyor. Bir motorun işaretlemesi yeterli sayılırsa anma yüzde 92’ye çıkar ve kesinlik yüzde 50’de kalır: kötü denilen 22 kalemin yarısı temizdir. Yedi motor istenirse kesinlik yüzde 86’ya çıkar ve anma yüzde 50’ye düşer: altı kötü kalem gözden kaçar.
Bu eğrinin iki ucunda iki kalem duruyor ve ikisi de eşikten bağımsızdır. k11 hiçbir motor
tarafından işaretlenmiyor; hangi eşik seçilirse seçilsin kaçar. k24 bütün motorlar tarafından
işaretleniyor; hangi eşik seçilirse seçilsin yanlış pozitif kalır. Bu iki kalem, oy saymanın
düzeltemeyeceği hata tabanıdır ve raporda “itibar sorgusu karara bağlayamadı” satırıyla değil,
başka bir yöntemle ele alınmalıdır.
Eşik seçimi bu yüzden teknik değil, iş kararıdır: bir yanlış pozitifin bedeli bir soruşturma saatiyse eşik aşağı, saha ekibinin geri çağrılmasıysa yukarı çekilir. Aynı tablo iki kurumda iki farklı satırı seçtirir.
Çoğunluk Ne Zaman Bir Şey Ekler
Üçüncü tablonun son satırı bu dersin yapısal bulgusudur: tek aile içinde çoğunluk kararı, tek
motor seçmekle özdeştir. Altı imza motorunun ikisinin işaretlemesini istemek, imza ailesinin
beşinci motorunu tek başına dinlemekle aynı sonucu verir — aynı doğru pozitif, aynı yanlış pozitif.
Kod bunu altı eşiğin hepsinde denetliyor ve iki aile için de evet yazıyor. Nedeni şudur: iç içe
geçmiş motorlarda oy saymak, duyarlılık ekseninde bir yer seçmekten başka bir şey değildir. Aynı
yönteme bakan on iki motorun oyu, tek bir motorun oyudur.
Karma küme farklı davranıyor ama kazancı koşulludur. Yüzde 92 anmada karma eşik 3, en iyi tek motordan daha kötüdür: aynı 11 doğru pozitife karşılık 9 yanlış pozitif üretir, tek motor 6 üretir. Buna karşılık karma eşik 7, hiçbir tek motorun ulaşamadığı bir kesinliğe çıkar — yüzde 86’ya karşı en iyi tek motorun yüzde 65’i. Kazanç, iki ailenin farklı kalemlerde yanılmasından gelir: bir aileye kör görünen iki kötü kalem öteki aile tarafından işaretleniyor ve bir ailenin ürettiği yanlış pozitifler öteki ailede oy bulamıyor.
Buradan çıkan kural şudur: çoklu motor sonucunu okurken sayılacak olan motor sayısı değil, farklı yöntem sayısıdır. On iki işaretin altısı aynı aileden geliyorsa o altı işaret bir işarettir.
Gönderilemeyen Kalem
Dördüncü blok bedeli veriyor ve bedelin büyük bölümü teknik değildir. Yirmi dört kalemin yalnız sekizinin dosyası gönderilebilir. Altı kalem abone verisi taşıdığı için hiçbir koşulda gönderilemez; bir dosyayı dışarıdaki bir servise yüklemek onu yayımlamaktır ve geri alınamaz. Kalan kalemler için yalnız özet sorgulanabilir, ama özet sorgusu ancak kalem servis tarafında biliniyorsa yanıt verir. Sonuç: on kalem hiçbir biçimde sorulamıyor ve bunların dördü gerçekte kötü.
Bu, önceki derslerdeki kapsam sınırının aynı yapıdaki başka bir biçimidir. Orada kapsam dışı hedefe istek gönderilemiyordu; burada gizlilik sınıfı dışarı çıkamıyor. İkisi de doğrulanamayan aday üretir ve ikisi de raporda “yöntem bu kaleme uygulanamadı” satırıyla yazılır.
Savunmadaki iz sütunu bu derste yine sıfırdır: sorgular hedef sistemlere gitmez. İz başka yere düşer. On dört sorgunun her biri servisin kayıtlarına girer ve o kayıtları izleyebilen biri, hangi kalemin ne zaman soruşturulduğunu öğrenir. Önceki dersin sonunda ayrılan iki iz türünden ikincisi burada en somut halini alır: bir kalemin sorgulanması, o kalemi kullanan tarafa incelendiğini söyleyebilir ve bu bilgi geri alınamaz.
Özet
- Çoğunluk eşiği yükseldikçe kesinlik yüzde 50’den 86’ya çıkar, anma yüzde 92’den 8’e iner; hiçbir eşik ikisini birlikte yükseltmez ve seçim bir iş kararıdır.
- İki kalem eşikten bağımsızdır: biri hiçbir motorun işaretlemediği kötü kalem, öteki bütün motorların işaretlediği temiz kalem. Bu ikisi oy saymanın düzeltemediği hata tabanıdır.
- Tek aile içinde çoğunluk kararı tek motor seçmekle özdeştir; iç içe geçmiş motorlarda oy saymak duyarlılık ekseninde bir yer seçmekten başka bir şey değildir.
- Karma kümenin kazancı koşulludur: aynı anmada tek motordan daha çok yanlış pozitif üretir, ama yüksek eşikte hiçbir tek motorun ulaşamadığı yüzde 86 kesinliğe çıkar. Sayılacak olan motor sayısı değil farklı yöntem sayısıdır.
- Yirmi dört kalemin sekizinin dosyası gönderilebilir; altısı abone verisi taşıdığı için hiçbir koşulda gönderilemez ve on kalem hiçbir biçimde sorulamaz. Bunların dördü gerçekte kötüdür.
- Hedefte üretilen kayıt sıfırdır; on dört sorgu servisin kayıtlarına düşer ve karşı tarafa incelendiğini söyleyebilir.
Sonraki Adım
Buraya kadar beş araç sınıfı aynı sınıra çarptı. Trafik alanları çıkarım bıraktı, çözümleyici şifreli akışta meta veriye düştü, vekil araç kapsam nedeniyle iki adayı bırakmak zorunda kaldı, sanal alan iki kalemi karara bağlayamadı, itibar servisi on kalemi hiç soramadı. Her seferinde aynı boşluk kaldı: bir kalemin gerçekten açık olduğunu göstermenin son adımı yapılmadı.
Sonraki ders o son adımı ele alan araç sınıfını — istismar çerçevelerini — yalnız doğrulama amacıyla ve sınırlarıyla inceler. Ölçülen üç şey vardır: bir çerçevenin neyi kanıtladığı, neyi kanıtlamadığı ve hangi durumda hedefe zarar verdiği. Özellikle ikincisi üzerinde durulur, çünkü başarısız bir doğrulama denemesi açığın olmadığını kanıtlamaz ve bu ayrımın kaybolması raporun en pahalı hatasıdır.
İlerlemeni kaydetmek ve not almak için Giriş yap
Notlarım
Not almak için giriş yapmalısın.