Küçük Bir Not: Diffie-Hellman teknik olarak bir "şifreleme" yöntemi değil, güvenli bir anahtar değişim protokolüdür. Yazının daha kolay anlaşılması adına genel bir ifadeyle "şifreleme" olarak adlandırılmıştır.
Diffie-Hellman şifrelemesi, iki kişinin 3. bir kişinin olduğu ortamda konuşup, 3. kişinin aynı şeyleri duymasına rağmen anlamamasını sağlayan algoritmadır. Günümüzde internet üzerinden olan bütün hizmetlerin sadece istenen kişiler tarafından anlaşabilmesini sağlayan temeldir.
Çalışma prensibini matematiksel ve metaforik anlatmak istiyorum. İki kişi düşünelim isimleri Emre ve Kayra olsun. Bunlar Kayra’nın sevgilisi Cemre’nin olduğu odada, Cemre’nin anlamayacağı bir muhabbet etmek istiyorlar. Cemre onları dinlese de anlamamalı. Kayra bunun için bir asal sayı söylüyor:
p sayısı diyelim bu sayıya, 2048 bit’lik asal bir sayı. Bunu 3’ü de duyuyor. Sonra Kayra bir adet baz sayı söylüyor, bu da q sayısı. (Bu q genellikle 2, 3 veya 5 gibi oldukça küçük bir sayıdır. Sadece rastgele seçilmez; matematiğin küçük bir döngüye sıkışmaması için p'nin "ilkel kökü" yani jeneratörü olması gerekir. Bütün zorluk p'nin devasa olmasından gelir, q'nun büyük olmasına gerek yoktur). Devamında Kayra ve Emre önceden anlaştığı gibi devasa büyük ama akıllarında tutup söylemedikleri, sadece kendilerinin bileceği birer sayı düşünüyorlar. Kayra k sayısını, Emre e sayısını aklında tutuyor. Literatürde bu gizli sayılara Private Key (Gizli Anahtar) denir.
(p - asal sayı, q - baz/jeneratör sayısı, k - Kayra'nın private key'i, e - Emre'nin private key'i)
Sonra Kayra hemen bir K sayısı hesaplıyor. Bunu yapmak için: q üzeri k'nın p'ye bölümünden kalanı hesaplıyor ve Emre’ye söylüyor. Literatürde herkesin duyabildiği bu üretilmiş sayıya Public Key (Açık Anahtar) denir.
$$ K = q^k \pmod{p} $$
Emre de Kayra'yla benzer olarak bir E sayısı (kendi Public Key'ini) hesaplıyor: q üzeri e'nin p'ye bölümünden kalanı hesaplıyor ve Kayra’ya söylüyor.
$$ E = q^e \pmod{p} $$
Cemre de odada olduğu için o da K ve E açık anahtarlarını duyuyor. Şimdi son durumda Cemre, Kayra ve Emre hepsi p, q, K ve E sayılarını biliyor. Kayra sadece kendisinin bildiği k sayısını sakladı. Emre ise sadece kendisinin bildiği e sayısını sakladı.
Şimdi Kayra, Emre’nin kendisine söylediği açık anahtarı kullanarak son bir işlem yapıyor ve bir S (Shared Secret - Ortak Sır) sayısı hesaplıyor. Bunun için E üzeri k'nın p'ye bölümünden kalanı hesaplıyor.
$$ S = E^k \pmod{p} $$
Emre de benzerini yapıyor. O da K üzeri e'nin p'ye bölümünden kalanı hesaplıyor.
$$ S = K^e \pmod{p} $$
Diffie-Hellman matematiksel teoremi sayesinde:
$$ S = E^k \pmod{p} = K^e \pmod{p} $$
Aslında basitçe aynı sayının farklı sırayla aynı üstleri alınarak Kayra'yla Emre aynı sayıyı buldu. Daha iyi anlamak için Emre'nin hesabına bakalım:
$E = q^e \pmod{p}$
Kayra S'i bulmak için Emre'den gelen E değerinin k'ıncı kuvvetini alıyor:
$S = (q^e \pmod{p})^k \pmod{p}$
Modüler aritmetik kurallarına göre, bu denklemin sonucu üslerin çarpımına denktir:
$S = q^{(e \cdot k)} \pmod{p}$
Aynı şekilde Kayra'nın hesabına bakalım:
$K = q^k \pmod{p}$
Emre de S'i bulmak için Kayra'dan gelen K değerinin e'inci kuvvetini alıyor:
$S = (q^k \pmod{p})^e \pmod{p}$
Yine aynı kural gereği:
$S = q^{(k \cdot e)} \pmod{p}$
Çarpma işleminde yerlerin değişmesi sonucu etkilemediği için ( $e \cdot k = k \cdot e$ ), her iki denklem de aynı sonuca yani $q^{(e \cdot k)} \pmod{p}$ değerine ulaşır. Bu ikisi de aynı olduğu için Kayra ve Emre'nin elinde aynı olan S değeri vardır. Peki Cemre neden S değerini bulamaz?
Cemre E ve K değerlerini, yani $q^e \pmod{p}$ ve $q^k \pmod{p}$ değerlerini biliyor. Örneğin bu ikisini çarpsa üstlerin toplamı değerini bulacak:
$q^e \pmod{p} \cdot q^k \pmod{p} \equiv q^{(e+k)} \pmod{p}$
Ama bulması gereken değer: $q^{(e \cdot k)} \pmod{p}$ Bu durumda direkt erişemiyor demek S'e, peki tahmin edemez mi?
Şimdi $E = q^e \pmod{p}$ işleminde tek bilmediği değer e değeri. Ve e değerini bulsa $S = K^e \pmod{p}$ yaparak anahtarı yani S’i bulabilir. Şimdi bir sonucun elde edilmesi için taban sayısının kaçıncı kuvvetinin alınması gerektiğini bulmak için logaritma kullanırız. Bu sebeple normalde elimizde $E = q^e$ olsa $e = \log_{q}(E)$ olur. Bu durumda Cemre şu an bildiği değerlerle kolayca cevabı bulabilirdi. Fakat burada modlu bir değerin log’unu aldığımız için elimizdeki eşitlik şöyle gözükür: $e = \log_{q}(E) \pmod{p}$ olur. Buna matematik dünyasında “Ayrık Logaritma” (Discrete Logarithm) denir.
Normal matematikte $E = q^e$ gibi bir işlemde sayılar düzenli olarak büyür, grafiği pürüzsüz bir yokuş gibidir. Ancak modüler aritmetikte işin içine 'bölümünden kalan' (mod) girdiği için bu düzen tamamen bozulur. Ayrık Logaritma problemi, normal logaritmanın aksine grafiği düzgün bir eğri olmayan, modülo işleminden dolayı değerlerin bir langırt topu gibi rastgele sıçradığı bir fonksiyondur. Örneğin sonuçlar 1, 4, 2, 8, 5, 7 diye tamamen tahmin edilemez bir sırayla ilerler. Bu yüzden Cemre'nin elindeki değerlere bakıp geriye doğru bir formül işletmesi ve 'Ha, demek ki e sayısı buymuş!' demesi imkansızdır.
Peki Cemre'nin elindeki seçenekler neler? İlk akla gelen ve en ilkel yöntem, p sayısına kadar olan tüm ihtimalleri tek tek, sırayla denemektir (buna kaba kuvvet - brute-force denir). Peki Cemre madem tek tek deneyecek, bunu neden yapamıyor?
Çünkü biz p değerine gidip 2048 bitlik bir sayı veriyoruz, bunun anlamı yaklaşık 617 basamaklı ( $10^{616}$ ) bir sayı veriyoruz demek. Bunu somutlaştırmak için şöyle düşünebilirsiniz:
Gözle görülebilir evrende $10^{80}$ atom vardır, bu 81 basamaklı bir sayıdır. Bizim verdiğimiz sayı ise 617 basamaklı bir sayıdır. Karşılaştırmak için şöyle düşünebiliriz: Eğer her bir atomun içine yeni bir evren sığdırsaydınız ve o evrenlerin içindeki her bir atomun içine de birer evren daha sığdırdıysaydın, yine de 617 basamağa yaklaşamazdık.
Yani Cemre kaba kuvvet yöntemiyle tek tek denemeye kalksa, doğru e sayısını bulma ihtimali $10^{616}$ 'dır. Cemre'nin elinde dünyadaki en iyi süper bilgisayar olsa ve saniyede $10^{18}$ deneme yapsa bile, doğru sayıyı bulması evrenin varoluşundan bu yana geçen süreden trilyonlarca kat daha uzun sürerdi.
"Peki ama" diyeceksiniz, "Matematikçiler ve hackerlar tek tek denemek yerine daha akıllıca yollar bulamazlar mı?" Kesinlikle bulurlar. Kriptografide kimse saf kaba kuvvet kullanmaz. Ayrık logaritmayı çözmek için geliştirilmiş Number Field Sieve (Sayı Cisimleri Eleği) veya Baby-step Giant-step gibi çok daha gelişmiş ve deneme sayısını dramatik ölçüde azaltan zeki algoritmalar vardır. Ancak asıl mucize şurada: Bu gelişmiş algoritmalar bile 2048 bitlik bir sayı karşısında çaresiz kalır. Deneme süresini trilyonlarca yıldan belki binlerce yıla indirirler ama yine de Cemre'nin ömrü veya dünyadaki mevcut bilgi işlem gücü bu şifreyi kırmaya yetmez.
Yani anlayacağınız kadarıyla Cemre’nin şifreyi bulması mümkün değildir. Peki tamam, Cemre e’yi bulamadığı için S değerini bulamayacak gün sonunda. Ama Kayra ile Emre bu S değerini nasıl kullanacak?
Burada işin içine şifreleme algoritmaları girer. Kayra ve Emre sadece kendilerinin bildiği S değerini (tahmin edilebilirliği tamamen sıfırlamak için) doğrudan kullanmak yerine, genellikle bir Özet Fonksiyonundan (Hash veya KDF) geçirerek tek kullanımlık bir 'Oturum Anahtarı' (Session Key) üretirler. Sonra bu anahtarı kullanarak, aradaki normal konuşmayı (plaintext) AES gibi bir algoritmayla şifrelerler ve birbirlerine şifreli metin (ciphertext) göndermeye başlarlar. Artık ortamda herkes bu şifreli metni duyar ama sadece o oturum anahtarına sahip olan kişi bunu deşifre (decrypt) edebilir. Buna simetrik şifreleme denir (Aynı anahtarla verinin şifrelenip, aynı anahtarla açılması). Yani Diffie-Hellman kilit değil, kilidi açacak anahtarı güvenle oluşturma yöntemidir.
Konuştuklarımızın üzerinden geçecek olursak, bu şifrelemedeki Kayra ile Emre, sunucu ve istemcidir. Cemre ise aradaki konuşmayı duymasını istemediğimiz hackerdır. Diffie-Hellman matematiksel teoremini kullanarak dinlenen bir ortamda şifreli konuşabiliriz. Bu metot günümüzde bütün şifreli protokollerin temelini oluşturur. Bu protokoller HTTPS, SSH, mesajlaşma uygulamaları ve VPN'lerin kullandığı iletişimin başlatılması ve kiminde devam ettirilmesi için kullanılan şifrelemedir. Eğer bir gün kırılırsa bütün internet güvenliği savunmasız kalır.
Ufak Bir Güvenlik Notu: Ortadaki Adam (Man-in-the-Middle) Diffie-Hellman bu haliyle mükemmel görünse de tek bir zayıflığı vardır: Kimlik doğrulama yapmaz. Eğer Cemre sadece "dinlemeyip" iletişimin arasına sızarsa; Kayra'ya kendini Emre, Emre'ye de kendini Kayra gibi tanıtıp iki ayrı şifreli hat kurarak herkesi kandırabilir. Bu yüzden günümüzde DH tek başına kullanılmaz; "sen gerçekten o kişi misin?" sorusunu yanıtlayan RSA gibi dijital imzalarla (sertifikalarla) birlikte kullanılır.
Peki bu matematiksel imkansızlık kırılamaz mı? İşte burada kuantum bilgisayarları çok büyük bir tehdit oluşturur. Kriptografi ve siber güvenlik dünyasında, kuantum bilgisayarların Diffie-Hellman ve RSA gibi günümüz şifreleme standartlarını tamamen kıracağı o kaçınılmaz güne "Q-Day" (Kuantum Günü) adı veriliyor. Kuantum bilgisayarlar bu şifreleri kaba kuvvetle (hızlıca tek tek deneyerek) değil; 1994 yılında icat edilen Shor Algoritması sayesinde, ayrık logaritma problemini çözen matematiksel bir kestirme yolla kıracaklar.
Önceleri bu kırılmanın 2030 yılı civarında yaşanacağı tahmin edilse de, IBM ve Google gibi teknoloji devlerinin güncel yol haritalarına göre; milyonlarca kubitlik hataya dayanıklı (fault-tolerant) kuantum bilgisayarların üretilmesi önümüzdeki 10 ila 15 yılı, yani 2035-2040 arasını bulacak.
Tabi o zamana kadar da daha iyi şifreleme metotları geliştirilecektir; hatta NSA tarafından şimdiden daha sağlam (Kuantum Sonrası) şifreleme protokolleri standart haline getirilmeye çalışılıyor. Ancak şu anda devletlerin ve büyük şirketlerin uçtan uca şifrelenmiş mesajlarımızı bir yerde saklayıp, gelecekte kıracağı 'Hasat Et, Sonra Çöz' (Harvest Now, Decrypt Later) saldırısından korkuluyor.
Yani bugün şifreli verimizi okuyamayanlar, onu depoluyorlar ki gelecekte Q-Day geldiğinde kuantum bilgisayarla saniyeler içinde açabilsinler.
