İçeriğe geç
academia.sh

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.

Aramak için yazmaya başlayın.

↑↓ Esc gezin · aç · kapat