Ders 10 / 16
Sertifika Yaşam Döngüsü
İptalin bir tur borcu olması: sormamanın kaç alışverişe mal olduğu, sormanın alışveriş başına eklediği tur, arada duran seçeneklerin bilme gecikmesi ve yanlış yapılandırmanın istemcide görülen belirtileri.
İçindekiler
Önceki ders taşıma zarfını kapattı ve aracının kaybettiğini saydı. Kapanan zarfın altında bir kabul vardı: istemci sunucunun zincirini doğrulamış, kurulumu o kabulün üzerine oturtmuştu. O doğrulama, yapıldığı anda geçerliydi.
Sertifikanın bir başlangıcı ve bir bitişi vardır; ikisinin arasında iptal edilebilir. İptal belgenin içine yazılamaz, çünkü belge imzalandığı anda donar — sonradan yazılan her şey imzayı düşürür. Bu dersin sorusu buradan çıkar: belgenin içine yazılamayan bir şey nasıl bilinir ve bilinmesi kaça mal olur? Zincir doğrulaması sormadan yürüyordu; iptal sorulmadan bilinemez. Aradaki fark bir tur borcudur.
Belgenin Ömrü ve İptalin Yeri
Ömür, sertifikanın geçerlilik alanındaki iki damganın arasıdır ve bu iki damga belgenin içindedir, imzanın altındadır. Bu yüzden geçerlilik denetimi yereldir: istemci kendi saatine bakar, kimseye sormaz.
Yenileme (renewal) ömür bitmeden yeni bir belge çıkarmaktır. Eski belgeyi uzatmaz; uzatamaz, çünkü uzatmak imzalanmış bir alanı değiştirmek olurdu. Yeni belge üretilir, eski belge kendi bitişine kadar geçerli kalır ve ikisi bir süre birlikte yaşar. Anahtar değişmişse eski belge yeni anahtar hakkında hiçbir şey söylemez.
İptal (revocation) ömür dolmadan bağın geçersiz sayılmasıdır. Nedenleri belgenin dışındadır: gizli anahtarın elden çıkması, adın el değiştirmesi, bağın baştan yanlış kurulmuş olması. Hiçbiri belgeye sonradan yazılamayacağı için veren tarafın ayrı bir kayıt yayımlaması gerekir.
yaşam döngüsü
istek -> imzalama -> dağıtım -> kullanım -> yenileme -> ... -> sona erme
|
+-- iptal: her an, belgenin dışından
ömrü taşıyan alanlar
seri no : veren içinde belgeyi tekil olarak adlandırır
geçerlilik : başlangıç .. bitiş <- ömür bu aralıktır
veren : ara-1.ornek <- iptali yayımlayacak taraf
iptal kaydı
liste veren : ara-1.ornek
yayım anı : bu listenin üretildiği an
sonraki yayım : listenin tazeleneceği an <- bilme gecikmesinin üst sınırı
girdiler : seri no | iptal anı | neden
Bu döküm çalıştırılmaz; alanların ne bildirdiğini gösterir. Kayıt belgeyi seri numarasıyla adlandırır ve belgeyi değiştirmez — ona dışarıdan bir not düşer. Asimetri buradadır: geçerlilik belgenin içinden okunur, iptal belgenin dışından. Birincisi tur istemez, ikincisi ister.
Ölçümün Kurgusu
Kurgu kursun geri kalanıyla aynıdır: Kuzey Yamaç ölçüm istasyonu bir istemciye ölçüm sunar ve istemci her alışverişte sunulan sertifikanın hâlâ geçerli olup olmadığına karar verir.
- GT1. Ölçüm penceresi 960 saattir ve içinde kırk alışveriş yapılır; alışveriş anları pencere içinde üreteçten alınır.
- GT2. İptal anı pencerenin her saatinde ayrı denenir: 960 an süpürülür, her an için kırk alışveriş değerlendirilir.
- GT3. Kâhin — kararın gerçeği — kurguyu biz ürettiğimiz için bilinir: iptal anından sonraki her alışverişte sertifika geçersizdir.
- GT4. İstemcinin iptali öğrendiği ana kadar geçen süre bilme gecikmesidir; bu süre içine düşen her alışveriş bir yanlış kabuldür.
- GT5. İptal listesinin tazeleme aralığı 24, sunulan yanıtın tazeliği 6, kısa ömürlü sertifikanın ömrü 12, uzun ömürlünün ömrü 2160 saattir; dördü de ders içinde seçilmiş model değerleridir ve ders bir sürüm iddiası taşımaz.
- GT6. Zincir üç halkadır — yaprak ve iki ara sertifika; güven çıpası sorulmaz.
- GT7. Tur yalnız istemcinin ödediği gidiş–dönüştür; sunucunun ya da kayıt yayımlayan tarafın kendi turu bu sütuna girmez.
- GT8. Hiçbir bağlantı açılmaz, hiçbir sertifika çözümlenmez; dökümler kurgudur.
Tek bir iptal anında küme kırk karardır, çözünürlüğü 1/40 = 0,025’tir; ortalama sütunları 960 anın tamamından, yani 38.400 karardan alınmıştır.
Sormamanın ve Sormanın Maliyeti
TOHUM = 20260809 PENCERE = 960 # saat: kırk günlük ölçüm penceresi OMUR = 2160 # saat: uzun ömürlü sertifikanın modellenen ömrü HALKA = 3 # yaprak + iki ara sertifika; çıpa sorulmaz def uretec(tohum: int): d = tohum % 2147483646 + 1 def r(n: int) -> int: nonlocal d d = (d * 48271) % 2147483647 return d % n return r uret = uretec(TOHUM) ZAMANLAR = sorted(uret(959) for _ in range(40)) REJIMLER = ( # ad, alışveriş başına tur, tazeleme aralığı (saat), istemci kendi çeker mi ("sormamak", 0, None, False), ("her alışverişte sormak", 1, 0, True), ("önceden dağıtılmış iptal listesi", 0, 24, True), ("sertifikayla sunulan yanıt", 0, 6, False), ("kısa ömürlü sertifika", 0, 12, False), ) def bilme_ani(iptal: int, aralik) -> int: if aralik is None: return OMUR if aralik == 0: return iptal return iptal + aralik - iptal % aralik def olc(aralik) -> tuple[float, int, float, int]: gecikme_top = yanlis_top = gecikme_kotu = yanlis_kotu = 0 for iptal in range(PENCERE): bilme = bilme_ani(iptal, aralik) yanlis = sum(1 for t in ZAMANLAR if iptal <= t < bilme) gecikme_top, yanlis_top = gecikme_top + bilme - iptal, yanlis_top + yanlis gecikme_kotu = max(gecikme_kotu, bilme - iptal) yanlis_kotu = max(yanlis_kotu, yanlis) return gecikme_top / PENCERE, gecikme_kotu, yanlis_top / PENCERE, yanlis_kotu def istemci_turu(basina: int, aralik, ceker: bool, sayi: int, halka: int) -> int: tur = basina * sayi * halka return tur + (PENCERE // aralik * halka if ceker and aralik else 0) print(f"{'rejim':<33s}{'tur/alışveriş':>14s}{'istemci turu':>13s}" f"{'bilme gecikmesi':>18s}{'yanlış kabul':>14s}") for ad, basina, aralik, ceker in REJIMLER: og, kg, oy, ky = olc(aralik) print(f"{ad:<33s}{basina:14d}" f"{istemci_turu(basina, aralik, ceker, len(ZAMANLAR), HALKA):13d}" f"{f'{og:.1f} / {kg}':>18s}{f'{oy:.2f} / {ky}':>14s}") print() print(f"{'halka':>6s}{'her alışverişte sorma':>23s}{'iptal listesi':>15s}" f"{'sunulan yanıt':>15s}") for h in range(1, 6): satir = [istemci_turu(b, a, c, len(ZAMANLAR), h) for _, b, a, c in REJIMLER[1:4]] print(f"{h:6d}{satir[0]:23d}{satir[1]:15d}{satir[2]:15d}") print() print(f"{'alışveriş':>10s}{'her alışverişte sorma':>23s}{'iptal listesi':>15s}") for n in (40, 120, 400, 4000): satir = [istemci_turu(b, a, c, n, HALKA) for _, b, a, c in REJIMLER[1:3]] print(f"{n:10d}{satir[0]:23d}{satir[1]:15d}") print() print(f"alışveriş {len(ZAMANLAR)}, iptal anı {PENCERE}, " f"karar {len(ZAMANLAR) * PENCERE}")
rejim tur/alışveriş istemci turu bilme gecikmesi yanlış kabul
sormamak 0 0 1680.5 / 2160 22.02 / 40
her alışverişte sormak 1 120 0.0 / 0 0.00 / 0
önceden dağıtılmış iptal listesi 0 120 12.5 / 24 0.57 / 4
sertifikayla sunulan yanıt 0 0 3.5 / 6 0.15 / 2
kısa ömürlü sertifika 0 0 6.5 / 12 0.31 / 3
halka her alışverişte sorma iptal listesi sunulan yanıt
1 40 40 0
2 80 80 0
3 120 120 0
4 160 160 0
5 200 200 0
alışveriş her alışverişte sorma iptal listesi
40 120 120
120 360 120
400 1200 120
4000 12000 120
alışveriş 40, iptal anı 960, karar 38400
İlk tablonun ilk iki satırı dersin iki ucudur. Hiç sormayan istemci sıfır tur harcar ve iptal edilmiş bir sertifikayı ortalama 22,02 alışveriş boyunca geçerli sayar; en kötü durumda kırkında da. Nedeni ince değildir: sormayan istemcinin tek bilgi kaynağı belgenin kendi bitişidir, o bitiş de pencereden uzaktadır.
Her alışverişte soran istemci yanlış kabulü sıfıra indirir. Ödediği 120 tur iki çarpandan gelir: kırk alışveriş çarpı üç halka. Alışveriş başına tur 1 görünür, ama gerçekte halka sayısı kadar soru sorulur, çünkü zincirin her halkası ayrı ayrı iptal edilebilir.
İkinci tablo bu çarpanı açar ve kursun eksenindeki ayrımı keskinleştirir. Sertifikalar ve Güven Zinciri dersinde zincir doğrulamasının turu zincir uzunluğundan bağımsızdı; iptal sorusunun turu ona doğru orantılıdır: bir halkada 40, beş halkada 200. Belgenin içi zincirle birlikte gelir; dışı gelmez ve her halka için ayrıca sorulur.
Üçüncü tablo bölenin ne olduğunu gösteriyor. Sorma turu alışveriş sayısıyla doğrusal büyür — kırk alışverişte 120, dört binde 12.000 — ama önceden dağıtılmış listenin turu sabit kalır: 120. Liste pencere başına ödenir, soru alışveriş başına. Kırk alışverişlik satırda ikisinin eşit çıkması rastlantıdır; ayrım toplamda değil, turun nereye yazıldığındadır.
Aradaki Seçenekler
Tablonun son üç satırı iki ucun arasını doldurur ve üçünün ortak özelliği şudur: alışveriş başına tur sıfırdır. Hiçbiri alışverişin yoluna gidiş–dönüş eklemez; ayrıştıkları yer bilme gecikmesidir.
Önceden dağıtılmış iptal listesi günde bir tazelenir; gecikme ortalama 12,5 saat, en kötü 24 saattir ve ortalama 0,57 alışveriş yanlış kabul edilir. Sertifikayla sunulan yanıt, verenden alınmış geçerlilik yanıtının kurulumda sertifikayla birlikte gönderilmesidir; istemcinin turu sıfırdır, çünkü yanıt zaten gelen bir iletinin içindedir. Gecikme 3,5 saate, yanlış kabul 0,15’e iner. Kısa ömürlü sertifika ise iptal düzeneğini bütünüyle atar: belge o kadar kısa yaşar ki iptal edilmesine gerek kalmaz, gecikme kalan ömürdür — ortalama 6,5 saat, yanlış kabul 0,31.
Üç satır yan yana okunduğunda bir düzen çıkıyor. Gecikme 3,5 iken yanlış kabul 0,15; gecikme 6,5 iken 0,31; gecikme 12,5 iken 0,57. Yanlış kabul, gecikmeyle birlikte ve kabaca onunla orantılı büyüyor. Yani düzeneklerin adları farklı olsa da ölçülen şey tek bir sayıdır: mekanizma seçimi bir gecikme seçimidir.
İptal sorusunun kendisi de sayılması gereken bir yüzeydir: soru, hangi belgeye bakıldığını yanıtlayan tarafa bildirir ve her alışverişte sorulursa bildirim alışveriş sıklığını da taşır. Daraltma: yanıt sertifikayla birlikte sunulduğunda istemci soruyu hiç sormaz, dolayısıyla bakılan belgeyi bildiren de olmaz; önceden dağıtılmış liste ise tek tek belgeleri değil listenin tamamını taşıdığı için hangi belgeye bakıldığını bildirmez. Sormamanın yüzeyi tablonun ilk satırındadır — ortalama 22,02 alışveriş. Daraltma: bu pencereyi daraltan tek şey belgenin ömrüdür.
Ömür Kısaldıkça
TOHUM = 20260809 PENCERE = 960 # saat: kırk günlük ölçüm penceresi OMURLER = (2160, 720, 168, 72, 24, 12, 6) # saat def uretec(tohum: int): d = tohum % 2147483646 + 1 def r(n: int) -> int: nonlocal d d = (d * 48271) % 2147483647 return d % n return r uret = uretec(TOHUM) ZAMANLAR = sorted(uret(959) for _ in range(40)) def olc(omur: int) -> tuple[float, float, int]: gecikme_top = yanlis_top = yanlis_kotu = 0 for iptal in range(PENCERE): bilme = iptal + omur - iptal % omur yanlis = sum(1 for t in ZAMANLAR if iptal <= t < bilme) gecikme_top, yanlis_top = gecikme_top + bilme - iptal, yanlis_top + yanlis yanlis_kotu = max(yanlis_kotu, yanlis) return gecikme_top / PENCERE, yanlis_top / PENCERE, yanlis_kotu print(f"{'ömür (saat)':>12s}{'yenileme':>10s}{'ort gecikme':>13s}" f"{'yanlış kabul':>14s}{'yenileme x ömür':>17s}") for omur in OMURLER: og, oy, ky = olc(omur) yenileme = PENCERE // omur print(f"{omur:12d}{yenileme:10d}{og:13.1f}{f'{oy:.2f} / {ky}':>14s}" f"{yenileme * omur:17d}")
ömür (saat) yenileme ort gecikme yanlış kabul yenileme x ömür
2160 0 1680.5 22.02 / 40 0
720 1 420.5 13.02 / 28 720
168 5 87.5 3.82 / 8 840
72 13 37.1 1.32 / 4 936
24 40 12.5 0.57 / 4 960
12 80 6.5 0.31 / 3 960
6 160 3.5 0.15 / 2 960
Bu tabloda iptal düzeneği yoktur; istemci bir şeyin geçersizleştiğini yalnız belge sona erdiğinde öğrenir. İki sütun ters yönde yürüyor. Ömür 2160 saatken pencere içinde hiç yenileme yapılmaz, gecikme ortalama 1680,5 saattir ve 22,02 alışveriş yanlış kabul edilir. Ömür 6 saate indiğinde gecikme 3,5 saate, yanlış kabul 0,15’e düşer — ama pencere içinde 160 yenileme yapılması gerekir.
Son sütun toplam işin korunduğunu gösteriyor: ömür pencereden kısa olduğu her satırda yenileme sayısı çarpı ömür pencereye eşitlenir. Kazanılan gecikme, ödenen yenileme sayısıyla ters orantılıdır. Kırk günde 160 yenileme, ortalama altı saatte bir yenileme demektir; bu elle yapılabilecek bir iş değildir. Kısa ömür bir otomasyon koşuludur ve koşul sağlanmazsa kazanç maliyete dönüşür.
Bir gözlem daha var ve rastlantı değildir. Bu tablonun 24, 12 ve 6 saatlik satırları, önceki tablonun iptal listesi, kısa ömürlü sertifika ve sunulan yanıt satırlarıyla aynı sayıları veriyor. Üç ayrı düzenek, tek bir parametrenin işlevidir. Düzeneğin adı yanlış kabul sayısını değiştirmiyor; değiştirdiği tek şey turu kimin, ne zaman ve kaç kez ödediğidir.
Yanlış Yapılandırmanın Belirtileri
Doğrulama tek bir karar değil, bir yürüyüştür ve yürüyüşün her adımı ayrı ayrı düşebilir. Belirti, hangi adımın düştüğünü ele verir.
doğrulama yürüyüşü ve düşebileceği adımlar 1 sunulan zincir toplandı <- eksik ara sertifika burada düşer 2 her halkanın imzası doğrulandı 3 zincir güven çıpasına vardı mı <- kendinden imzalı zincir burada düşer 4 geçerlilik aralığı açık mı <- süresi geçmiş sertifika burada düşer 5 yaprağın adı istenen adı karşılıyor mu <- ad uyuşmazlığı burada düşer 6 halkalardan biri iptal edilmiş mi <- yalnız bu adım belgenin dışını sorar
- Süresi geçmiş sertifika. Belirti: doğrulama dördüncü adımda düşer ve hata bir anda başlar, çünkü aralık herkes için aynıdır. Ayırt edici im, hatanın ağa, yola ve istemciye göre değişmemesidir. Daraltma: yenileme bitişten önce tetiklenirse aralık hiç kapanmaz; ömür kısaldıkça bu tetikleme otomatikleşmek zorunda kalır.
- Eksik ara sertifika. Belirti: aynı sunucu kimi istemcide çalışır, kiminde çalışmaz. Eksik halkayı başka bir alışverişte edinip saklamış istemci zinciri tamamlayabilir, edinmemiş olan tamamlayamaz. Ayırt edici im, sonucun istemciye göre değişmesidir. Daraltma: eksik halka sunucunun sunduğu zincire eklenerek kapatılır, istemcinin çıpa kümesi genişletilerek değil.
- Ad uyuşmazlığı. Belirti: imzalar tutar, zincir çıpaya varır, geçerlilik aralığı açıktır ve doğrulama yine de beşinci adımda düşer. Ayırt edici im, hatanın hangi adla gidildiğine bağlı olmasıdır. Daraltma: sertifikanın bildirdiği ad kümesi ile sunucunun yanıt verdiği ad kümesi tek bir kaynaktan üretilirse ikisi ayrışamaz.
- Kendinden imzalı zincir. Belirti: zincir tek halkadır ve o halkanın vereni kendisidir; istemcinin çıpa kümesinde karşılığı yoksa üçüncü adımda düşer. Ayırt edici im, hatanın çıpayı elle yerleştirmiş istemcide görülmemesidir. Bu, kendinden imzalı belgenin kusurlu olduğu anlamına gelmez — güven çıpalarının kendisi de çoğunlukla kendinden imzalıdır; ayrım, belgenin istemcinin elinde olup olmadığındadır. Daraltma: çıpa yerleştirilecekse kapsamı tek uca daraltılır, çünkü her çıpa o çıpadan inen bütün zincirleri kabul edilebilir kılar.
Dördü de doğrulamanın bir adımının düşmesidir. Doğrulamayı bütünüyle kapatmak dört belirtiyi birden susturur; sustuğu için de bir düzeltme değildir — Sertifikalar ve Güven Zinciri dersinde doğrulamayı hiç yapmayan istemcinin doğru karar sayısının düştüğü ölçülmüştü. Bu ders neyin yanlış olduğunu yazar, nasıl yapılacağını değil.
Özet
- Ömür belgenin içindedir ve yerel denetlenir; iptal belgenin dışındadır ve imzalanmış alana yazılamayacağı için ayrı bir kayıtla yayımlanır.
- Yenileme eski belgeyi uzatmaz, yenisini çıkarır; ikisi bir süre birlikte yaşar ve anahtar değişmişse eski belge yeni anahtar hakkında hiçbir şey söylemez.
- Hiç sormayan istemci sıfır tur harcar ve iptal edilmiş sertifikayı ortalama 22,02 alışveriş boyunca geçerli sayar; her alışverişte soran istemci yanlış kabulü sıfırlar ve 120 tur öder.
- İptal sorusunun turu zincir uzunluğuyla doğru orantılıdır — bir halkada 40, beş halkada 200 — ve alışveriş sayısıyla doğrusal büyürken önceden dağıtılmış listenin turu sabit kalır.
- Aradaki üç seçeneğin alışveriş başına turu sıfırdır ve yanlış kabulleri yalnız bilme gecikmesine bağlıdır: 3,5 saatte 0,15; 6,5 saatte 0,31; 12,5 saatte 0,57.
- Ömür kısaldıkça gecikme düşer ama yenileme artar; yenileme çarpı ömür pencereye sabitlenir, yani kazanılan gecikme ödenen yenilemeyle ters orantılıdır.
Sonraki Adım
Güvenli taşıma burada kapanıyor. Anahtar rolleri bölündü, zincir yerel doğrulandı, kurulumun turu sayıldı ve iptalin tur borcu ödendi. TLS El Sıkışması dersinde ölçülen kayıp da yerinde duruyor: zarf kapandığında yüz altmış karar aracıdan uçlara taşınmıştı. Ama o kaybın ortasında bağlantı hâlâ istek–yanıt biçimindeydi: istemci bir ileti gönderiyor, sunucu bir ileti döndürüyor, sıra yeniden istemciye geçiyordu. Aracı iletinin içini göremese de kaç ileti olduğunu, her birinin nerede başlayıp nerede bittiğini biliyordu. Sonraki konu bunu soruyor: bağlantının biçimi de değişirse geriye ne kalır?
İlerlemeni kaydetmek ve not almak için Giriş yap
Notlarım
Not almak için giriş yapmalısın.