Ders 07 / 20
Araya Girme Saldırıları
Araya girmenin kanıt zinciri eksikliği olarak ölçülmesi: 8 akışın 36 adımında 3 akışın hiç zinciri olmaması ve 16 adımın içeriği okuyabilmesi, kimlik iddiasını üretebilecek taraf sayısının 272 olması, uç doğrulamanın bu sayıyı 509'a çıkarması, kök sabitlemenin 11'e indirmesi ve 89.400 istek taşıyan tek akışın doğrulama yapamadığı için zincirsiz kalması.
İçindekiler
Önceki ders bir iddianın kanıtsız olmasının niceliğini ölçtü: kaç istek, kaç yuva, kaç saniye. Yük düştüğünde ya da savunma yeterli olduğunda hizmet ayakta kalır ve ölçüm biter. Oysa aynı kanıtsız iddia, hiçbir kapasite tüketmeden ve hiçbir sayacı sapıtmadan da kullanılabilir.
Bir bağlantının iki ucu birbirini kanıtla tanımıyorsa, aralarındaki her adım kendini karşı taraf olarak sunabilir ve bağlantı olağan hızında, olağan hacminde sürer. Burada ölçülecek şey bir yük ya da bir sayaç değildir; eksik olan bir kanıttır. Bu ders o eksikliği sayar.
Araya Girme Bir Eksikliktir
PG19: araya girme (man-in-the-middle) bir yetenek değil, bir eksikliktir — iki ucun birbirinin kimlik iddiasını bağladığı kanıt zincirinin (evidence chain) eksik olması. PG20: bir kanıt zincirinin gücü halka sayısı değil, o iddiayı üretebilecek taraf sayısıdır; bu sayı bir ise zincir tektir, büyüdükçe zincir zayıflar. PG21: zincirin halkaları sayılabilir; dayanağı olmayan halka, o halkayı kim yazarsa yazsın kabul edilen halkadır.
PG20 bu dersin ölçüyü halka saymaktan kurtaran maddesidir. Üç halkalı bir zincir, tek halkalı bir zincirden daha güçlü değildir; belirleyici olan, o üç halkanın sonuncusunu kaç ayrı tarafın yazabildiğidir. Aktarımda şifreleme ve sertifika doğrulamanın algoritma tarafı bu kursun konusu değildir ve M24/K04’te ölçülecektir; burada sayılan tek şey iddianın kaç taraftan gelebileceğidir.
Aşağıdaki akış kümesi bir modeldir: kurgu ölçüm ağının akışları, adım sayıları ve zincir türleri veri olarak yazılır; gerçek bir ağ, gerçek bir ad ya da gerçek bir kök listesi yoktur. Kod hiçbir trafiği yakalamaz ya da değiştirmez; koşan tek şey zincir sayımıdır. Bir yolun adımlarını kendi ağının dışında sınamak yazılı yetki ve tanımlı kapsam olmadan hem yasadışı hem meslek dışıdır.
// aglar/zincir.mjs — kurgu bolgesel olcum agindaki akislarin kanit zinciri (model): // gercek bir ag, gercek bir ad ya da gercek bir kok listesi yok. Rastgelelik yok. // PG19: araya girme bir yetenek degil, bir eksikliktir: iki ucun birbirinin kimlik // iddiasini bagladigi kanit zincirinin eksik olmasi. // PG20: bir kanit zincirinin gucu halka sayisi degil, o iddiayi uretebilecek taraf // sayisidir; bu sayi bir ise zincir tektir, buyudukce zincir zayiflar. export const KOK = 84; // uclarin kosulsuz kabul ettigi kok listesindeki kalem sayisi // Sutunlar: akis, yoldaki adim sayisi, zincir turu, gunluk istek, ucu dogrulama // yapabiliyor mu (e/h). export const AKIS = ` saha-terminali>toplayici 6 yok 12400 e sayac-ucu>alim-ucu 4 yok 89400 h sube-gecidi>merkez-gecidi 5 ortak-kok 43200 e yonetim-ucu>sube-gecidi 3 ilk-kullanim 268 e faturalama>dogrulayici 2 ortak-kok 22800 e dogrulayici>olcum-deposu 2 sabit-kok 61300 e saha-terminali>ad-sunucusu 6 yok 34600 e dis-istemci>ortak-arayuz 8 ortak-kok 1150 e` .trim().split(/\s+/).reduce((l, _, i, a) => (i % 5 ? l : [...l, { ad: a[i], adim: +a[i + 1], zincir: a[i + 2], istek: +a[i + 3], yapabilir: a[i + 4] === "e", }]), []); // PG21: zincirin halkalari sayilabilir; dayanagi olmayan halka, o halkayi kim yazarsa // yazsin kabul edilen halkadir. // halka = zincirdeki dogrulama adimi, dayanaksiz = ucun sinayamadigi halka. export const ZINCIR = { "yok": { halka: 0, dayanaksiz: 0, okur: true }, "ilk-kullanim": { halka: 1, dayanaksiz: 1, okur: false }, "ortak-kok": { halka: 3, dayanaksiz: 1, okur: false }, "sabit-kok": { halka: 3, dayanaksiz: 0, okur: false }, }; // Bir akisin kimlik iddiasini kac ayri taraf uretebilir. export function uretebilen(a) { if (a.zincir === "yok") return a.adim; if (a.zincir === "ilk-kullanim") return a.adim; // yalnizca ilk baglantida if (a.zincir === "ortak-kok") return KOK; return 1; } // Savunma: uc dogrulama zincirsiz akislari ortak koke, sabitleme ortak kok akislarini // sabit koke tasir. Ucu dogrulama yapamayan akis oldugu gibi kalir. export function uygula(savunma = []) { return AKIS.map((a) => { let z = a.zincir; if (savunma.includes("uc-dogrulama") && a.yapabilir && z === "yok") z = "ortak-kok"; if (savunma.includes("uc-dogrulama") && a.yapabilir && z === "ilk-kullanim") z = "ortak-kok"; if (savunma.includes("sabitleme") && a.yapabilir && z === "ortak-kok") z = "sabit-kok"; return { ...a, zincir: z }; }); }
// aglar/zincir-denetimi.mjs — kac akista kanit zinciri kopuk, kimlik iddiasini kac taraf // uretebiliyor, uc dogrulama ve kok sabitleme neyi degistiriyor ve bedeli ne. import { AKIS, KOK, ZINCIR, uretebilen, uygula } from "./zincir.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 okuyan = (l) => l.reduce((t, a) => t + (ZINCIR[a.zincir].okur ? a.adim : 0), 0); const uretim = (l) => l.reduce((t, a) => t + uretebilen(a), 0); const KUR = [[], ["uc-dogrulama"], ["sabitleme"], ["uc-dogrulama", "sabitleme"]]; console.log(`${AKIS.length} akis, ${AKIS.reduce((t, a) => t + a.adim, 0)} adim, ` + `kok listesi ${KOK} kalem; zinciri olmayan akis ` + `${AKIS.filter((a) => a.zincir === "yok").length}, okuyabilen adim ${okuyan(AKIS)}, ` + `30 gunluk toplam istek ${AKIS.reduce((t, a) => t + a.istek, 0)}`); const A = [-27, 7, 14, 8, 12, 12, 11]; console.log("\n1. akis basina kanit zinciri"); yaz(A, "akis", "adim", "zincir", "halka", "dayanaksiz", "uretebilen", "30g istek"); for (const a of AKIS) yaz(A, a.ad, a.adim, a.zincir, ZINCIR[a.zincir].halka, ZINCIR[a.zincir].dayanaksiz, uretebilen(a), a.istek); const B = [-26, 10, 12, 12, 12, 13, 19]; console.log("\n2. savunmalar: zincirin durumu"); yaz(B, "savunma", "zincirsiz", "dayanaksiz", "uretebilen", "tek zincir", "okuyan adim", "zincirsiz istek %"); for (const s of KUR) { const l = uygula(s); yaz(B, s.join(" + ") || "hicbiri", l.filter((a) => a.zincir === "yok").length, l.reduce((t, a) => t + ZINCIR[a.zincir].dayanaksiz, 0), uretim(l), l.filter((a) => uretebilen(a) === 1).length, okuyan(l), ((l.filter((a) => a.zincir === "yok").reduce((t, a) => t + a.istek, 0) / AKIS.reduce((t, a) => t + a.istek, 0)) * 100).toFixed(1)); } const C = [-26, 9, 8, 8, 14, 13]; console.log("\n3. ayni savunmalarin bedeli"); yaz(C, "savunma", "kok kalem", "ek tur", "elle", "kesilen akis", "kapsam disi"); for (const s of KUR) { const l = uygula(s), kapsam = AKIS.filter((a) => a.yapabilir); const sabit = l.filter((a) => a.zincir === "sabit-kok" && a.yapabilir).length; yaz(C, s.join(" + ") || "hicbiri", s.includes("uc-dogrulama") ? KOK : 0, s.includes("uc-dogrulama") ? kapsam.length * 2 : 0, s.includes("sabitleme") ? sabit : 0, s.includes("sabitleme") ? sabit : 0, AKIS.length - kapsam.length); } const D = [-27, 14, 12, 12]; console.log("\n4. uc dogrulama ve sabitleme birlikte acikken kalan"); yaz(D, "akis", "zincir", "uretebilen", "30g istek"); for (const a of uygula(["uc-dogrulama", "sabitleme"]).filter((x) => uretebilen(x) > 1)) yaz(D, a.ad, a.zincir, uretebilen(a), a.istek);
8 akis, 36 adim, kok listesi 84 kalem; zinciri olmayan akis 3, okuyabilen adim 16, 30 gunluk toplam istek 265118 1. akis basina kanit zinciri akis adim zincir halka dayanaksiz uretebilen 30g istek saha-terminali>toplayici 6 yok 0 0 6 12400 sayac-ucu>alim-ucu 4 yok 0 0 4 89400 sube-gecidi>merkez-gecidi 5 ortak-kok 3 1 84 43200 yonetim-ucu>sube-gecidi 3 ilk-kullanim 1 1 3 268 faturalama>dogrulayici 2 ortak-kok 3 1 84 22800 dogrulayici>olcum-deposu 2 sabit-kok 3 0 1 61300 saha-terminali>ad-sunucusu 6 yok 0 0 6 34600 dis-istemci>ortak-arayuz 8 ortak-kok 3 1 84 1150 2. savunmalar: zincirin durumu savunma zincirsiz dayanaksiz uretebilen tek zincir okuyan adim zincirsiz istek % hicbiri 3 4 272 1 16 51.4 uc-dogrulama 1 6 509 1 4 33.7 sabitleme 3 1 23 4 16 51.4 uc-dogrulama + sabitleme 1 0 11 7 4 33.7 3. ayni savunmalarin bedeli savunma kok kalem ek tur elle kesilen akis kapsam disi hicbiri 0 0 0 0 1 uc-dogrulama 84 14 0 0 1 sabitleme 0 0 4 4 1 uc-dogrulama + sabitleme 84 14 7 7 1 4. uc dogrulama ve sabitleme birlikte acikken kalan akis zincir uretebilen 30g istek sayac-ucu>alim-ucu yok 4 89400
Sayılar ölçüm sınıfındadır; girdileri PG19–PG21’dir.
Otuz Altı Adım, Üç Zincirsiz Akış
Sekiz akış toplam otuz altı adımdan geçer. Üç akışın hiç kanıt zinciri yoktur ve bu üç akışın on altı adımı içeriği okuyabilir. Kalan beş akışta bir zincir vardır, ama zincirin varlığı tek başına bir sonuç değildir.
Birinci tablo bunu altıncı sütunda gösterir. dogrulayici>olcum-deposu akışının zinciri üç
halkalıdır ve dayanaksız halkası yoktur: kimlik iddiasını üretebilecek taraf sayısı birdir.
faturalama>dogrulayici akışının zinciri de üç halkalıdır, ama bir halkası dayanaksızdır ve
üretebilen taraf sayısı 84’tür. İki akış aynı halka sayısına sahiptir ve aralarında seksen
üç kat fark vardır.
Farkın kaynağı dayanaksız halkadır. Ortak kök düzeninde uç, kök listesindeki her kalemin yazdığı bir ifadeyi kabul eder; o listede kaç kalem varsa iddiayı o kadar taraf üretebilir. Sabit kök düzeninde uç yalnız tek bir kalemin ifadesini kabul eder. Zincirin uzunluğu güveni ölçmez; listenin uzunluğu ölçer.
Zincirsiz akışlarda sayı daha küçüktür ve bu, ilk bakışta ters görünür. saha- terminali>toplayici akışının üretebilen taraf sayısı altıdır — yoldaki altı adım. Ortak kök
düzenindeki bir akışın seksen dördüne göre az. Aradaki fark niteliktedir: zincirsiz akışta o
altı adım yolun üstündedir ve trafiği ayrıca okuyabilir; ortak kök düzenindeki seksen dört
kalem yolun üstünde değildir ve içeriği okuyamaz. Sayılar aynı eksende karşılaştırılamaz; ikisi
de yazılır.
Akış sayısı yerine istek hacmi okunduğunda tablo daha da keskinleşir. Sekiz akış otuz günde
265.118 istek taşır; zinciri hiç olmayan üç akış bunun 136.400’ünü, yani %51,4’ünü
taşır. Zincirin tek halkaya indiği tek akış — dogrulayici>olcum-deposu — 61.300 istekle
toplamın %23,1’ini taşır. Akış sayısına göre üç sekizde bir olan zincirsizlik, hacme göre
yarıdan fazladır. Kanıt zinciri kapsamı akış sayarak değil, o akışların taşıdığı istek
hacmiyle raporlanır.
Dördüncü satırdaki ilk kullanımda güven düzeni ayrı bir kalemdir. Bu akışta iddiayı üretebilecek taraf sayısı yalnız ilk bağlantıda üçtür; ilk bağlantı tamamlandıktan sonra uç gördüğü değeri saklar ve sayı bire iner. Zincirin tamamı tek bir ana bağlıdır ve o an bir daha gelmez. Bu düzenin ölçüsü bir taraf sayısı değil, bir pencere sayısıdır: kaç kez ilk bağlantı kuruluyor. Aygıt değişiminde, yeniden kurulumda ve anahtar yenilemesinde pencere yeniden açılır.
Uç Doğrulamanın Yön Değiştirdiği Yer
İkinci tablo bu dersin en dikkat çekici satırını üretir. Uç doğrulama açıldığında zincirsiz akış sayısı üçten bire iner ve okuyan adım sayısı on altıdan dörde düşer — beklenen iyileşme. Aynı satırda üretebilen taraf toplamı ise 272’den 509’a çıkar. Dayanaksız halka sayısı da dörtten altıya yükselir.
Neden yükseldiği birinci tablodan okunur. Zincirsiz iki akış, yolundaki altı adım tarafından üretilebilen bir iddia taşıyordu; uç doğrulama açıldığında bu akışlar ortak kök düzenine geçer ve iddiayı üretebilecek taraf sayısı altıdan seksen dörde çıkar. Okuma tümüyle kapanır, ama kimlik iddiasını üretebilecek taraf kümesi büyür.
Uç doğrulama, iddiayı yoldaki adımlardan alıp bir kök listesine devreder; kazanç okuma tarafındadır, kayıp ise güven kümesinin büyümesindedir. Bu iki sonucu tek bir “güvenli oldu” cümlesinde toplayan bir değerlendirme, ikinci sütunun yönünü hiç görmez.
Üçüncü satır sabitlemeyi tek başına ölçer: üretebilen toplam 272’den 23’e iner ve tek zincirli akış sayısı birden dörde çıkar. Okuyan adım on altıda kalır, çünkü sabitleme zincirsiz akışlara dokunmaz. Dördüncü satır ikisini birleştirir ve iki eksende de en iyi sonucu verir: dayanaksız halka sıfır, üretebilen toplam 11, tek zincirli akış yedi, okuyan adım dört.
Kalan Akış ve Bedel
Dördüncü tablo geriye kalanı adıyla verir. Sekiz akıştan biri — sayaç uçlarından alım ucuna giden akış — uç doğrulama yapamaz ve zincirsiz kalır. Bu akış otuz günde 89.400 istek taşır; sekiz akışın toplam hacminin en büyük payı. İkinci derste doğrulanamayan yedi kabul noktasını bırakan neden burada da geçerlidir: uçlar kanıt üretemez. Savunma yetmemektedir ve yetmemesinin nedeni yapılandırma değildir.
Üçüncü tablo bedeli yazar. Uç doğrulama seksen dört kalemlik bir kök listesinin sürekli yönetilmesini ve akış başına iki ek tur — kapsamdaki yedi akış için toplam on dört tur — ister. Sabitleme yedi elle kalem getirir ve her kalem, sabitlenen kök değiştiğinde o akışın kesilmesi anlamına gelir: yedi kesilen akış. Kapsam dışı kalan akış sayısı her satırda birdir ve hiçbir savunma onu değiştirmez. Hacim cinsinden bu tek akış, üç savunma da açıkken zincirsiz kalan 265.118 isteğin 89.400’ü — toplamın %33,7’si — demektir; başlangıçtaki %51,4’ten inmiştir ama üçte biri hâlâ kanıtsızdır.
Kök listesi kalemi ile elle sabitleme kalemi ters yönde çalışır. Seksen dört kalemlik liste merkezî olarak yönetilir ve akış sayısından bağımsızdır; yedi sabitleme kalemi akış başınadır ve her yeni akış bir kalem ekler. Küçük bir ağda sabitleme ucuzdur ve güven kümesini bire indirir; akış sayısı büyüdükçe kalem sayısı doğrusal artar ve her kök değişimi bir kesinti üretir. İkinci tablonun son sütunu bu iki bedelin karşılığını tek sayıda toplar: hangi savunma açılırsa açılsın zincirsiz istek payı ya %51,4’te kalır ya %33,7’ye iner, çünkü aradaki fark tümüyle uç doğrulamanın kapsadığı akışlardan gelir ve sabitleme o payı hiç değiştirmez.
Özet
- Araya girme bir kanıt zinciri eksikliğidir: 8 akışın 36 adımında 3 akışın hiç zinciri yoktur ve bu üç akışın 16 adımı içeriği okuyabilir.
- Zincirin gücü halka sayısı değil, iddiayı üretebilecek taraf sayısıdır: aynı 3 halkalı iki akıştan biri 1, öteki 84 tarafça üretilebilir; farkı dayanaksız tek halka yaratır.
- Uç doğrulama okuyan adımı 16’dan 4’e indirir, ama üretebilen taraf toplamını 272’den 509’a çıkarır; iddiayı yoldaki adımlardan alıp 84 kalemlik bir kök listesine devreder.
- Kök sabitleme üretebilen toplamı 23’e, ikisi birlikte 11’e indirir ve dayanaksız halkayı sıfırlar; bedeli 84 kalemlik liste, 14 ek tur ve kök değişiminde kesilen 7 akıştır.
- Uç doğrulama yapamayan tek akış 30 günde 89.400 istek taşır ve hiçbir savunma onu kapsamaz.
Sonraki Adım
Bu ders bir iddianın kimden geldiğini sordu ve yanıtı bir zincirle bağladı. Sabit kök düzeninde iddiayı üretebilecek taraf sayısı bire indi; kimliğin kanıtı tamdır. Yine de tam bir kanıt zinciriyle üretilmiş, doğru kaynaktan gelmiş, hiçbir halkası dayanaksız olmayan bir mesajın bir özelliği hâlâ hiç sorulmadı: ne zaman üretildiği. Aynı mesaj bir kez daha sunulduğunda kimlik kanıtı yine geçerlidir, zincir yine tamdır ve alıcı onu ilk seferkiyle aynı biçimde kabul eder. Sonraki ders bunu tazelik kanıtı cinsinden ölçer: mesaj kümesinin kaçı tekrar edildiğinde kabul ediliyor, sayaç, zaman damgası ve tek kullanımlık değer kaçını yakalıyor, kaçı hâlâ yakalanamıyor ve bunun durum, saat ve depolama bedeli ne oluyor.
İlerlemeni kaydetmek ve not almak için Giriş yap
Notlarım
Not almak için giriş yapmalısın.