neqtus

Kuantum Anahtar Dağıtımı: BB84 Protokolünün Anatomisi

Kuantum haberleşmenin temel taşı olan BB84 protokolünü adım adım inceliyoruz: foton polarizasyonundan baz uzlaşmasına, dinleme tespitinden anahtar damıtmaya.

9 dk okumaQKD · BB84 · kuantum haberleşme

Klasik kriptografide anahtar dağıtımı her zaman bir güven problemidir: iki taraf, aralarındaki kanalı dinleyen birinin varlığını matematiksel zorluk varsayımlarına dayanarak göz ardı eder. Kuantum anahtar dağıtımı (QKD) bu varsayımı fiziğin kendisiyle değiştirir. 1984'te Charles Bennett ve Gilles Brassard tarafından önerilen BB84, bu alandaki ilk ve hâlâ en çok çalışılan protokoldür.

Temel fikir: ölçüm, durumu bozar

Kuantum mekaniğinde bilinmeyen bir kuantum durumu kopyalanamaz (no-cloning teoremi) ve yanlış bazda yapılan bir ölçüm durumu geri dönüşsüz biçimde bozar. BB84 bu iki ilkeyi güvenlik garantisine dönüştürür: kanalı dinleyen Eve, fotonları ölçmek zorundadır; ölçtüğü anda istatistiksel olarak tespit edilebilir izler bırakır.

Protokolün adımları

  • Alice her bit için rastgele bir baz seçer: doğrusal (⊕: 0°/90°) veya çapraz (⊗: 45°/135°).
  • Seçtiği bazda, göndereceği bite karşılık gelen polarizasyonda tek foton yollar.
  • Bob her foton için bağımsız ve rastgele bir baz seçerek ölçüm yapar.
  • Açık (klasik) kanalda yalnızca kullanılan bazlar karşılaştırılır; bitler asla paylaşılmaz.
  • Bazların uyuştuğu (%50 civarı) bitler 'elenmiş anahtar'ı (sifted key) oluşturur.
  • Rastgele bir alt küme açıklanarak kuantum bit hata oranı (QBER) ölçülür; eşik aşılırsa oturum terk edilir.

Dinleyici ne kadar iz bırakır?

En basit saldırı olan intercept-resend senaryosunda Eve her fotonu rastgele bir bazda ölçüp sonucu yeniden gönderir. Bazı %50 ihtimalle yanlış seçer; bu da Bob'un elenmiş anahtarında ortalama %25 hata üretir. Pratik sistemlerde QBER eşiği tipik olarak ~%11 kabul edilir: bunun üzerindeki hata oranında güvenli anahtar damıtılamaz.

python
import random

def measure(bit: int, prep_basis: str, meas_basis: str) -> int:
    """Bazlar uyuşuyorsa bit korunur; uyuşmuyorsa sonuç %50-%50 rastgeledir."""
    return bit if prep_basis == meas_basis else random.randint(0, 1)

def bb84_qber(n: int = 100_000, eavesdrop: bool = False) -> float:
    matched, errors = 0, 0
    for _ in range(n):
        bit    = random.randint(0, 1)
        a_base = random.choice("+x")   # Alice'in hazırlama bazı
        b_base = random.choice("+x")   # Bob'un ölçüm bazı

        if eavesdrop:                  # intercept-resend saldırısı
            e_base = random.choice("+x")
            bit_on_wire = measure(bit, a_base, e_base)
            received    = measure(bit_on_wire, e_base, b_base)
        else:
            received = measure(bit, a_base, b_base)

        if a_base == b_base:           # yalnızca bazlar uyuşan bitler elenmiş anahtara girer
            matched += 1
            errors  += received != bit
    return errors / matched

print(f"QBER (dinleme yok):        ~{bb84_qber():.1%}")   # ~%0
print(f"QBER (intercept-resend):   ~{bb84_qber(eavesdrop=True):.1%}")  # ~%25

Elenmiş anahtardan güvenli anahtara

Gerçek sistemlerde hata yalnızca dinlemeden değil; dedektör gürültüsü, kanal kaybı ve optik hizalamadan da kaynaklanır. Bu yüzden protokolün son aşaması iki klasik alt prosedür içerir: hata uzlaştırma (örn. Cascade protokolü) ve gizlilik yükseltme (privacy amplification), yani evrensel hash fonksiyonlarıyla Eve'in olası kısmi bilgisinin sıfıra indirilmesi.

BB84'ün güzelliği şudur: güvenliği, saldırganın hesaplama gücünden değil, doğanın ölçüm üzerine koyduğu kısıtlardan gelir.

Neden çalışıyoruz?

QKD; savunma, finans ve kritik altyapı haberleşmesi için uzun vadeli gizlilik gerektiren senaryoların merkezinde. Türkiye'nin kuantum haberleşme altyapısına dair yol haritasında da QKD önemli bir başlık. Takım olarak BB84 ve türevlerini (decoy-state, E91, MDI-QKD) hem teorik hem simülasyon düzeyinde çalışıyor; bulgularımızı bu sayfalarda dokümante ediyoruz.

Bu yazı yeni bulgularla güncellenebilir. Hata, eksik ya da katkı için bize yazın.