
Güvercinlerle HTTPS Protokolü
Kriptografi anlaşılması güç bir konu olabilir. Tamamiyle matematiksel kanıtlardan ibarettir. Ancak kriptografik sistemler geliştirmiyorsanız, yüksek seviyelerde olan biteni anlamak için bu kompleks yapıyı anlamanız o kadar da gerekli değil.
Eğer bu makaleyi açarkan yeni bir HTTPS protokolü yaratmayı umuyorduysanız, üzgünüm ama güvercinler yeterli olmayacak. Öbür türlüyse, kendiniz için biraz kahve demlemeye başlayın ve makalenin tadını çıkarın.
Alice, Bob ve … güvercinler?
İnternette yaptığınız her aktivite(bu makaleyi okumak, Amazon’dan bir şeyler satın almak, kedi resimleri yüklemek)sunucuyla aranızda mesaj alıp vermeye dayanır.
Bu biraz soyut bir kavram olabilir, o yüzden bu mesajların posta güvercinleriyle teslim edildiğini düşünelim. Farkındayım bu çok keyfi bir seçim gibi duruyor ama inanın bana HTTPS aynı şekilde çalışıyor, gerçi çok daha hızlı olarak.
Ayrıca sunucular, alıcılar ve hackerlardan bahsetmek yerine, Alice, Bob ve Mallory üzerinden konuşacağız. Eğer ilk defa kriptografik konseptleri anlamaya çalışmıyorsanız, bu isimleri tanıyacaksınızdır, çünkü teknik literatürde oldukça geniş çaplı kullanılıyorlar.
Naifçe yapılan ilk iletişimimiz
Eğer Alice Bob’a bir mesaj göndermek istiyorsa, mesajı bir posta güvercininin bacağına bağlayıp gönderiyor. Bob mesajı alıyor, okuyor ve herşey tamam.
Peki ya Mallory, Alice’in gönderdiği güvercini yakalayıp mesajı değiştirseydi? Bu durumda Bob’un Alice tarafından gönderilen mesajın yolda değiştirilip değiştirilmediğini bilmesine imkan yok.
İşte HTTP bu şekilde çalışır. Ürkütücü duruyor değil mi? Ben olsam banka müşteri bilgilerimi HTTP üzerinden göndermezdim, sizde göndermemelisiniz.
Gizli bir kod
Şimdi ya Alice ve Bob çok kurnaz olsaydı ne olurdu? Mesajlarını gizli bir kod kullanarak yazmak üzere anlaşırlardı. Hemde her bir harfin pozisyonunu alfabedeki 3 harf sonrakine getirecek şekilde. Örneğin; A → D, B → E, C → F. Açık hali “secret message” olan mesaj, bu şekilde “vhfuhw phvvdjh” olur.
Başarı!
Buna simetrik anahtar kriptolojisi denir, çünkü mesajın nasıl şifrelendiğini bilirsen şifrenin nasıl çözüleceğini de bilirsin.
Yukarıda açıkladığım kod yaygın olarak “Sezar şifreleme” olarakta bilinir. Gerçek hayatta daha gösterişli ve kompleks kodlar kullanıyoruz, yinede temel mantık aynı kalıyor.
Anahtara nasıl karar vereceğiz?
Eğer alıcı ve verici haricinde kimse hangi anahtarın kullanıldığını bilmiyorsa, simetrik anahtar kriptolojisi çok güvenlidir. Sezar şifrelemede anahtar, harften sonra kaç harf atlanacağına bakılmasıdır. Mesela biz örneğimizde 3 harf atlamalı kullandık, ama isteseydik 4 ya da 12'de yapabilirdik.
Sorun şu ki, Alice ve Bob birbirlerine mesaj göndermeden önce buluşmuyorlar, anahtarı belirlemeleri için bir yol yok. Eğer anahtarı mesajın içerisinde gönderecek olurlarsa Mallory mesaja müdahale edip anahtarı ele geçirebilir. Bu da Mallory’e, Alice ve Bob mesajlarını şifreledikten sonra bile mesajları açıp okuma ve hatta değiştirme olanağı sunacaktır.
Bu “Ortadaki Adam Saldırısı”nın tipik bir örneğidir ve bundan kaçınmanın tek yolu şifreleme sistemini tümden değiştirmektir.
Kutu taşıyan güvercinler
Böylece Alice ve Bob daha da iyi bir sistemle gelirler. Bob, Alice’e bir mesaj göndermek istediğinde, Alice aşağıdaki adımları takip edecektir;
- Bob, Alice’e mesajsız bir güvercin gönderir.
- Alice güvercini kilidi açık boş bir kutuyla geri gönderir, ama anahtarı elinde tutar.
- Bob mesajını kutunun içine koyar, kilidi kapatır ve kutuyu Alice’e gönderir.
- Alice kutuyu alır, elindeki anahtarıyla açar ve mesajı okur.
Bu yolla Mallory güvercininin yolunu kesse bile mesajı okuyamaz ya da değiştiremez, çünkü elinde anahtar yoktur. Aynı işlem Alice’de Bob’a mesaj göndermek istediğinde kullanılır.
Alice ve Bob’un demin kullandıklarının adı ise genel olarak asimetrik anahtar kriptolojisi olarak bilinir. Asimetrik denir, çünkü bir mesajı şifreleyebilsen bile(kutunun kilidini kapatmak) şifreyi çözemezsin(kapalı bir kilidi açamazsın). Teknik olarak konuşmak gerekirse, buradaki kutu public key ve anahtarda private key olarak bilinir.
Kutuya nasıl güveneceğim?
Eğer dikkatinizi verdiyseniz hala bir problemimiz var. Bob kutuyu aldığında, kutunun Alice’e ait olduğunu ve Mallory’nin güvercini yakalayıp üzerine kendi kutusunu koymadığını nereden bilecek?
Alice kutuyu imzalamaya karar verir, bu şekilde Bob kutuyu aldığında imzayı kontrol eder ve kutunun Alice’den geldiğini bilir.
Şimdi bazılarınız, “Bob Alice’in imzasını nereden bilecek ki?” diye soruyor olabilir. Güzel soru. Alice ve Bob’un böyle de bir sorunu var, onlarda bu durumda kutuyu imzalayanın Alice yerine Ted olmasına karar veriyorlar.
Ted kim? Ted çok ünlü, herkesçe bilinen ve güvenilir bir eleman. Ted kendisine güvenen ve yalnızca kendisinin meşru insanlara imzasını vereceğine inanan kişilerin kutularını imzalıyor.
Eğer ki kutunun imzalanmasını isteyenin gerçekten Alice olduğunu onaylarsa Ted, Alice’in kutusunu imzalayacak. Böylece Mallory, imzalı bir Alice kutusu kullanamıyor olacak ve Bob gelen kutunun Alice imzalı olduğunu bilecek çünkü Ted güvenmediği kişilerin kutularını imzalamıyor.
Ted teknik terimle ifade edilirse genel olarak Sertifikalama Otoritesi(Certification Authority) olarakta bilinmektedir ve bu makaleyi okuduğunuz tarayıcı çeşitli Sertifikalama Otoritelerinin imzalarıyla gelmektedir.
Böylece ilk kez bir websitesine bağlandığınızda onun kullandığı kutulara güveniyorsunuz, çünkü Ted’e güveniyorsunuz ve Ted kutunun meşru olduğunu söylüyor.
Kutular ağırdır
Alice ve Bob şimdi güvenilir bir iletişim sistemine sahipler, ama şunu fark ediyorlar ki; kutu taşıyan güvercinler yalnızca mesaj taşıyan güvercinlerden daha yavaşlar.
Onlarda kutu metodunu(asimetrik kriptografi) yalnızca şifreleme anahtarını(Sezar şifrelemeyi hatırladınız mı?) taşımak için kullanmaya karar veriyorlar.
Bu şekilde iki dünyanın da güzel yanlarını almış oluyorlar. Asimetrik şifrelemenin güvenilirliğini ve simetrik şifrelemenin verimini.
Gerçek dünyada yavaş güvercinler yok, ancak asimetrik kriptografi kullanarak mesajları şifrelemek yinede simetrik kriptografi kullanarak şifrelemekten daha yavaş, bizde bu yüzden asimetrik şifrelemeyi sadece anahtarları iletmek için kullanıyoruz.
Şimdi HTTPS’in nasıl çalıştığını biliyorsunuz ve kahveniz şimdiye hazır olmuş olmalı. Gidin için, hak ettiniz. 😉
Kaynak: https://readmedium.com/https-explained-with-carrier-pigeons-7029d2193351