İçindekiler
İnternet trafiğinin herkes tarafından dinlenebildiği bir ortamda iki kişinin aynı gizli anahtarı oluşturması ilk bakışta imkânsız görünür. Diffie-Hellman anahtar değişimi, parolayı veya anahtarı doğrudan göndermek yerine iki tarafın matematiksel işlemlerle aynı sırra ulaşmasını sağlar. Böylece pasif bir dinleyici bütün mesajları görse bile ortak anahtarı pratik sürede hesaplayamaz. ``
Temel fikir: Anahtarı gönderme, birlikte üret
Diffie-Hellman algoritmasında taraflara geleneksel olarak Alice ve Bob adı verilir. Öncelikle açıkça paylaşılabilen iki sayı belirlenir:
- Büyük bir asal sayı: $p$
- Üreteç adı verilen sayı: $g$
Alice yalnızca kendisinin bildiği rastgele bir $a$, Bob ise gizli bir $b$ sayısı seçer. Ardından açık değerlerini hesaplarlar:
\[A = g^a \bmod p\] \[B = g^b \bmod p\]Alice, $A$ değerini Bob’a; Bob da $B$ değerini Alice’e gönderir. Bu mesajların dinlenmesi sorun değildir. Taraflar gelen değeri kendi gizli sayılarıyla işleyerek ortak anahtarı bulur:
\[K_A = B^a \bmod p\] \[K_B = A^b \bmod p\]İki sonuç eşittir çünkü:
\[B^a = (g^b)^a = g^{ab} = (g^a)^b = A^b \pmod p\]| Bilgi | Alice | Bob | Dinleyici |
|---|---|---|---|
| $p$ ve $g$ | Görür | Görür | Görür |
| $A$ ve $B$ | Görür | Görür | Görür |
| $a$ | Bilir | Bilmez | Bilmez |
| $b$ | Bilmez | Bilir | Bilmez |
| Ortak anahtar | Hesaplar | Hesaplar | Kolayca hesaplayamaz |
Küçük sayılarla örnek
Eğitim amacıyla $p=23$ ve $g=5$ seçelim. Alice’in gizli sayısı $a=6$, Bob’unki ise $b=15$ olsun.
Alice şu açık değeri üretir:
\[A = 5^6 \bmod 23 = 8\]Bob’un açık değeri şöyledir:
\[B = 5^{15} \bmod 23 = 19\]Alice $19^6 \bmod 23$ işlemini, Bob ise $8^{15} \bmod 23$ işlemini yapar. İkisi de $K=2$ sonucuna ulaşır. Dinleyici 23, 5, 8 ve 19 sayılarını bilir; fakat gizli üsleri çıkarmak için ayrık logaritma problemini çözmek zorundadır.
Python ile çalışma mantığı
Aşağıdaki kod, süreci küçük sayılarla canlandırır. Python’ın üç parametreli pow fonksiyonu modüler üs almayı büyük ara değerler oluşturmadan gerçekleştirir.
from secrets import randbelow
p = 23
g = 5
# Her taraf kendi gizli sayısını seçer.
alice_private = randbelow(p - 2) + 1
bob_private = randbelow(p - 2) + 1
# Bunlar açık kanal üzerinden gönderilebilir.
alice_public = pow(g, alice_private, p)
bob_public = pow(g, bob_private, p)
# Taraflar aynı ortak sırra bağımsız biçimde ulaşır.
alice_secret = pow(bob_public, alice_private, p)
bob_secret = pow(alice_public, bob_private, p)
print(alice_secret, bob_secret)
assert alice_secret == bob_secret
Buradaki 23 sayısı gerçek güvenlik sağlamaz; olası gizli değerler kolayca denenebilir. Gerçek sistemlerde standartlaştırılmış çok büyük gruplar veya X25519 gibi eliptik eğri tabanlı modern seçenekler kullanılır. Elde edilen sayı da doğrudan şifreleme anahtarı yapılmaz; genellikle HKDF gibi bir anahtar türetme fonksiyonundan geçirilir.
Dinleyici neden zorlanır?
$g^a \bmod p$ değerini hesaplamak kolaydır. Ancak yalnızca $g$, $p$ ve sonuç bilinirken $a$ değerini bulmak, uygun parametrelerde hesaplama açısından son derece pahalıdır. Güvenlik “matematiksel olarak asla çözülemez” anlamına gelmez; güncel bilgisayarlar ve doğru anahtar boyutları karşısında pratik olarak çözülemez demektir. Yeterince güçlü kuantum bilgisayarlar, Shor algoritmasıyla klasik Diffie-Hellman’ı tehdit edebilir.
Kritik açık: Aktif araya girme saldırısı
Diffie-Hellman pasif dinlemeye dayanıklıdır, fakat tarafların kimliğini tek başına doğrulamaz. Mallory adlı saldırgan mesajları değiştirebiliyorsa Alice ve Bob ile ayrı anahtarlar oluşturup trafiği aktarabilir. Bu, ortadaki adam saldırısıdır.
| Tehdit | Saf Diffie-Hellman sonucu | Çözüm |
|---|---|---|
| Pasif trafik dinleme | Dayanıklı | Güçlü parametreler |
| Mesaj değiştirme | Savunmasız | Dijital imza veya sertifika |
| Eski anahtarın çalınması | Oturuma bağlı | Geçici anahtarlar, yani ECDHE |
Bu nedenle TLS, Diffie-Hellman değişimini sertifikalar ve dijital imzalarla doğrular. Özetle taraflar bir parolayı paylaşmaz; açık kanalda, yalnızca kendilerinin hesaplayabildiği ortak bir sır üretir. Diffie-Hellman’ın sihri de tam olarak anahtarı taşımadan anahtar üzerinde anlaşabilmesidir.
Yorumlar