Ders 01 / 15
Gizlilik, Bütünlük ve Erişilebilirlik
Üç eksenin aynı varlık üzerinde çakışması: sekiz varlık ve altı kararlık modelde 27 (kalem, eksen) çiftinin yükselirken 22'sinin düşmesi, gizlilik toplamının 34'ten 41'e, bütünlüğün 44'ten 63'e ve erişilebilirliğin 47'den 51'e çıkması, net etkisi sıfır olan bir kararın erişilebilirliği dokuz puan yükseltip gizliliği altı puan düşürmesi, anahtar kaybında erişilebilirlik toplamının 51'den 24'e inip sekiz varlıktan dördünün sıfırlanması ve bu sırada ortalama puanın yalnız 6,5'ten 5,3'e düşmesi.
İçindekiler
Önceki müfredat beş kurs boyunca aynı şeyi ölçtü: bir katman kiralandığında hangi kararın devredildiğini ve karşılığında hangi sayının düzeldiğini. Kiralanan da satın alınan da aynı sessiz varsayımı taşıyordu — o katmana yalnız yetkili olanın eriştiği. Bu ders o varsayımı kaldırır ve yerine üç ayrı soru koyar: veriyi kim görebiliyor, kim değiştirebiliyor, gerektiğinde kim ulaşabiliyor.
Bu üç soru güvenliğin üç eksenidir: gizlilik (confidentiality), bütünlük (integrity) ve erişilebilirlik (availability). Ayrı ayrı ele alındıklarında üçü de itiraz edilemez görünür. Aynı varlığın üstüne birlikte konduklarında ise birbirlerine bastırırlar: bir ekseni yükselten karar çoğu zaman ötekini düşürür. Bu dersin ölçtüğü şey o bastırmadır — kaç kalem hangi eksende kazanıyor, kaçı kaybediyor.
Üç Eksen Aynı Varlığın Üstündedir
Örnek, müfredat boyunca sürecek kurgu bölgesel ölçüm ağıdır: su sayacı okumalarını toplayan bir servis, okumaları doğrulayan bir servis, faturalama ve iş emri servisleri, saha ekipleri ve şube uçları. Ağ da varlıklar da kurgudur; aşağıdaki puanlar bir modeldir, gerçek bir sistemde yapılmış ölçüm değildir.
GK1: varlık envanteri sekiz kalemdir. GK2: her varlık üç eksende 0 ile 10 arasında bir taban puan taşır; puan, o eksenin o kalemde ne kadar sağlandığını gösterir. GK3: her güvenlik kararı belirli kalemlere dokunur ve üç eksende ayrı ayrı bir fark (delta) yazar; puan 0’ın altına inmez, 10’un üstüne çıkmaz. GK4: iki kararın bir kırılma koşulu vardır — koşul gerçekleşirse o kararın dokunduğu kalemlerin erişilebilirliği sıfırlanır. GK5: kararlar listedeki sırayla uygulanır; sınırlama her adımda işler.
// guvenlik/eksen.mjs — kurgu bolgesel olcum aginin varlik envanteri ve uc eksen modeli (model): // gercek bir ag, gercek bir varlik kaydi ya da gercek bir guvenlik olcumu yok. Rastgelelik yok. export const EKSEN = ["giz", "but", "eri"]; export const SINIR = (x) => Math.max(0, Math.min(10, x)); // GK2: her varlik uc eksende 0..10 taban puan tasir; puanlar kurgudur. export const VARLIK = ` okuma-verisi 4 5 6 fatura-kaydi 5 6 5 is-emri-kuyrugu 3 5 7 kimlik-deposu 6 6 5 yapilandirma 4 6 6 denetim-gunlugu 5 4 5 sayac-urun-yazilimi 3 7 6 saha-uygulamasi 4 5 7` .trim().split("\n").map((r) => { const [ad, ...p] = r.trim().split(/\s+/); return { ad, taban: Object.fromEntries(EKSEN.map((e, i) => [e, +p[i]])) }; }); // GK3: her karar bir kalem altkumesine dokunur ve uc eksende delta yazar. // GK4: kirilma kosulu gerceklesirse o kalemlerin erisilebilirligi sifirlanir. export const KARAR = [ { ad: "duragan-sifreleme", d: { giz: 4, but: 0, eri: -1 }, kirilma: "anahtar-kaybi", kalem: ["okuma-verisi", "fatura-kaydi", "kimlik-deposu", "denetim-gunlugu"] }, { ad: "gecelik-yedek", d: { giz: -2, but: 1, eri: 3 }, kirilma: null, kalem: ["okuma-verisi", "fatura-kaydi", "is-emri-kuyrugu", "yapilandirma", "denetim-gunlugu"] }, { ad: "eklemeli-gunluk", d: { giz: 0, but: 4, eri: -1 }, kirilma: null, kalem: ["denetim-gunlugu", "fatura-kaydi"] }, { ad: "cok-etmenli-giris", d: { giz: 3, but: 1, eri: -2 }, kirilma: "etmen-kaybi", kalem: ["kimlik-deposu", "yapilandirma", "saha-uygulamasi"] }, { ad: "imzali-urun-yazilimi", d: { giz: 0, but: 4, eri: -2 }, kirilma: null, kalem: ["sayac-urun-yazilimi", "saha-uygulamasi"] }, { ad: "ikinci-kopya", d: { giz: -2, but: -1, eri: 3 }, kirilma: null, kalem: ["okuma-verisi", "fatura-kaydi", "is-emri-kuyrugu"] }, ]; export function uygula(kirilan = []) { const s = Object.fromEntries(VARLIK.map((v) => [v.ad, { ...v.taban }])); for (const k of KARAR) for (const ad of k.kalem) for (const e of EKSEN) s[ad][e] = SINIR(s[ad][e] + k.d[e]); for (const k of KARAR) if (k.kirilma && kirilan.includes(k.kirilma)) for (const ad of k.kalem) s[ad].eri = 0; return s; } // Bir kararin tek basina kac (kalem, eksen) ciftini yukselttigi ve dusurdugu. export function etki(k) { const yuk = k.kalem.length * EKSEN.filter((e) => k.d[e] > 0).length; const dus = k.kalem.length * EKSEN.filter((e) => k.d[e] < 0).length; return { yuk, dus, net: k.kalem.length * EKSEN.reduce((a, e) => a + k.d[e], 0), enKotu: Math.min(...EKSEN.map((e) => k.d[e])) }; } export const toplam = (s, e) => VARLIK.reduce((a, v) => a + s[v.ad][e], 0);
// guvenlik/olc.mjs — uc eksen ayni varlik uzerinde: kim yukseliyor, kim dusuyor, ne kiriliyor. import { EKSEN, VARLIK, KARAR, uygula, etki, toplam } from "./eksen.mjs"; const yaz = (g, ...s) => console.log(s.map((v, i) => (g[i] < 0 ? String(v).padEnd(-g[i]) : String(v).padStart(g[i]))).join("")); const taban = Object.fromEntries(VARLIK.map((v) => [v.ad, { ...v.taban }])); const son = uygula(); console.log(`${VARLIK.length} varlik x ${EKSEN.length} eksen, ${KARAR.length} karar; ` + `puan araligi 0..10 (giz gizlilik, but butunluk, eri erisilebilirlik)`); const A = [-21, 6, 6, 6, 4, 7, 6, 6]; console.log("\n1. taban puan ve alti karar uygulandiktan sonraki puan"); yaz(A, "varlik", "giz", "but", "eri", "", "giz'", "but'", "eri'"); for (const v of VARLIK) yaz(A, v.ad, ...EKSEN.map((e) => taban[v.ad][e]), "", ...EKSEN.map((e) => son[v.ad][e])); yaz(A, "toplam", ...EKSEN.map((e) => toplam(taban, e)), "", ...EKSEN.map((e) => toplam(son, e))); const B = [-22, 7, 10, 8, 7, 15]; console.log("\n2. karar basina kac (kalem, eksen) cifti yukseliyor, kaci dusuyor"); yaz(B, "karar", "kalem", "yukselen", "dusen", "net", "en kotu eksen"); for (const k of KARAR) { const e = etki(k); yaz(B, k.ad, k.kalem.length, e.yuk, e.dus, (e.net > 0 ? "+" : "") + e.net, EKSEN.find((x) => k.d[x] === e.enKotu) + " " + e.enKotu); } const T = KARAR.map(etki); yaz(B, "TOPLAM", KARAR.reduce((a, k) => a + k.kalem.length, 0), T.reduce((a, e) => a + e.yuk, 0), T.reduce((a, e) => a + e.dus, 0), "+" + T.reduce((a, e) => a + e.net, 0), "-"); const C = [-16, 12, 12, 12, 16]; console.log("\n3. kirilma kosulu gerceklesince (erisilebilirlik sifirlanir)"); yaz(C, "kosul", "giz toplam", "but toplam", "eri toplam", "eri = 0 kalem"); for (const [ad, ks] of [["kirilma yok", []], ["anahtar-kaybi", ["anahtar-kaybi"]], ["etmen-kaybi", ["etmen-kaybi"]], ["ikisi birden", ["anahtar-kaybi", "etmen-kaybi"]]]) { const s = uygula(ks); yaz(C, ad, ...EKSEN.map((e) => toplam(s, e)), VARLIK.filter((v) => s[v.ad].eri === 0).length + "/" + VARLIK.length); } const D = [-21, 10, 11, 8]; console.log("\n4. varlik basina en dusuk eksen (kirilma yok, sonra anahtar kaybi)"); yaz(D, "varlik", "en dusuk", "kirilinca", "eksen"); const kir = uygula(["anahtar-kaybi"]); for (const v of VARLIK) { const a = Math.min(...EKSEN.map((e) => son[v.ad][e])); const b = Math.min(...EKSEN.map((e) => kir[v.ad][e])); yaz(D, v.ad, a, b, EKSEN.find((e) => kir[v.ad][e] === b)); } const ort = (s) => (EKSEN.reduce((a, e) => a + toplam(s, e), 0) / (VARLIK.length * 3)).toFixed(1); yaz(D, "ortalama puan", ort(son), ort(kir), "-");
8 varlik x 3 eksen, 6 karar; puan araligi 0..10 (giz gizlilik, but butunluk, eri erisilebilirlik) 1. taban puan ve alti karar uygulandiktan sonraki puan varlik giz but eri giz' but' eri' okuma-verisi 4 5 6 4 5 10 fatura-kaydi 5 6 5 5 9 9 is-emri-kuyrugu 3 5 7 0 5 10 kimlik-deposu 6 6 5 10 7 2 yapilandirma 4 6 6 5 8 7 denetim-gunlugu 5 4 5 7 9 6 sayac-urun-yazilimi 3 7 6 3 10 4 saha-uygulamasi 4 5 7 7 10 3 toplam 34 44 47 41 63 51 2. karar basina kac (kalem, eksen) cifti yukseliyor, kaci dusuyor karar kalem yukselen dusen net en kotu eksen duragan-sifreleme 4 4 4 +12 eri -1 gecelik-yedek 5 10 5 +10 giz -2 eklemeli-gunluk 2 2 2 +6 eri -1 cok-etmenli-giris 3 6 3 +6 eri -2 imzali-urun-yazilimi 2 2 2 +4 eri -2 ikinci-kopya 3 3 6 0 giz -2 TOPLAM 19 27 22 +38 - 3. kirilma kosulu gerceklesince (erisilebilirlik sifirlanir) kosul giz toplam but toplam eri toplam eri = 0 kalem kirilma yok 41 63 51 0/8 anahtar-kaybi 41 63 24 4/8 etmen-kaybi 41 63 39 3/8 ikisi birden 41 63 14 6/8 4. varlik basina en dusuk eksen (kirilma yok, sonra anahtar kaybi) varlik en dusuk kirilinca eksen okuma-verisi 4 0 eri fatura-kaydi 5 0 eri is-emri-kuyrugu 0 0 giz kimlik-deposu 2 0 eri yapilandirma 5 5 giz denetim-gunlugu 6 0 eri sayac-urun-yazilimi 3 3 giz saha-uygulamasi 3 3 eri ortalama puan 6.5 5.3 -
Sayılar ölçüm sınıfındadır; girdileri GK1–GK5’tir.
Bir Karar İki Yöne Birden Çalışır
İkinci tablo altı kararı tek ölçüye indirir: her karar kaç (kalem, eksen) çiftini yükseltiyor, kaçını düşürüyor. Toplamda 27 çift yükselir, 22 çift düşer. Altı kararın hiçbiri yalnız yükseltmez; en yüksek net değeri olan durağan şifreleme bile dokunduğu dört kalemin erişilebilirliğini birer puan indirir.
Birinci tablonun okuma-verisi satırı bu bastırmanın en açık biçimidir. Gizlilik puanı 4’ten
başlar, şifreleme onu 8’e çıkarır, gecelik yedek 6’ya, ikinci kopya 4’e indirir. Kalem
şifrelenmiştir ve gizlilik puanı tam olarak başladığı yerdedir. Neden açıktır: şifreleme veriyi
bir yerde korurken, yedek ve kopya aynı veriyi iki yerde daha çoğaltır. Aynı satırın
erişilebilirliği 6’dan 10’a çıkar — kazanç gerçektir, ama gizlilik ekseninde ödenmiştir.
is-emri-kuyrugu satırı sınırın işlediği yerdir: gizlilik 3’ten başlar, iki karar ikişer puan
alır ve puan 0’da durur. Bir eksen tabana oturduğunda o eksende ödenecek bir şey kalmaz; sonraki
karar aynı bedeli başka bir kalemden almaya başlar. Ters uç kimlik-deposudur: gizlilik
6’dan 10’a, yani tavana çıkar, karşılığında erişilebilirlik 5’ten 2’ye iner. Tavana dayanmış bir
eksen, o kalem üzerinde daha fazla gizlilik kararı almanın yalnız erişilebilirlik maliyeti
ürettiği anlamına gelir.
Net Sıfır Olan Bir Karar
ikinci-kopya satırı ikinci tablonun en öğretici kalemidir: net değeri tam olarak sıfırdır.
Üç kaleme dokunur, üç çifti yükseltir, altı çifti düşürür. Erişilebilirlikte kalem başına üç
puan kazandırır (toplam +9), gizlilikte ikişer (−6), bütünlükte birer (−3) puan kaybettirir.
Toplamı tek sayıya indiren bir okuma bu kararı “etkisiz” sayar ve gündemden düşürür.
Oysa kararın anlamı toplamında değil, dağılımındadır. Aynı satırda üç ayrı soru vardır: kopya bir arıza durumunda okumaların ulaşılabilir kalmasını sağlar; aynı kopya veriyi bir yerde daha görünür kılar; kopyalar arasında geçici tutarsızlık bütünlüğü zayıflatır. Bu üçü birbirini sadeleştirmez, çünkü farklı olaylarda ödenirler. Net sıfır, üç ayrı riskin birbirini götürdüğü anlamına gelmez; üç ayrı defterin tek satırda toplandığı anlamına gelir.
Aynı ölçü karşılaştırma için de işler. gecelik-yedek on çift yükseltip beş çift düşürür ve net
+10 yazar; duragan-sifreleme dört yükseltip dört düşürür ve net +12 yazar. Çift sayısına
bakıldığında yedek daha geniş, net değere bakıldığında şifreleme daha derindir. İkisi
karşılaştırılabilir değildir; hangi eksende ölçüldüğü söylenmeden bir savunmanın “daha iyi”
olduğu söylenemez.
Her Varlığın Baskın Ekseni Ayrıdır
Birinci tablonun son sütunları üçüncü bir okuma daha verir: aynı kararlar uygulandığında sekiz
varlık üç eksende aynı yere gelmez. sayac-urun-yazilimi bütünlükte 10, erişilebilirlikte
4’tür; is-emri-kuyrugu erişilebilirlikte 10, gizlilikte 0. Bu iki kalem aynı ağın parçasıdır ve
aynı karar kümesinden geçmiştir, ama biri bütünlük, öteki erişilebilirlik yönünde toplanmıştır.
Fark rastlantı değildir, kalemin işlevinden gelir. Sayaç ürün yazılımı sahadaki aygıtta koşar: üstünde yanlış bir sürümün çalışması bütün okumaları bozar, birkaç saat güncellenememesi ise hiçbir okumayı bozmaz. İş emri kuyruğu ters yöndedir: içindeki kaydın kim tarafından görüldüğü düşük bir bedeldir, kuyruğun durması ise saha ekiplerini bekletir. Aynı üç eksen, iki kalemde iki ayrı sıralamaya girer.
Bunun pratik sonucu, tek bir güvenlik hedefinin bütün envanterde geçerli olamayacağıdır. “Gizlilik
önce gelir” kuralı is-emri-kuyrugu için zaten tabana oturmuştur ve orada uygulanacak bir şey
kalmamıştır; aynı kural kimlik-deposunda tavana dayanmış ve yalnız erişilebilirlik maliyeti
üretmeye başlamıştır. Eksen sıralaması varlık başına belirlenir, kurum başına değil — ve bu
ders boyunca sayılan puanlar, o sıralamanın hangi kalemde nereye oturduğunu gösteren tek kayıttır.
Kırılma Bir Ekseni Sıfırlar
Üçüncü tablo kararların kırılma koşullarını çalıştırır. Şifreleme anahtarı kaybolduğunda gizlilik toplamı 41’de kalır — hatta korunmuş sayılır, çünkü veriyi kimse okuyamaz. Aynı anda erişilebilirlik toplamı 51’den 24’e iner ve sekiz varlığın dördü sıfırlanır. Çok etmenli girişin etmen aygıtı kaybolduğunda erişilebilirlik 39’a iner, üç kalem sıfırlanır. İki koşul birlikte gerçekleştiğinde toplam 14’tür ve sekiz kalemin altısına ulaşılamaz.
Bu satırların ortak yanı, gizlilik ve bütünlük sütunlarının hiç değişmemesidir. Kırılan savunma kendi ekseninde bozulmaz; verdiği sözü fazlasıyla tutar. Bedel bütünüyle üçüncü eksene yazılır. Erişilebilirliği bir güvenlik ekseni saymayan bir okuma, bu tabloda hiçbir sorun görmez — çünkü baktığı iki sütun sabittir.
Ortalama Neyi Saklar
Dördüncü tablo aynı durumu varlık başına okur ve tek bir sayının nasıl yanılttığını gösterir. Anahtar kaybında sekiz varlığın dördü en düşük eksende sıfıra iner. Aynı anda ortalama puan yalnız 6,5’ten 5,3’e düşer. Yirmi dört hücreden dördü sıfırlanmıştır ve tek sayıya bakan bir gösterge bunu bir puanlık gerileme olarak yazar.
Nedeni tablodaki dağılımdır: sıfırlanan kalemlerin öteki iki ekseni yüksek kaldığı için ortalamayı
yukarıda tutarlar. okuma-verisi gizlilikte 4, bütünlükte 5, erişilebilirlikte 0’dır; ortalaması
3’tür ve “orta” görünür. Oysa o kaleme ulaşılamıyorsa gizlilik puanının pratik bir karşılığı
yoktur. Üç eksen toplanabilir değildir; en düşük eksen kalemin gerçek durumunu belirler.
Tablodaki iki satır bunun sınırını da gösterir: yapilandirma ve sayac-urun-yazilimi anahtar
kaybından hiç etkilenmez, çünkü şifreleme kararının dokunduğu kalemler arasında değildirler. Bir
kırılmanın kapsamı, kırılan savunmanın dokunduğu kalem kümesidir — daha geniş değil. Bu ders
boyunca sayılan her şey bu kümelerin üzerinde durur ve sonraki dersler aynı kümeye başka adlar
verecektir.
Özet
- Üç eksen aynı varlığın üstünde çakışır: sekiz varlık ve altı kararlık modelde 27 (kalem, eksen) çifti yükselirken 22 çift düşer; altı kararın hiçbiri tek yönlü değildir.
- Şifrelenen
okuma-verisikaleminin gizlilik puanı 4’ten çıkıp 4’e döner, çünkü yedek ve ikinci kopya aynı veriyi çoğaltır; erişilebilirliği ise 6’dan 10’a çıkar. - Net etkisi sıfır olan
ikinci-kopyakararı erişilebilirlikte +9, gizlilikte −6, bütünlükte −3 puan yazar; toplam tek satıra indirildiğinde üç ayrı defter görünmez olur. - Anahtar kaybında gizlilik ve bütünlük toplamları hiç değişmez, erişilebilirlik 51’den 24’e iner ve sekiz varlığın dördü sıfırlanır; iki kırılma birlikte 14 ve altı kalem yazar.
- Aynı sıfırlanma ortalamada yalnız 6,5’ten 5,3’e düşüş olarak görünür; kalemin durumunu ortalama değil en düşük eksen belirler.
- Bir kırılmanın kapsamı, kırılan kararın dokunduğu kalem kümesidir; iki varlık anahtar kaybından hiç etkilenmez.
Sonraki Adım
Bu ders sekiz kalemi puanladı ve altı kararın bu puanları hangi yönde değiştirdiğini saydı. Ancak bütün hesap tek bir listenin üstünde koştu ve o listenin adı belirsiz kaldı: “varlık” denen şey neydi, kararların karşı koyduğu şeyin adı neydi, puanı düşüren şeyin kendisine ne deniyordu. Sonraki ders aynı envanteri üç ayrı listeye böler — varlık, tehdit ve açık — ve bu üçünün çarpımının neden ulaşılabilecek yol sayısını vermediğini gösterir.
İlerlemeni kaydetmek ve not almak için Giriş yap
Notlarım
Not almak için giriş yapmalısın.