İçeriğe geç
academia.sh

Ders 14 / 18

Test Türleri

Aynı 20 kalem ve aynı 41 kurgu açık üzerinde kara, gri ve beyaz kutu değerlendirmesi koşturuluyor. Kara kutu 78 aday üretip 6 kanıt bırakıyor (%7,7), gri kutu 63 adaydan 20, beyaz kutu 60 adaydan 31 kanıt çıkarıyor; 10 açık hiçbir türde kanıtlanamıyor çünkü kanıtı katılım kurallarının yasakladığı bir eylem gerektiriyor. Kanıt başına süre 8,82 saatten 1,87 saate, kanıt başına savunma kaydı 78'den 2,9'a iniyor; beyaz kutunun 31 kanıtının 17'si ancak içeriden anlamlı.

İçindekiler

Bir önceki ders kapsamı sayıya çevirdi: 20 kalem kapsamda, 11 kalem sınırda, net pencere 70 kişi-saat. O hesap neyin yapılabileceğini yazdı ama nasıl yapılacağını yazmadı. Aynı 20 kalem hiçbir ön bilgi verilmeden de değerlendirilebilir, kimlik bilgisi verilerek de, yapılandırma ve kaynak erişimi açılarak da. Üç yol aynı adı taşımaz ve aynı sonucu vermez.

Bu ders üç yolu tek bir hedefte karşılaştırır. Kara kutu değerlendirmesi hiçbir iç bilgi almadan başlar, gri kutu kimlik bilgisi ve sınırlı belge alır, beyaz kutu yapılandırmayı ve kaynağı görür. Karşılaştırmanın ölçüsü bulgu sayısı değildir; bulgu sayısı türden türe yanıltıcı biçimde değişir. Ölçü, üretilen aday ile kanıta dönüşen bulgu arasındaki farktır.

  • TS7. Değerlendirme, önceki dersteki 20 kapsam içi kalem üzerinde yürür. Kalem kümesi de açık kümesi de kurgudur.
  • TS8. Her açık iki ayrı erişim düzeyi taşır: onu görmek için gereken düzey ve onu kanıtlamak için gereken düzey. Düzeyler dis, kimlik ve ic biçiminde sıralıdır.
  • TS9. Bazı açıkların kanıt düzeyi etkidir: kanıtı ancak hizmeti etkileyecek bir eylemle alınabilir. Katılım kuralları bu eylemi yasakladığı için hiçbir tür bu düzeye erişemez.
  • TS10. Her kalem bir gürültü tabanı taşır: doğrulanmadan aday sayılan belirti sayısı. Tür ne kadar az iç bilgi görüyorsa gürültü çarpanı o kadar yüksektir.
  • TS11. Süre iki kalemden oluşur: kalem başına hazırlık ve aday başına doğrulama. Bütün süreler kurgudur ve kişi-saat cinsindendir.
  • TS12. İz kaydı, adımın savunma tarafında ürettiği kayıt sayısıdır. Aday başına iz çarpanı türe bağlıdır; belge okuyarak ilerleyen tür daha az kayıt üretir.

Aynı Hedefte Üç Tür

// turler.mjs — ayni hedefte kara, gri ve beyaz kutu degerlendirmesinin aday uretimi.
// MODELDIR; kalem kumesi de acik kumesi de kurgudur.
export const TOHUM = 20260811, KALEM = 20;
const uretec = (t) => { let s = t >>> 0;
  return () => (s = (s * 1664525 + 1013904223) >>> 0) / 4294967296; };
const r = uretec(TOHUM);

// Her acik iki ayri erisim duzeyi tasir: GORME icin gereken ve KANIT icin gereken.
// Kanit duzeyi gorme duzeyinden yuksek olabilir; aday ile kanit farki buradan cikar.
const DUZEY = ["dis", "kimlik", "ic"];
export const ACIK = [];
for (let k = 0; k < KALEM; k++) {
  const n = 1 + Math.floor(r() * 3);                // kalem basina 1-3 gercek acik
  for (let j = 0; j < n; j++) {
    const g = Math.floor(r() * 3);
    // "etki": kaniti ancak hizmeti etkileyecek bir eylemle alinabilen acik. Katilim
    // kurallari bunu yasakladigi icin hicbir tur bu duzeye erisemez.
    const kanit = r() < 0.15 ? "etki" : DUZEY[Math.min(2, g + (r() < 0.42 ? 1 : 0))];
    ACIK.push({ kalem: k, gorme: DUZEY[g], kanit });
  }
}
// Kalem basina gurultu tabani: dogrulanmadan aday sayilan belirti sayisi.
export const GURULTU = Array.from({ length: KALEM }, () => 1 + Math.floor(r() * 5));

// Tur tanimi: gordugu duzeyler, gurultu carpani, kalem basina hazirlik ve aday
// basina dogrulama suresi (saat), aday basina savunmada birakilan kayit.
export const TUR = [
  { ad: "kara kutu", gorus: ["dis"], gurultu: 1.0, hazirlik: 0.5, dogrulama: 0.55, iz: 6.0 },
  { ad: "gri kutu", gorus: ["dis", "kimlik"], gurultu: 0.6, hazirlik: 1.1, dogrulama: 0.40,
    iz: 3.5 },
  { ad: "beyaz kutu", gorus: ["dis", "kimlik", "ic"], gurultu: 0.3, hazirlik: 2.0,
    dogrulama: 0.30, iz: 1.5 },
];

// Bir tur, verilen kalem kumesinde olculur; kalem listesi verilmezse tamami.
export function olc(t, kalemler = [...Array(KALEM).keys()]) {
  const kume = new Set(kalemler);
  const acik = ACIK.filter((a) => kume.has(a.kalem));
  const gorulen = acik.filter((a) => t.gorus.includes(a.gorme));
  const kanit = gorulen.filter((a) => t.gorus.includes(a.kanit));
  const yanlis = kalemler.reduce((s, k) => s + Math.round(GURULTU[k] * t.gurultu), 0);
  const aday = gorulen.length + yanlis;
  const sure = kalemler.length * t.hazirlik + aday * t.dogrulama;
  return { aday, kanit: kanit.length, yanlis, askida: gorulen.length - kanit.length,
    kacan: acik.length - gorulen.length, sure, iz: Math.round(aday * t.iz) };
}

if (import.meta.url === `file://${process.argv[1]}`) {
  const gen = (B) => (h) => h.map((v, j) => (j ? String(v).padStart(B[j])
    : String(v).padEnd(B[0]))).join("");
  const yz = gen([13, 7, 8, 9, 9, 9, 9, 11]);
  console.log(`model (tohum ${TOHUM}): ${KALEM} kapsam ici kalem, ${ACIK.length} gercek acik`);
  const d = (k) => ACIK.filter((a) => a.gorme === k).length;
  console.log(`gorme duzeyine gore: dis ${d("dis")}, kimlik ${d("kimlik")}, ic ${d("ic")}; ` +
    `${ACIK.filter((a) => a.gorme !== a.kanit).length} acikta kanit duzeyi gormeden yuksek`);
  console.log("\n" + yz(["tur", "aday", "kanit", "yanlis+", "askida", "kacan", "saat",
    "kanit/saat"]));
  for (const t of TUR) {
    const o = olc(t);
    console.log(yz([t.ad, o.aday, o.kanit, o.yanlis, o.askida, o.kacan, o.sure.toFixed(1),
      (o.kanit / o.sure).toFixed(2)]));
  }
  const [a, b, c] = TUR.map((t) => olc(t));
  console.log(`\nkanit orani: kara ${(100 * a.kanit / a.aday).toFixed(1)}%, gri ` +
    `${(100 * b.kanit / b.aday).toFixed(1)}%, beyaz ${(100 * c.kanit / c.aday).toFixed(1)}%`);
}
model (tohum 20260811): 20 kapsam ici kalem, 41 gercek acik
gorme duzeyine gore: dis 16, kimlik 11, ic 14; 19 acikta kanit duzeyi gormeden yuksek

tur             aday   kanit  yanlis+   askida    kacan     saat kanit/saat
kara kutu         78       6       62       10       25     52.9       0.11
gri kutu          63      20       36        7       14     47.2       0.42
beyaz kutu        60      31       19       10        0     58.0       0.53

kanit orani: kara 7.7%, gri 31.7%, beyaz 51.7%

Tablonun ilk sütunu bu kursun en yanıltıcı sayısıdır. En çok adayı en az kanıt üreten tür çıkarıyor. Kara kutu 78 aday bırakıyor, bunların 62’si yanlış pozitif, 10’u görülüp kanıtlanamayan kalem, geriye 6 kanıt kalıyor: yüzde 7,7. Aynı hedefte beyaz kutu 60 adaydan 31 kanıt çıkarıyor. Bir raporun kapağına yazılan “78 bulgu” ile “60 bulgu” arasındaki fark, kurumun gerçekte aldığı şeyle ters yöndedir.

Bu farkın kaynağı ikinci satırdadır: 41 açığın 19’unda kanıt düzeyi görme düzeyinden yüksektir. Bir açığı görmek ile onu kanıtlamak ayrı erişim gerektirir, ve keşif aşamasının ürettiği her belirti bu ayrımın yanlış tarafında durur. Kara kutu dışarıdan görünen 16 açığın tamamını görebilir, ama bunların yalnız 6’sının kanıtına dışarıdan ulaşabilir; kalan 10’u askıda kalır. Askıda kalan aday rapora girerse doğrulanmamış bir iddiadır; girmezse kurum onu hiç duymaz. İkisi de tek başına doğru değildir, ve bu dersin ölçtüğü şey tam olarak bu üçüncü sütunun büyüklüğüdür.

Gri kutunun yeri de bu tabloda okunuyor. 63 aday, 20 kanıt ve 14 kaçan açıkla iki uç arasında duruyor, ama asıl katkısı sayıda değildir: gri kutu, kimlik bilgisi ele geçirilmiş bir hesabın nereye ulaşabildiği sorusunun karşılığıdır. Kara kutu bu soruyu hiç soramaz, çünkü kimlik düzeyine erişemez; beyaz kutu sorabilir ama yanıtı yapılandırmadan okur, oysa soru koşum zamanına aittir. Gri kutunun 6 içeriden kanıtı tam olarak bu sınıftadır ve bir kimlik ele geçirme senaryosunun sınırını çizer.

Beyaz kutunun 10 askıda kalemi ayrı bir sınıftır. Beyaz kutu her düzeyi görür, dolayısıyla onun askıda bıraktığı 10 aday kanıtı yalnız hizmeti etkileyecek bir eylemle alınabilen açıklardır. Katılım kuralları bu eylemi yasaklar, ve yasak kalktığı an değerlendirme değil kesinti üretilir. Bu 10 kalem hiçbir türde kanıtlanamaz; raporda “kanıtlanmış bulgu” değil, “koşulları yazılı aday” olarak durmak zorundadır. Kaçan sütunu ise bunun tersini gösterir: kara kutu 25 gerçek açığı hiç görmez, gri kutu 14’ünü, beyaz kutu hiçbirini kaçırmaz.

İzin Bedeli ve Kanıtın Anlamı

// karsilastir.mjs — turlerin biraktigi iz ve kanitin disaridan erisilebilirligi.
import { TUR, KALEM, ACIK, olc } from "./turler.mjs";

const gen = (B) => (h) => h.map((v, j) => (j ? String(v).padStart(B[j])
  : String(v).padEnd(B[0]))).join("");
const yz = gen([13, 8, 10, 11, 8, 10, 11]);
const tam = [...Array(KALEM).keys()];

// Kanitlanan aciklarin kaci disaridan gorulebilir duzeyde: bir saldirganin ilk
// erisim olmadan ulasabilecegi kanit ile ancak iceriden anlamli olan kanit ayrilir.
const dagit = (t) => {
  const kanit = ACIK.filter((a) => t.gorus.includes(a.gorme) && t.gorus.includes(a.kanit));
  return { dis: kanit.filter((a) => a.gorme === "dis").length,
    ic: kanit.filter((a) => a.gorme !== "dis").length };
};
console.log(`${KALEM} kalem, ${ACIK.length} gercek acik; iz kaydi savunma tarafinda sayilan ` +
  `kayittir`);
console.log(yz(["tur", "kanit", "iz kaydi", "iz / kanit", "distan", "iceriden", "saat/kanit"]));
for (const t of TUR) {
  const o = olc(t), d = dagit(t);
  console.log(yz([t.ad, o.kanit, o.iz, (o.iz / o.kanit).toFixed(1), d.dis, d.ic,
    (o.sure / o.kanit).toFixed(2)]));
}

// Karma: ilk m kalemde beyaz kutu, kalan kalemlerde gri kutu.
const [, gri, beyaz] = TUR;
const karma = (m) => {
  const a = olc(beyaz, tam.slice(0, m)), b = olc(gri, tam.slice(m));
  return { aday: a.aday + b.aday, kanit: a.kanit + b.kanit, askida: a.askida + b.askida,
    kacan: a.kacan + b.kacan, sure: a.sure + b.sure, iz: a.iz + b.iz };
};
const y2 = gen([17, 8, 8, 8, 8, 9, 10]);
console.log("\n" + y2(["karma beyaz / gri", "aday", "kanit", "askida", "kacan", "saat",
  "iz kaydi"]));
for (let m = 0; m <= KALEM; m += 4) {
  const k = karma(m);
  console.log(y2([`${m} / ${KALEM - m}`, k.aday, k.kanit, k.askida, k.kacan, k.sure.toFixed(1),
    k.iz]));
}
const s = karma(0), b20 = karma(KALEM);
console.log(`\ngri kutudan beyaz kutuya gecmek ${(b20.sure - s.sure).toFixed(1)} saat ekliyor, ` +
  `kaniti ${s.kanit}'den ${b20.kanit}'e cikariyor, kacan acigi ${s.kacan}'ten 0'a indiriyor`);
console.log(`ayni gecis iz kaydini ${s.iz}'den ${b20.iz}'a dusuruyor; askida kalan aday ` +
  `${s.askida}'den ${b20.askida}'a cikiyor, cunku beyaz kutu daha cok acik goruyor`);
20 kalem, 41 gercek acik; iz kaydi savunma tarafinda sayilan kayittir
tur             kanit  iz kaydi iz / kanit  distan  iceriden saat/kanit
kara kutu           6       468       78.0       6         0       8.82
gri kutu           20       221       11.1      14         6       2.36
beyaz kutu         31        90        2.9      14        17       1.87

karma beyaz / gri    aday   kanit  askida   kacan     saat  iz kaydi
0 / 20                 63      20       7      14     47.2       221
4 / 16                 64      24       7      10     49.9       199
8 / 12                 62      26       7       8     51.6       169
12 / 8                 63      30       7       4     54.2       145
16 / 4                 61      31       8       2     55.8       114
20 / 0                 60      31      10       0     58.0        90

gri kutudan beyaz kutuya gecmek 10.8 saat ekliyor, kaniti 20'den 31'e cikariyor, kacan acigi 14'ten 0'a indiriyor
ayni gecis iz kaydini 221'den 90'a dusuruyor; askida kalan aday 7'den 10'a cikiyor, cunku beyaz kutu daha cok acik goruyor

Süre sütunu önceki dersin kaba planını düzeltiyor. Orada 20 kalem için 76 saatlik tek bir plan vardı ve tür ayrımı yoktu; tür ayrıldığında aynı 20 kalem 47,2 ile 58,0 saat arasında değişiyor ve üçü de 70 saatlik net pencereye sığıyor. Yani seçim bir süre kısıtı değildir. Kanıt başına süreye bakıldığında fark açılıyor: kara kutuda bir kanıt 8,82 saat, beyaz kutuda 1,87 saat tutuyor. Kara kutunun süresi doğrulamaya değil, 62 yanlış pozitifi elemeye gidiyor.

İz sütunu mavi takım tarafını yazıyor. Kara kutu savunmada 468 kayıt bırakıyor, beyaz kutu 90. Aradaki oran 5,2’dir ve nedeni yalnız aday sayısı değildir: kara kutu her adayı ağ üzerinden sınamak zorundadır, beyaz kutu adayların bir bölümünü belgede kapatır. Kanıt başına iz 78’den 2,9’a iniyor. Bir değerlendirmenin savunmayı ne kadar meşgul ettiğini ölçmenin doğru birimi budur: toplam kayıt sayısı değil, kanıt başına kayıt.

Son iki sütun ise beyaz kutunun sınırını gösteriyor. 31 kanıtın 17’si ancak içeriden anlamlıdır: yapılandırmada var olduğu gösterilmiştir, ama dışarıdan bir isteğin oraya ulaşabildiği gösterilmemiştir. Kara kutunun 6 kanıtının 6’sı ise dışarıdan erişilebilir sınıftadır. İki tür farklı sorulara yanıt verir — biri “bu açık var mı”, öteki “bu açığa dışarıdan ulaşılıyor mu” — ve bir düzeltme kuyruğunda bu ikisi aynı sıraya konamaz.

Bu ayrım tür seçimini bir tercih olmaktan çıkarıp bir soru eşleştirmesine dönüştürür. Sorulan şey “dışarıdan bakan biri ne görüyor ve nereye ulaşabiliyor” ise kara kutu doğru araçtır ve 6 kanıtı bu soruya doğrudan yanıt verir; 468 kayıt ise savunmanın bu tür bir denemeyi görüp görmediğinin ölçüsü olarak ayrıca değerlidir. Sorulan şey “envanterde kaç açık var ve hangisi düzeltme kuyruğuna girmeli” ise beyaz kutu doğru araçtır, çünkü kaçan sütununu sıfırlayan tek türdür. İkisini aynı sözleşmede aynı ölçütle değerlendirmek, iki farklı soruya verilen yanıtları aynı tabloya yazmak olur.

Karma tablo aradaki geçişi tek eksende gösteriyor. Beyaz kutuya kayan her dört kalem kaçan açığı azaltıyor ve iz kaydını düşürüyor; karşılığında süre artıyor ve askıda kalan aday sayısı yükseliyor, çünkü daha çok açık görüldükçe kanıtı yasak olan kalemlerin de daha çoğu görünür oluyor. Beyaz kutunun asıl bedeli tabloda görünmez: kurumun yapılandırmayı ve kaynağı test ekibine açması gerekir, ve bu bir süre kalemi değil bir kurumsal karardır. Tablonun ara satırları da bu yüzden işe yarar — bütün envanteri açmak yerine dört ya da sekiz kalemi açmak, kaçan açığı 14’ten 10’a ve 8’e indirirken açılan belge miktarını beşte bir düzeyinde tutar. Hangi kalemlerin açılacağı ise teknik değil, iş tarafında verilen bir karardır.

Özet

  • Aynı 20 kalemde kara kutu 78 aday üretip 6 kanıt bırakıyor, beyaz kutu 60 adaydan 31 kanıt çıkarıyor; aday sayısı ile kanıt sayısı ters yönde hareket ediyor.
  • Farkın kaynağı, 41 açığın 19’unda kanıt düzeyinin görme düzeyinden yüksek olmasıdır: bir açığı görmek ile kanıtlamak ayrı erişim gerektirir.
  • 10 açık hiçbir türde kanıtlanamıyor, çünkü kanıtı ancak hizmeti etkileyecek bir eylemle alınabiliyor ve katılım kuralları bunu yasaklıyor; bu kalemler raporda kanıt değil, koşulları yazılı aday olarak durur.
  • Üç tür de 70 saatlik pencereye sığıyor; ayrım kanıt başına süredir — 8,82 saate karşı 1,87 saat.
  • Kara kutu savunmada 468, beyaz kutu 90 kayıt bırakıyor; kanıt başına iz 78’den 2,9’a iniyor.
  • Beyaz kutunun 31 kanıtının 17’si ancak içeriden anlamlıdır; kara kutunun 6 kanıtının tamamı dışarıdan erişilebilir sınıftadır ve iki tür farklı sorulara yanıt verir.

Sonraki Adım

Üç türün de ortak bir kalıntısı var: yanlış pozitif. Kara kutuda 62, gri kutuda 36, beyaz kutuda 19 aday gerçek bir açığa karşılık gelmiyor ve bu sayılar bu derste tek bir çarpanla üretildi. Gerçekte hangi adayın eleneceği çarpanla değil, adayın hangi kanıta dayandığıyla belirlenir: sürüm bilgisine bakarak üretilen bir aday ile davranışı gözlenerek üretilen bir aday aynı ağırlıkta değildir. Sonraki ders aday listesini doğrulama kurallarından geçirir ve elenen yanlış pozitifi tek tek sayar: kaç aday yalnız sürüm bilgisine dayanıyor, kaçı davranışla doğrulanıyor ve doğrulamanın kendisi hedefe ne kadar risk ekliyor.

İlerlemeni kaydetmek ve not almak için Giriş yap

Notlarım

Not almak için giriş yapmalısın.

Aramak için yazmaya başlayın.

↑↓ Esc gezin · aç · kapat