Kriptografi
Simetrik ve Asimetrik Şifreleme Algoritmaları
Siber Güvenlik sektöründe çalışmaya başladığım ilk zamanlarda bazı konular kafamda pek yer edinmiyordu. Bu konuları gördüğüm zaman üstüne eğilip tekrar tekrar çalışıyordum ancak yine de zihnimde tam bir şablon oturmuyordu. Farklı kişilere bu konuyu sorduğumda karışık cevaplar almaya devam ediyordum. İşte bu konulardan biri de şifreleme algoritmalarıydı. Simetrik ve Asimetrik Şifreleme algor...
Siber Güvenlik sektöründe çalışmaya başladığım ilk zamanlarda bazı konular kafamda pek yer edinmiyordu. Bu konuları gördüğüm zaman üstüne eğilip tekrar tekrar çalışıyordum ancak yine de zihnimde tam bir şablon oturmuyordu. Farklı kişilere bu konuyu sorduğumda karışık cevaplar almaya devam ediyordum.
İşte bu konulardan biri de şifreleme algoritmalarıydı. Simetrik ve Asimetrik Şifreleme algoritmaları zor bir konu olsa da günlük hayatta aslında çoğu yerde karşımıza çıkar fakat farkına varmayız. Benim gibi bu konuyla ilk defa karşılaşanlar veya zihninde bu konu tam oturmayanlar için basitleştirerek aktarmaya çalışacağım.
Öncelikle şifrelemeden başlayabiliriz. Çokça duyduğumuz bu kavramı siber güvenlik dünyasında birçok amaç için kullanıyoruz. Sadece verinin güvenliği için değil, verinin sahibinin doğrulanması veya verinin değişmediğinin kanıtlanması için de kullanabiliyoruz. Dolayısıyla şifreleme aslında siber güvenlikte çok büyük bir öneme sahiptir.
Basitçe şifrelemenin nasıl çalıştığına da bir göz atmamız gerekiyor. Öncelikle veri gizliliği açısından bir örnek verecek olursak, bendeki verinin farklı biri veya makine tarafından görülmemesini isteyebiliriz. Arkadaşımla telefonda konuşurken annemden sakladığım bir konu varsa, orada hemen o konunun yerine geçecek bir ifade kullanırım. "Bugün bisiklete binmiyor muyuz?". Halbuki annesinin istemediği bir bilgiyi ondan saklıyordur. Bu şekilde kodlarla (code) şifreleme yapabileceğimiz gibi şifreleme yöntemleri (cipher) ile de verimizi gizleyebiliriz. Çoğumuzun bildiği gibi antik dönemlerden beri yazışmalarda şifreler kullanılıyordu ve çok basit bir algoritma kullanılan durumlar da vardı. Ceaser cipher olarak adlandırılan bu algoritmada basit bir şekilde göndereceğimiz mesajdaki harfleri alfabedeki konumlarına göre değiştirip karşı tarafa gönderebiliyorduk. (1) Örneğin "ABC" mesajını hiç harf değişikliği yapmadan göndereceğimize, alfabede bir harf kaydırarak "BCD" şeklinde gönderebiliriz. Dolayısıyla ilgili mektup karşı tarafa ulaşıncaya kadar birinin eline geçse bile eğer bu algoritmanın metodunu bilmiyorsa, o kişi bu mesajı okuyamıyordu.
Şifrelemenin konseptinde, elimizde hep bir tane mesaj, bir tane anahtar (key) ve yöntem (algoritma) olacak. Sonucunda da bize şifrelenmiş bir mesaj (veri) verecek. Bu mesajı da şifreli mesaj (ciphertext) olarak adlandırıyoruz. (2)
Yani Romalı imparator "Caeser" şifreleme metodunu kullanarak bir mesaj iletmek istediğinde şu şekilde kriptolojiyi kullanmış oluyordu. "CAESER" kelimesi bizim şifrelenmemiş mesajımızdı, bir tane de anahtar (key) gerekiyordu. Burada seçilen anahtara göre şifrelenecek harfin alfabede kaç sıra kaydırılacağı belirlenmiş oluyordu. Diyelim ki anahtar (key) D harfi olursa (yani alfabede 4. sıradaki harf) şifrelenmemiş mesajdaki kelimeleri 3 harf kaydırarak iletiyordunuz. (3) "CAESER" kelimemiz D anahtarı ve algoritmamızla birlikte “FDHVHU” kelimesine dönüşüyordu. (4)
Şimdi biraz daha konunun detayına girelim. Neden simetrik ve asimetrik diye bu algoritmaları ayırıyoruz? Birlikte bakalım:
Simetrik şifreleme yüzyıllardır kullanılan bir yöntem. Bir örnek olarak yukarıda bahsettiğim "Ceaser Cipher"'ı örnek olarak verebiliriz. Yani bizim mektubumuzdaki şifresiz yazıyı hangi anahtarla (key) şifreli yazıya çevireceğimizi hem alıcı hem gönderen biliyor. Dolayısıyla bizim elimizdeki gizlilik içeren mesajı şifrelerken de o şifreyi çözerken de aynı anahtarı kullanıyoruz. Hem alıcı hem de gönderici aynı anahtar (key) kullanıyorsa bunu biz simetrik şifreleme yöntemi olarak adlandırıyoruz. (5) Bizim 5 ekleyip karşı tarafında 5 çıkarması gibi düşünebilirsiniz.
İkinci Dünya Savaşı'ndan sonra ise bilgisayar çağı başlamış oldu. Burada artık simetrik algoritmalar şifreleme için yetersiz kalmaya başladı. Almanların kurguladığı Enigma gibi örneklerden de hatırlayacağımız gibi şifreli metinler çözülmeye başlanmıştı. Ancak 1970'lerde simetrik anahtarlar kullanmadan da veri gizliliğini sağlayabileceğimizi anladık.
İşte yeni geliştirilen bu şifreleme sistemine asimetrik dememizin sebebini ise kolayca tahmin edebiliriz. Bu sefer veriyi şifrelerken (encrpytion) ve şifreyi çözerken (decryption) kullandığımız anahtarlar (key) farklı yani asimetrik olacak. Burada da karşımıza iki tane anahtar kavramı çıkıyor. Bunların birini özel (private) anahtar diğerini de genel (public) anahtar olarak adlandırabiliriz.
Caeser'ın 2000 yıl geriden zaman makinası ile günümüze geldiğini düşünelim. Artık bu çağa ayak uydurmak isteyecektir. Mesajlarını da internet yoluyla şifreleyerek göndermek istiyor. Mesajlarını göndermek için şimdi çok daha zorlu asimetrik şifreleme algoritmaları veya algoritmaları kullanan web sitelerini kullanabilir. Burada mesajı gönderirken alıcının genel anahtarı (receiver public key) ile mesajı şifrelerken, karşı tarafındaki alıcı bu mesajı alıcıya özel anahtar (receiver private key) ile açabiliyor. Yani her iki anahtarın farklı daha doğrusu asimetrik olduğu durumda da şifrelemeyi veri gizlemeye yardımcı olarak kullanabiliyoruz.
İşte asimetrik şifreleme algoritmasının güzelliği de buradan kaynaklanıyor. Mesajı gönderecek kişilerin veya uygulamaların sahip olduğu genel anahtar (public key) kötü niyetli bir kişi tarafında ele geçirilse bile, ilgili mesajın çözülmüş (decrypted) içeriğine ulaşamıyorlar. Dolayısıyla simetrik şifreleme algoritmasındaki gibi anahtar ele geçirilse bile, asimetrik anahtar kullanıldığında daha güvenli olabiliyorsunuz. Fakat eğer kötü niyetli bir kişi bu yapıdaki özel anahtarı (private key) ele geçirirse bu hepimiz için kötü bir haber olacaktır. Bu yüzden bu özel (private) anahtarların iyi bir yöntemle saklanması çok önemlidir. Asimetrik şifreleme için verilen klasik örnek ise asma kilittir. Asma kilidi (public key) eline alan herkes bunu kilitleyebilir ancak sadece anahtara (private key) sahip olan kişi açabilir.
Bahsettiğim asimetrik yöntemle birlikte aslında modern kriptografi ve günümüzdeki birçok şifreleme algoritmalarının da temelleri de atılmış oldu. Şu anda çoğu internet sitesine giriş yaparken verilerimizin ve web sitesi ile aramızdaki trafiğin şifreli bir şekilde aktarılmasını asimetrik ve simetrik algoritmalara borçluyuz.
Yine bir çoğumuzun bildiği SSL/TLS protokolleri bu algoritmalar sayesinde veri gizliliği, veri sahibinin doğrulanması, verinin değişmediğinin kanıtlanması (bütünlüğü) gibi özellikleri sağlayabiliyor.
Şimdi bir TLS veya şifreli HTTP kullanan bir web sitesini kendi bilgisayarımızdaki tarayıcımızdan gittiğimizi düşünelim. Tüm trafiğin şifreleme algoritmalar kullanılarak şifrelendiğini biliyoruz. Tüm trafikte kullanılacak bir simetrik anahtarın oluşturulması için bir SSL/TLS Handshake (El Sıkışma) adımına ihtiyaç var. Burada da basitleştirdiğimizde 3 adım var:
1. Tarayıcınızda https:// ile başlayan ilgili web adresini yazıp ulaştığınız zaman tarayıcı öncelikle web sunucusuna bir "Hello" paketi gönderir. Gönderilen bu paketle sunucunun açık anahtarı (public key) ve hangi şifreleme algoritmalarını desteklediği sorulur. Aynı zamanda bu paketle istemci kendi desteklediği algoritma bilgileri gibi birtakım bilgileri sunucuya gönderir.
Sunucu da buna karşılık kendi "Hello" paketinde websitenin genel anahtarını (public key) ve desteklediği şifreleme algoritmalarını gönderir.
2. TLS/SSL handshake'teki amaç bir ortak anahtar oluşturmaktır. Bu anahtar oluşturulurken trafiğin arasına giren bir sistemin olmadığının teyidi için asimetrik algoritmaları kullanıyoruz.
Yani web sunucusu "Hello" paketi gönderdikten sonra, (simetrik anahtar oluşumunda kullanacağı) matematiksel parametreleri web tarayıcısına göndermeden önce dijital olarak imzalar (Digital Signature).
Bu dijital imzalama sürecinde teknik olarak asimetrik bir algoritma kullanır. Eğer RSA asimetrik şifreleme algoritmasını burada kullanıyorsa, sunucunun kendi özel (private) anahtarı ile göndereceği matematiksel parametreleri şifrelemiş (daha doğrusu kendisi imzalamış) olur. Aslında bir nevi bu göndereceğim verinin sahibi benim demiş olur. Çünkü o özel (private) anahtar o sunucu veya servisi veren sunucular haricinde hiç bir yerde teknik olarak bulunmamalıdır. (6)
3. adımda web tarayıcı karşı taraftaki sunucudan aldığı matematiksel parametreleri, imzalanmış veriyi ve sunucunun genel (public) anahtarını kontrol eder.
İşte bu imzalanmış (özel anahtarla şifrelenmiş) veriyi de web sunucusunun genel (public) anahtarı ile doğrulayarak içeriğin sahibini doğrular. Web sunucusunun gönderdiği mesajın gerçekten ondan gelip gelmediğini, ilgili imza içeriğini sunucunun gönderdiği verilerle karşılaştırarak anlamış olur.
Sonuç olarak, web sunucusunun kimliğini asimetrik bir algoritma (digital signature algorithm) kullanarak doğrulamış olur. (Buna ilaveten matematiksel parametrelerin paylaşımı ve simetrik anahtar oluşumunda da ayrı bir asimetrik algoritma kullanır, örnek "Diffie Hellman Key Exchange Algorithm")
Bundan sonraki süreçte her iki taraf paylaştığı matematiksel parametreler ve rastgele (random) sayılarla bir simetrik anahtar oluştururlar.
Sonuçta tarayıcının oluşturduğu simetrik anahtar (session key) web sitesi sunucusunun da elindedir. Bu simetrik anahtar da ilgili web sitesine web tarayıcısından gittiğiniz zaman veri gizliliği için kullanılacaktır.
Asimetrik algoritmalar kullanarak tüm website trafiğimizi şifreleyecek bir simetrik anahtar oluşturduk. Gördüğünüz gibi hem simetrik hem de asimetrik algoritma kullanarak web site trafiğinin güvenliğini sağlamış oluyoruz. Burada aklımıza gelen ilk soru, asimetrik şifreleme yeteneği hali hazırda varken neden simetrik anahtar oluşturduğu olacaktır. Bu sorunun cevabı ise tamamen performansla ilgili. Simetrik şifreleme algoritmaları asimetrik şifreleme algoritmalarına göre oldukça hızlıdır. TLS Handshake asimetrik şifreleme kullanılarak simetrik şifreleme anahtarı oluşturulur ve verinin şifrelenmesi için üretilmiş olan bu simetrik anahtar kullanılır.
Buna ilaveten asimetrik algoritmalar, web sitesine yapılan trafikte kimlik doğrulama (authentication), anahtar değişiminde ve veri bütünlüğünü korumak için kullanılabiliyor.
Daha da detaya indiğimizde farklı teknik detayların görseldeki gibi olduğunu göreceksiniz. (7) Ancak bu yazıda basit bir seviyede konuyu tutmamız bu konuları yeni araştırmaya başlayan biri için daha uygun olacağını düşünüyorum.
Günlük hayatta bu algoritmaları neredeyse tüm internet deneyimimizde kullanıyoruz. En başta girdiğimiz web sitelerinden güvenli iletişimi sağlayanlarda bu algoritmaların kullanıldığını görebilirsiniz. Yani web üzerinde gezinirken girdiğimiz sitelerden HTTPS protokolü ile çalışanlarda web tarayıcısı ve web sunucusu arasında güvenli bir hat kuruyor. Bu hat üzerindeki trafiğin de korunması için bu algoritmaları kullandığımızı biliyoruz. E-devlet platformuna girdiğimizde web tarayıcı üzerinden aramızdaki güvenli trafiğin hangi güvenlik algoritmaları ile sağlandığını tarayıcı araçlarından görebiliyoruz.
(Chrome web tarayıcısı üzerinde "More tools" veya “Diğer Araçlar” menüsüne girdiğinizde "Developer tools/Geliştirici araçları" seçeneği altındaki "Security/Güvenlik" sekmesinde hangi algoritmaları kullandığının detayı bulunuyor) (8) (Firefox web tarayıcısı üzerinde ilgili URL'in sol yanındaki kilit ikonuna tıklayıp, sertifikanın detaylarındaki “daha fazla bilgi” menüsünden bu bilgiye ulaşabilirsiniz.) (9) (10)
E-devlet web sitesine baktığımızda tarayıcı detaylarında bu algoritmaları kullandığını görebiliyoruz: TLS_RSA_WITH_AES_128_CBC_SHA
Burada RSA asimetrik algoritmasını anahtar değişimi (key exchange) ve kimlik doğrulama için kullanılıyor. AES simetrik algoritmasının da veri gizliliği ve şifreleme için kullanıldığını biliyoruz ve burada da görebiliriz. AES algoritmasına ilaveten HMAC-SHA1 algoritması da veri bütünlüğü için kullanılan algoritmalardan biridir.
Web servisi sağlayan sunucu, web tarayıcı ile anlaştığı bu algoritmalar sayesinde verinin gizliliği ve kimlik doğrulamasını (authentication) sağlayabiliyor.
Dolayısıyla simetrik ve asimetrik algoritmalarla aslında iç içeyiz. Günlük web gezinmelerimizin çoğunda bunları kullanıyoruz. Bu yazıdaki bilgilerle biraz da olsa bu şifreleme yöntemleri hakkında farkındalığımızın artacağını düşünüyorum. İlaveten şifreleme algoritmaları nasıl çalışıyor diye merak ettiğimizde çalışma şekillerinin kafamızda daha da netleşeceğini umut ediyorum.
Herkese güvenli internet gezinmeleri...
Referanslar
(2)https://library.ahima.org/~/media/bokImages/1/Chunk%205/104088.ashx?la=en
(3) Ingilizce alfabe: A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S, T, U, V, W, X, Y, Z
(4) https://www.cs.ox.ac.uk/stephen.drape/materials/secret.pdf
(5)https://miro.medium.com/max/1400/1*w4EmE01y0zk3lqpUBHaWHg.png
(6)https://www.thesslstore.com/blog/explaining-ssl-handshake/
(8) ConnectionCipherSuite.png
(9) (Chrome web tarayıcısı üzerinde"More tools" menüsüne girdiğinizde "Developer tools" seçeneği altındaki "Security" sekmesinde hangi algoritmaları kullandığının detayı bulunuyor)
(10) (Firefox web tarayıcısı üzerinde ilgili url'in sol yanındaki kilit ikonuna tıklayıp, sertifikanın detaylarındaki diğer bilgilerden bu bilgiye erişebilirsiniz.) MozillaCipherSuite1.png