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.
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.
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%}") # ~%25Elenmiş 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.