Ders 03 / 16
Taşıma Katmanı Güvenliği Sonlandırma
Sonlandırmanın nerede yapıldığının üç seçenekle karşılaştırılması: kenarda, vekilde ve uygulamada sonlandırmanın bıraktığı şifresiz bacak sayısı, sertifikanın bulunduğu yer sayısı, yenilemede dokunulan nokta sayısı ve kenarın kaybettiği iş; protokol sürümü ile şifre takımının kalem kümesi olarak modellenmesi, varsayılanın açık bıraktığı yirmi sekiz kalem ve kısıtlamanın düşürdüğü cihaz ile okuma sayısı.
İçindekiler
Önceki dersin bütün ölçümleri bir şeyi verili aldı: şifreleme bir yerde bitiyor. Kenar vekil şifreyi çözüyor, arkası düz metin taşıyor ve kaybolan bilgi başlıklarla geri veriliyordu. “Kenar vekilde biter” bir varsayım değil, bir karardır ve verilebileceği üç yer vardır.
Bu ders o kararı üç sayıyla ölçer: zincirde kaç bacak şifresiz kalır, sertifika kaç ayrı yerde durur, yenileme sırasında kaç noktaya dokunulur. Üçü aynı yöne gitmez. Şifresiz bacağı sıfıra indiren seçenek öteki iki sayıyı üçe katlar.
Yanıtın içeriğine konan güvenlik başlıklarının hangileri olduğu ve kaçının varsayılan olarak gelmediği daha önce güvenlik başlıkları ve TLS dersinde ölçülmüştü; o ölçüm burada tekrarlanmaz. Burada ölçülen başlığın kendisi değil, şifrenin nerede bittiğidir.
Kurgu bölgesel ölçüm ağının istek yolu dört bileşenden geçer: istemci, kenar vekil, ortamı seçen iç vekil, ölçüm uygulaması. Üç bacak vardır.
- WS13. Bileşen kopya sayıları kurgudur: kenar vekil iki kopya, iç vekil üç, uygulama altı. Sertifikanın “kaç yerde durduğu” sonlandırmayı yapan bileşenin kopya sayısıdır.
- WS14. Yenilemede dokunulan nokta sayısı sertifikanın bulunduğu yer sayısına eşit alınır; yenileme akışının kendi adımları sonraki derste ölçülür.
- WS15. Sürüm adları kurgudur:
s1en eski,s4en yeni. Şifre takımlarıt01–t12diye adlandırılır ve her takım kendi en düşük sürümünden itibaren kullanılabilir. - WS16. Bir kalem, kabul edilen bir (sürüm, takım) ikilisidir. Varsayılan politika hiçbir alt sınır koymaz ve bütün takımları kabul eder.
- WS17. Bir istemci topluluğu, desteklediği en yüksek sürüm politikanın alt sınırından küçükse ya da kabul listesinde kullanabileceği tek bir takım kalmadıysa düşer.
- WS18. Model süre ölçmez; gerçek bir el sıkışma yapılmaz, kalem ve cihaz sayıları listelerden türetilir.
// sonlandirma/nokta.mjs — model: tasima katmani guvenligi sonlandirmasinin uc secenegi. // Zincir kurgu olcum aginin istek yoludur; kopya sayilari kurgudur. Model, sifresiz kalan // bacagi, sertifikanin bulundugu yer sayisini ve yenilemede dokunulan nokta sayisini sayar. const ZINCIR = ["istemci", "kenar", "ic-vekil", "uygulama"]; const KOPYA = { kenar: 2, "ic-vekil": 3, uygulama: 6 }; // her bilesenin ornek sayisi // Kenarin yapabildigi isler: duz metin gerektirenler ve el sikismada gorunen tek is. const YETENEK = [ ["yol tabanli yonlendirme", "duz"], ["kenar onbellegi", "duz"], ["yol basina hiz siniri", "duz"], ["govde boyu denetimi", "duz"], ["ad tabanli yonlendirme", "el-sikisma"], ]; function olc(nokta) { const i = ZINCIR.indexOf(nokta); const bacak = ZINCIR.slice(0, -1).map((_, b) => (b < i ? "sifreli" : "sifresiz")); const duzGoren = ZINCIR.slice(i); // sonlandirmadan sonrasi duz metni gorur const kenarDuz = duzGoren.includes("kenar"); return { sifresizBacak: bacak.filter((x) => x === "sifresiz").length, sertifikaYeri: KOPYA[nokta], yenilemeNoktasi: KOPYA[nokta], duzGoren: duzGoren.length, kenarYetenegi: YETENEK.filter(([, k]) => k === "el-sikisma" || kenarDuz).length, }; } const E = [12, 16, 16, 18, 17, 15]; const yaz = (h) => h.map((d, i) => String(d)[i ? "padStart" : "padEnd"](E[i])).join(""); console.log(yaz(["sonlandirma", "sifresiz bacak", "sertifika yeri", "yenileme noktasi", "duz metni goren", "kenar yetenegi"])); for (const n of ["kenar", "ic-vekil", "uygulama"]) { const o = olc(n); console.log(yaz([n, o.sifresizBacak, o.sertifikaYeri, o.yenilemeNoktasi, o.duzGoren, `${o.kenarYetenegi}/${YETENEK.length}`])); } // --- Protokol ve sifre takimi: kalem kumesi --------------------------------- // Surum adlari kurgudur; s1 en eski, s4 en yeni. Bir takim ancak kendi en dusuk // suruminden itibaren kullanilabilir. const TAKIM = [ ["t01", 1, false], ["t02", 1, false], ["t03", 2, false], ["t04", 2, false], ["t05", 2, false], ["t06", 3, true], ["t07", 3, true], ["t08", 3, false], ["t09", 3, true], ["t10", 4, true], ["t11", 4, true], ["t12", 4, true], ]; // Kurgu istemci toplulugu: [ad, cihaz sayisi, destekledigi en yuksek surum, gunluk okuma] const ISTEMCI = [ ["saha-el-terminali-eski", 40, 1, 1200], ["faturalama-istemcisi", 25, 2, 400], ["saha-el-terminali-yeni", 180, 3, 5400], ["is-emri-uygulamasi", 95, 3, 950], ["toplayici", 60, 4, 28800], ["tarayici-panosu", 300, 4, 900], ]; function politika(altSurum, yalnizGuclu) { const kabulTakim = TAKIM.filter(([, , g]) => (yalnizGuclu ? g : true)); const kalem = []; for (let s = altSurum; s <= 4; s += 1) for (const [ad, en, guclu] of kabulTakim) if (en <= s) kalem.push([s, ad, guclu]); const baglanan = ISTEMCI.filter(([, , enUst]) => enUst >= altSurum && kabulTakim.some(([, en]) => en <= enUst)); const dusen = ISTEMCI.filter((x) => baglanan.includes(x) === false); return { kalem: kalem.length, zayif: kalem.filter((k) => k[2] === false).length, cihaz: baglanan.reduce((t, x) => t + x[1], 0), dusenCihaz: dusen.reduce((t, x) => t + x[1], 0), dusenOkuma: dusen.reduce((t, x) => t + x[3], 0), dusenAd: dusen.map((x) => x[0]), }; } const P = [10, 15, 14, 13, 18, 15, 16]; const yaz2 = (h) => h.map((d, i) => String(d)[i ? "padStart" : "padEnd"](P[i])).join(""); console.log("\n" + yaz2(["alt surum", "takim listesi", "kabul kalem", "zayif kalem", "baglanan cihaz", "dusen cihaz", "dusen okuma/gun"])); for (const [alt, guclu] of [[1, false], [2, false], [3, false], [3, true], [4, true]]) { const r = politika(alt, guclu); console.log(yaz2([`s${alt}`, guclu ? "yalniz guclu" : "tumu", r.kalem, r.zayif, r.cihaz, r.dusenCihaz, r.dusenOkuma]) + (r.dusenAd.length ? ` ${r.dusenAd.join(", ")}` : "")); }
sonlandirma sifresiz bacak sertifika yeri yenileme noktasi duz metni goren kenar yetenegi kenar 2 2 2 3 5/5 ic-vekil 1 3 3 2 1/5 uygulama 0 6 6 1 1/5 alt surum takim listesi kabul kalem zayif kalem baglanan cihaz dusen cihaz dusen okuma/gun s1 tumu 28 19 700 0 0 s2 tumu 26 17 660 40 1200 saha-el-terminali-eski s3 tumu 21 12 635 65 1600 saha-el-terminali-eski, faturalama-istemcisi s3 yalniz guclu 9 0 635 65 1600 saha-el-terminali-eski, faturalama-istemcisi s4 yalniz guclu 6 0 360 340 7950 saha-el-terminali-eski, faturalama-istemcisi, saha-el-terminali-yeni, is-emri-uygulamasi
Üç Seçenek, Üç Sayı
Birinci tablo üç seçeneği yan yana koyuyor ve hiçbir satır ötekinden her sütunda iyi değil.
Kenarda sonlandırma en yaygın düzendir ve en az bakım isteyendir: sertifika iki yerde durur, yenilemede iki noktaya dokunulur. Bedeli iki şifresiz bacaktır. Kenar vekilden uygulamaya kadar olan yolda sayaç okumaları, abone kimlikleri ve fatura tutarları düz metin taşınır. Bu yol “iç ağ” diye adlandırılır ve iç ağın güvenilir sayılması bir ölçüm değil, bir alışkanlıktır. Düz metni görebilen bileşen sayısı üçtür.
Vekilde sonlandırma kenar vekili bir taşıyıcıya indirger: şifreli bağlantı kenardan olduğu gibi geçer ve iç vekilde biter. Şifresiz bacak bire iner, düz metni gören bileşen sayısı ikiye iner. Karşılığında sertifika üç yerde durmaya başlar ve yenileme üç noktaya dokunur.
Uygulamada sonlandırma şifresiz bacağı sıfıra indirir. Düz metni yalnız uygulama görür. Sertifika altı yerde durur ve yenileme altı noktaya dokunur. Sayı üç kat büyümüştür ve büyüyen şey bir güvenlik ayarı değil, bir bakım yüzeyidir: altı yere dağıtılan bir anahtar altı ayrı kopya, altı ayrı dosya izni, altı ayrı yenileme başarısızlığı olasılığıdır.
Üç satır tek bir eğilimi gösteriyor: şifresiz bacak azaldıkça anahtarın bulunduğu yer sayısı artıyor. Sıfır şifresiz bacak, sıfır risk anlamına gelmez; riski taşıma yolundan anahtar dağıtımına taşır.
İki sayının aynı yönde gitmemesinin nedeni yapısaldır. Bir bacağı şifrelemek, o bacağın alıcı ucundaki bileşenin şifreyi çözebilmesini gerektirir; çözebilmek için anahtarı bulundurmak gerekir. Şifreleme zincirde ne kadar derine inerse anahtar o kadar çok kopyaya iner. Zincirin sonuna doğru bileşen sayısı da artar — kenar iki, iç vekil üç, uygulama altı kopyadır — ve bu artış tesadüf değildir: ölçeklenen katman uygulamadır, kenar değil.
Kenarın Kaybettiği İş
Son sütun kararın öteki bedelini gösteriyor. Kenar vekil beş iş yapar ve dördü isteğin içeriğini okumayı gerektirir: yola göre yönlendirme, kenar önbelleği, yol başına hız sınırı, gövde boyu denetimi. Beşincisi el sıkışmada görünen sunucu adına dayanır ve şifre çözülmeden de yapılabilir.
Kenarda sonlandırıldığında beş işin beşi de yapılabilir. Sonlandırma kenardan uzaklaştığında
dört iş birden düşer ve ikinci ile üçüncü satır bu sütunda aynı değeri verir: 1/5.
Bu, kursun “yanlış kapatma” sütunudur ve buradaki yanlış kapatma büyüktür. Şifresiz bacağı kapatan adım, kenar önbelleğini kapatır — bir sonraki dersin ölçtüğü bütün kenar isabeti sıfıra iner. Yol başına hız sınırını kapatır — kötüye kullanan bir istemci artık ancak uygulamada durdurulabilir ve o noktaya varmak için bütün zinciri kat etmiştir. Gövde boyu denetimini kapatır — büyük bir gövde altı uygulama kopyasından birine kadar taşınır.
Üç seçenek arasında karar verirken sorulacak soru “hangisi daha güvenli” değildir; sayılar bu soruya tek bir yanıt vermez. Soru şudur: iki şifresiz bacağı kabul edip kenarda dört iş yapmak mı, yoksa bacağı kapatıp o dört işi uygulamanın içine taşımak mı. İkinci yol seçildiğinde uygulama kendi hız sınırını, kendi gövde denetimini ve kendi önbelleğini taşımak zorundadır ve bu, kapatmanın getirdiği yeni yüzeydir.
Kapatmanın Getirdiği Yüzey
Şifresiz bacağı kapatmak yeni kalemler doğurur ve bunlar tabloda görünmez.
Sertifika iki yerde dururken bir yenileme ya iki kopyaya da uygulanmıştır ya da hiçbirine. Altı yerde dururken kısmi durum mümkündür: dört kopya yenilenmiş, ikisi eski anahtarla duruyor olabilir. Bu ara durum bir arıza vermez — istekler dağıtılırken hangi kopyaya düştüklerine göre farklı sertifikayla karşılanır ve dışarıdan bakan bir istemci bunu ancak süresi dolan kopyaya düştüğünde görür. Yenileme noktası sayısı arttıkça arızanın görünme olasılığı artmaz, bulunma süresi uzar.
İkinci yeni kalem anahtarın dağıtımıdır. İki kopyaya elle konabilen bir dosya, altı kopyaya konmak için bir dağıtım yolu ister ve o yol yeni bir yetkidir: bir bileşen anahtarı okuyup altı yere yazabiliyor olmalıdır. Anahtarın altı yerde durması bir kalem değil, yedi kalemdir — altı kopya ve onları yazan tek yol.
Üçüncüsü sertifika ile uygulama sürümünün birbirine bağlanmasıdır. Sonlandırma uygulamadayken sertifika yenilemesi uygulamanın yeniden yüklenmesini gerektirir; iki ayrı takvim — yayın takvimi ve yenileme takvimi — aynı sürece dokunur.
Kalem Kümesi Olarak Protokol
İkinci tablo başka bir varsayılanı ölçüyor. Sonlandırma noktasına karar verildikten sonra sonlandıran bileşen hangi el sıkışmaları kabul edeceğine karar verir ve bu kararı çoğu kurulumda kimse vermez.
Varsayılan satır ilk satırdır: alt sınır yok, bütün takımlar kabul. Yirmi sekiz kalem açık ve bunların on dokuzu zayıf. Yedi yüz cihazın hepsi bağlanabiliyor, hiçbir okuma düşmüyor. Varsayılanın çekiciliği tam olarak budur: sıfır kırılma. Kimse şikâyet etmez ve on dokuz zayıf kalem, kimsenin şikâyet etmediği için kimsenin bakmadığı bir listede durur.
Alt sınırı s2 yapmak kalem sayısını yirmi altıya indiriyor: iki kalem kapandı. Bedeli kırk
eski el terminali ve günde bin iki yüz okuma. s3 alt sınırı yirmi bir kaleme iniyor, altmış
beş cihaz düşüyor, günde bin altı yüz okuma kesiliyor — ve hâlâ on iki zayıf kalem açık.
Bu, sürüm alt sınırının yalnız başına yetmemesinin ölçüsüdür. Alt sınır bir kalemi sürümüne
bakarak kapatır; zayıf bir takım, yeni bir sürümün altında da kabul edilmeye devam eder. Sekiz
numaralı takım s3’ten itibaren kullanılabilir ve zayıftır; sürüm alt sınırı onu hiçbir zaman
kapatmaz.
Bedavaya Kapanan On İki Kalem
Dördüncü satır ölçümün en keskin sonucudur. Alt sınır s3’te sabit tutuluyor, yalnız takım
listesi güçlülerle sınırlanıyor.
Kabul edilen kalem sayısı yirmi birden dokuza iniyor, zayıf kalem sayısı on ikiden sıfıra iniyor ve düşen cihaz sayısı hiç değişmiyor: altmış beş. Düşen okuma sayısı da aynı kalıyor. On iki kalem, ek bir kırılma olmadan kapandı.
İki lever arasındaki fark budur. Sürüm alt sınırı pahalıdır: her basamak bir istemci topluluğunu düşürür. Takım listesi ucuzdur: zayıf takımları çıkarmak, aynı sürümü konuşan istemcilerin kullanabileceği güçlü takımlar kaldığı sürece kimseyi düşürmez. Sertleştirme sırası bunu izlemelidir — önce takım listesi, sonra sürüm alt sınırı.
Sıranın tersine çevrilmesi ölçülebilir bir zarar verir. Önce alt sınırı yükselten bir ekip altmış beş cihazı düşürür, telefonlar çalar, adım geri alınır ve zayıf takımlar da açık kalır — kırılma yaşandı, kalem kapanmadı. Aynı ekip önce takım listesini daraltsaydı on iki kalemi sıfır kırılmayla kapatmış, ardından alt sınır tartışmasını bu on iki kalem olmadan yapıyor olurdu.
Beşinci satır sınırın nerede durduğunu gösteriyor. Alt sınır s4’e çıkarıldığında kalem altıya
iniyor ama üç yüz kırk cihaz düşüyor ve günde yedi bin dokuz yüz elli okuma kesiliyor. Dokuz
kalemden altı kaleme inmek için ödenen bedel, sistemin yarısını kaybetmektir. Dördüncü satır on iki
kalemi sıfır ek cihazla kapatmıştı; beşinci satır üç kalemi iki yüz yetmiş beş ek cihazla
kapatıyor. Aynı tablodaki iki adım arasındaki bu fark, kalem sayısını tek başına bir hedef
saymanın neden yanıltıcı olduğunu gösterir.
Kapatılamayan kalem burada adıyla görünür: kırk eski el terminali. Bu cihazlar s1’in
üstünü konuşamıyor ve değiştirilene kadar alt sınır s1’in üstüne çıkamıyor. Tek çıkış yol,
onlar için ayrı bir dinleyici açmaktır — eski sürümü yalnız o dinleyicide kabul etmek. Bu bir
çözüm değil, bir taşımadır: yüzey kalemi kapanmaz, adres değiştirir ve önceki derste sayılan
dinlenen kapı listesine bir kalem daha eklenir.
Özet
- Sonlandırma kenardan uygulamaya doğru taşındıkça şifresiz bacak sayısı ikiden sıfıra indi, buna karşılık sertifikanın bulunduğu yer ve yenilemede dokunulan nokta sayısı ikiden altıya çıktı.
- Düz metni görebilen bileşen sayısı üçten bire indi; sıfır şifresiz bacak riski taşıma yolundan anahtar dağıtımına taşıdı.
- Sonlandırma kenardan uzaklaştığında kenar vekilin beş işinden dördü düştü: yol tabanlı yönlendirme, kenar önbelleği, yol başına hız sınırı ve gövde boyu denetimi.
- Varsayılan politika yirmi sekiz kalem kabul etti ve on dokuzu zayıftı; hiçbir cihaz düşmediği için varsayılan hiç sorgulanmadı.
- Sürüm alt sınırını
s3yapmak yedi kalem kapattı, altmış beş cihaz düşürdü ve on iki zayıf kalem bıraktı; takım listesini güçlülerle sınırlamak kalan on iki zayıf kalemin hepsini ek cihaz kaybı olmadan kapattı. - Kırk eski el terminali alt sınırın
s1’in üstüne çıkmasını engelledi; onlar için ayrı bir dinleyici açmak kalemi kapatmaz, dinlenen kapı listesine bir kalem ekler.
Sonraki Adım
Bu ders sertifikanın kaç yerde durduğunu saydı ve yenilemede dokunulan nokta sayısını o sayıya eşit aldı. Yenilemenin kendisi bir kutu olarak kaldı: bir gün olur, biter, sertifika tazelenir.
O kutunun içi bir durum makinesidir ve iki ayarı vardır: sertifikanın ömrü ve yenilemeye kaç gün
kala başlanacağı. Eşik erken konursa gereksiz yenileme koşar; geç konursa süre dolmadan yenileme
bitmeyebilir ve arada kaç saatlik bir açık pencere kaldığı sorusu doğar. Yenileme akışının
ortasında bir doğrulama adımı vardır ve o adım başarısız olabilir; kaç deneme yapıldığı, hangi
denemede sertifikanın süresinin dolduğu ve uyarının ne zaman gelmesi gerektiği ayrı sayılardır.
Sonraki ders yenileme akışını node ile bir durum makinesi olarak yazar, ömür ile eşiği tarar,
doğrulama başarısızlığını modelleyip açık pencereyi saatle ölçer ve elle yenilemenin bir dönemde
kaç kalemde unutulduğunu sayar.
İlerlemeni kaydetmek ve not almak için Giriş yap
Notlarım
Not almak için giriş yapmalısın.