Whatsapp, Signal ve Uçtan Uca Şifreleme
Yakınlarda Whatsapp’ın kullanıcı gizlilik sözleşmesini yenilemesi ile kullandığımız mesajlaşma platformlarındaki verilerimizin güvenliği ve gizliliği konuları tekrar gündeme geldi. Bilgilerin sosyal medya üzerinde hızla yayılması sonucunda Signal ve Telegram gibi bir çok alternatif mesajlaşma platformu değerlendirilmeye başlandı.
Bu konuda seçimimizi yapmadan önce teknik anlamda uçtan uca şifrelemenin, ve bir mesajlaşma platformu uygulamasının açık kaynak kodlu (Open source) oluşunun neden önemli olduğunu anlamanın oldukça önemli olduğunu düşünüyorum. Bu makalemde bu iki kavramın neden önemli olduğunu ve bir araya geldiklerinde nasıl bir etki oluşturduklarını olabildiğince sadeleştirerek anlatmaya çalışacağım. Amaçladığım, Signal uygulamasının kullandığı haberleşme yönteminin detaylarına çok fazla girmeden, daha genel bir şekilde uçtan uca şifrelemenin ve açık kaynak kodlu bir uygulamanın güvenlik ve gizlilik bakımından nasıl faydalar sağladığını açıklamaktır.
Açık Kaynak Kodlu (Open Source) Ne Demektir?
Öncelikle açık kaynak kodlu ifadesinin tanımını yapalım. Örnek bir açık kaynak kodlu mesajlaşma platformunu ele alalım. Öneğin, Signal mesajlaşma uygulamasının kaynak koduna buradan ulaşabilirsiniz. Bu açık bir şekilde şu anlama geliyor: eğer bu parçaları bir araya getirecek teknik bilginiz var ise, bu linkten mobil uygulama/app ve sunucu kodlarını indirip kendi bilgisayarınızda dilediğiniz gibi modifiye edip, uygulama ve çalıştırılabilir programlara dönüştürüp kendi kurduğunuz signal sunucusu ve dağıttığınız uygulamalar üzerinden görüşme yapabilirsiniz. Bunun için herhangi bir otoriteden izin almanıza ihtiyaç yoktur, ve hem sunucunuzda, hem de mobil uygulamalarda çalışan kod tamamen sizin kontrolünüzdedir.
Peki bunun bizim için avantajı nedir? Bizim için avantaj açıkça şudur: biz kendi sunucumuzu kurmasak bile, eğer telefonumuzun uygulama kanalından(Google Play, App Store..) indirdiğimiz Signal uygulamasının, gördüğümüz, indirebildiğimiz açık kaynak kodun değiştirilmemiş bir versiyonu olduğundan eminsek, telefonumuza ne yükleyip çalıştırdığımızı tam olarak biliyoruz demektir. Yani eğer bir kişi bu uygulamaya herhangi bir açık kapı veya istenmeyen bir veri aktarım özelliği eklemek isterse, herkesin gördüğü, denetleyebildiği ve itiraz edebileceği bir ortamda bunu yapmak zorundadır.
Bu güvenlik açısından büyük bir avantajdır. Yakın zamanda gerçekleşen büyük SolarWinds güvenlik açığı(Orion Breach) gibi bir çok olay bize göstermiştir ki, bir yazılım kapalı bir ekosistemde geliştirildiğinde, istemli veya istemsiz olarak sisteme yerleştirilen güvenlik açıklarının tespiti daha zor ve yavaş olabilmektedir.
Uçtan Uca Şifreleme (End-to-End/E2E Encryption) Ne Demektir?
Uçtan uca şifreleme, bilginin sizin cihazınızı terk ederken şifreli olması demektir. Bu şifreli bilgi, karşı tarafın cihazına ulaşana kadar şifreli kalır ve ancak ve ancak karşı tarafın cihazına ulaştığında şifresi çözülür.
Bunun avantajı, iki cihaz arasında iletişimi sağlayan sunucunun, kendi üzerinden transfer edilen bilgileri çözememesidir. Bütün bilgiler şifreli olduğu için, ve ancak karşıdaki cihazın bu şifreyi çözme becerisi olduğundan, sunucunun anlam veremediği bu bilgileri bilinçsiz bir şekilde bir taraftan diğerine iletmekten başka çaresi yoktur. Dolayısıyla sunucuya sahip olan şirket veya otorite, bu bilgileri depolayabilse de, şifreyi süper bilgisayarlar dahi kullansa mantıklı bir zaman zarfında kıramayacağından bu bilgileri göremez, herhangi bir amaçla kullanamaz veya satamaz.
Yani uçtan uca şifrelemenin faydası, “bilgilerinizi depolamıyoruz/okumuyoruz” gibi beyana dayalı bir ifade yerine şifrelemenin matematiksel gücüne güvenmemizdir. Bu sayede eğer uçtan uca şifreleme kullanıldığından eminsek, kişi veya kurum beyanından bağımsız olarak iletim halinde olan bilgilerimizin güvende olduğundan da emin olabiliriz.
Peki bu nasıl mümkün olabiliyor? Sunucuya sahip olan kişi en başta biz şifrelemeyi daha yapamadan şifrelerimizi ele geçirip konuşmamızı dinleyemez mi?
Hayır. Bunun olamaması için çok zekice bir matematiksel yöntem kullanılıyor. Şimdi bunu olabildiğince sadeleştirerek anlatmaya çalışacağım.
Açık Anahtar, Gizli Anahtar
Eğer her iki cihaz başlangıçta hangi şifre ile verilerini şifreleyeceklerini birbirlerine iletselerdi, ve sonra gönderdikleri her mesajı bunlara göre şifreleselerdi, arada bulunan sunucu başlangıçta bu şifreleri kaydeder ve gidip gelen mesajları istediğinde çözerek okuyabilirdi. Peki bunu yapmasını önleyen nedir?
Açık anahtarlı şifreleme (Public key cryptography), tam da bunun olmasını önleyen yöntemdir.
Açık anahtarlı şifrelemede, bir değil iki şifre kullanılır. Bu şifrelere açık anahtar(Public key) ve gizli anahtar(Private key) denir. Açık anahtarınız, sadece bir veriyi şifrelemeye yarar. Şifrelenmiş verileri çözemez. Dolayısıyla açık anahtarınızı her yerde endişe duymadan paylaşabilirsiniz. Çünkü örneğin iki kişi size göndereceği bir mesajı açık anahtarınızı kullanarak şifrelediğinde, birbirlerinin mesajlarını çözemezler. Bu mesajları ancak ve ancak gizli anahtarı kullanarak siz çözebilirsiniz.
Bu yöntem, 1970'de bir ingiliz kriptograf tarafından keşfedilmiş ancak İngiliz hükümeti tarafından şifreli haberleşmede avantaj sağlayacağı için gizlenmiştir. 8 sene sonra üç amerikalı araştırmacının bağımsız olarak yaptığı ve yayımladığı çalışma ile dünya bu yöntemden haberdar olmuştur. İngiliz hükümetinin bu buluşun önceden ingiliz kriptograf James H. Ellis tarafından bulunduğunu açıklaması 27 yıl sonra gerçekleşmiştir. Daha sonra bilgisayarların yaygınlaşmasıyla beraber Phil Zimmermann 1991 yılında bu algoritmayı kullanan PGP(Pretty Good Privacy) yazılımını internet üzerinden yayımlayacak, ve bu yazılımın kullanımının ABD dışına sıçraması nedeniyle “İzinsiz savaş malzemesi ihracı” suçlaması ile yüksek bir ceza talebi ile yargılanacaktır. Bunun üzerine Phil Zimmermann, şaşırtıcı bir hamle yaparak yazdığı programın kaynak kodunu MIT gazetesinde herkesin görebileceği şekilde yayımlamıştır. Çünkü ABD yasalarına göre, 40 bit üzerinde şifreleme yapan bir yazılımı yurt dışına ihraç etmek bir suçken, bir yayını/bilgiyi dağıtmak anayasanın 5. ek maddesi tarafından korunmaktaydı.
Çok sadeleştirilmiş şekliyle bu yöntem aşağıdaki şekilde çalışmaktadır:
Öncelikle yukarıdakine benzer iki şifre cihazınız ve karşıdaki kişinin cihazı tarafından üretilir.
Devamında, iki cihaz birbirine sadece açık anahtarlarını gönderir. İletişim şu şekilde gerçekleşir:
- Birinci cihaz ve ikinci cihaz, birbirlerine açık anahtarlarını gönderirler. Açık anahtarları sunucunun bilmesinde bir sakınca yoktur. Çünkü sunucu, açık anahtarları kullanarak şifreli mesajları çözemez; sadece isterse şifreleme yapabilir.
- Cihazlar, birbirlerinin açık anahtarlarını kullanarak birbirlerine şifrelenmiş mesajlar göndermeye başlarlar ve kendilerindeki gizli anahtarlar ile gönderilen mesajları çözerek ekranda görüntülerler. Sunucu, gizli anahtarlara sahip olmadığı için ekranda göründükleri haliyle mesajları göremez. Mesajlar açık halleriyle sadece cihazlar üzerinde vardır.
Gerçek uygulamalarda bu adımdan sonra başka bir çok adım gerçekleşir. Bu adımların da gerçekleşme şekli değişiklik gösterebilir. Örneğin, performansı artırmak amacıyla bu yeni oluşturulan güvenli hat üzerinden yeni bir şifre paylaşılıp farklı ve daha hızlı bir şifreleme yöntemine geçiş yapılabilir, veya daha farklı algoritmalar kullanılabilir. Ancak bu yöntemler bu makalenin konusu dışındadır. Ancak eğer istenirse, signal protokolünün detayları için bu makale incelenebilir. Yöntemler arasında farklılıklar olsa da, güvenliği sağlamak açısından ilk önemli adım ve konsept bu bahsettiğimiz açık anahtar paylaşımı adımıdır.
Peki Sunucu Yine De Hile Yaparsa?
Peki sunucu bizim mesajlarımızı görebilmek için şöyle bir hile yaparsa ne olur?
- İki cihaz, açık şifre üreterek birbirlerine gönderirler, ancak sunucu, bu şifreleri bilerek cihazlar arasında değiş tokuş etmez. Onların yerine kendi ürettiği iki ayrı açık anahtarı gönderir.
- Cihazlar bu anahtarları birbirlerinin zannederek şifreli iletişime başlar. Ancak sunucu bir taraftan gelen mesajları çözüp, depolayıp, şifreleyip diğer tarafa yollamaktadır.
Bunu engellemenin yolu, iki tarafa da istenen açık anahtarların iletildiğini bir şekilde doğrulamaktır. Bunun için signal uygulamasında güvenlik numarası(safety number) özelliği mevcuttur.
Güvenlik numarası, sizin açık anahtarlarınızdan üretilen bir dizi sayıdır. QR kod aracılığıyla, konuşma ile veya iki cihazın ekranlarından göz ile kontrol edilerek bu numaranın iki cihazda aynı olduğu doğrulanabilir. Görüştüğünüz bir kişiyle güvenlik numarası kontrolünü yaptıktan sonra sunucunun anahtarlarınızı birbirinize doğru olarak ilettiğinden emin olabilirsiniz.
Bu açıdan bakıldığında, iki cihazdaki uygulamalarda ve işletim sisteminde bir açık olmaması kaydıyla, üçüncü bir kişi veya şirketin izlemesi olmaksızın gizli bir mesajlaşma yapmak mümkündür.
Peki Açık Kaynak Kod ve Uçtan Uca Şifreleme Bir Araya Gelince Neler Değişiyor?
Bir platformun açık kaynak kodlu olması ve uçtan uca şifreleme kullanması konularını inceledik. Peki bu ikisi bir araya geldiğinde nasıl bir durum oluşuyor?
Bu iki konu arasındaki bağlantının oldukça önemli olduğunu düşünüyorum. Çünkü bir uygulama kapalı kaynak kodlu ise, uçtan uca şifrelemeyi güvenli ve doğru şekilde yaptığından emin olmamız daha zordur. Bunu, ancak elimizdeki uygulamaların nasıl bir algoritma kullandığını tersine mühendislik (Reverse engineering) yoluyla anlamaya çalışarak yapabiliriz. Böyle bir çalışmayı yapmak da bu yazılımı üreten şirketin çıkarlarına ters düşeceğinden, ancak gönüllüler tarafından yüksek bir efor harcanarak yapılabilir, ve emin olmak için yazılımın her versiyonu için tekrarlanmalıdır.
Ancak açık kaynak kodlu bir platform için durum farklıdır. Örneğin Signal protokolünün nasıl çalıştığının detayları, kodlarının açık olmasının yanında, herkese açık olacak şekilde yazılı hale getirilmiştir. Dolayısıyla şu anda yeterli bilgiye sahip olan herkes signal platformunu sadece kendi cihaz ve bilgisayarlarına kurup kullanabilmekle kalmayıp, nasıl çalıştığını anlayabilmekte, açıkları olup olmadığını denetleyebilmekte ve katkıda bulunabilmektedir. Bu nedenle, kapalı kaynak kodlu bir platformun uçtan uca şifreleme kullandığını beyan etmesi ile açık kaynak kodlu bir platformun bunu belirtmesi arasında gizlilik ve güvenlik açısından farklılıklar vardır.
Peki Ben Veri Güvenliğimi Sağlamak İçin Ne Yapabilirim?
Bu makalede, veri güvenliğini ve gizliliğini sağlamak için elimizdeki tek yolun kuruluşların beyanlarına dayanarak seçim yapmak olmadığını, elimizde daha güçlü, kırılması zor matematiksel yöntemlere dayanan araçların ve açık kaynak kodlu yazılımın sunduğu güvenin de olduğunu ifade etmeye çalıştım. Gelecekte bizlerin, elimizde bulunan bu yöntem ve araçların farkına vardıkça ve olanak buldukça bunları daha çok tercih edeceğimize, kullanacağımıza ve verimizin kontrolünü ve gizliliğini kendi elimize alacağımıza, bu yolla şu anda oldukça yaygınlaşmış olan kişiye yönelik analiz ve profil oluşturma çalışmalarının biraz da olsa önüne geçileceğine inanıyorum. Bu ancak, bizim uygulanan yöntemler ve çözüm yolları ile ilgili bilgi edinmemiz ile mümkündür.