Bilgi güvenliği ve kriptografi
İnternette nasıl güvenle kredi kartımla alışveriş yapabiliyorum.
Temel kavramlar
Bilgi çağı ve internetin yaşamımızdaki her şeyi değiştirmesi aslında bilginin mekandan bağımsız olabilmesi ve güvenli şekilde iletilebilmesi ile mümkün olmuştur. Bugün ABD’de ya da dünyanın herhangi bir noktasındaki Internet’e konan bir bilgiye tek tıkla sahip olabiliyoruz. Bilginin bu kadar hızlı ve maliyetsiz iletilebilmesi ve herkes tarafından üretiliyor ve değişilebiliyor olması bu bilginin doğruluğu ve gerçekten ürettiğini düşündüğümüz kişi tarafından üretilmiş olduğuna emin olmamızı gerektiriyor. Internet’te dolaşan yalan yanlış bilgilerin henüz önlenememiş olmasına rağmen bir bankaya bağlanıp parasal işlemleri güven içinde yapabiliyoruz. Ya da bir e-ticaret sitesinden alışveriş yaparken kredi kartı bilgilerimizin güvende olduğunu biliyoruz. Tüm bunları sağlayan ve bilgi çağını bu kadar önemli kılan teknoloji ise bu bilgilerin iletilmesi sırasında kullanılan şifreleme teknolojileridir. Şimdi gelin en çok kullanılan bu teknolojileri birlikte öğrenelim ve matematik biliminin insanlığa nasıl yeni bir çağın kapılarını açtığını görelim.
Simetrik anahtarlı şifreleme
Aslında savaş sırasında gizli bilgilerin düşman eline geçmemesi amacı ile geliştirilen şifreleme sistemlerinin temelinde göndermek istediğimiz bir bilgiyi bir anahtar ile anlaşılmaz hale getirmek yatmaktadır. Bunun çok çeşitli yolları vardır mesela bir text mesajında her bir harfi bir anahtar ile herhangi bir işleme sokmak ve çıkan bilgiyi karşı tarafa iletmek gibi düşünebilirsiniz. Çocukken oyunlarda her harfin yerine alfabenin 3 harf ilerisindeki harfi yazarak kullandığımız şifreleme gibi. Karşı taraf 3 harf kaydırma yaptığımızı bildiği için anlaşılmaz olan metni kolaylıkla çözebilirdi. Burada 3 iki tarafında bilmesi gereken ve şifrelemede deşifre açmakta da aynı sayının (anahtarın) kullanılmasını gerektiren çok basit bir simetrik anahtarlı şifrelemeye örnektir. Tabi 3 sayısını bilmeyen biri şifrelenmiş metne bakarak bunu kolaylıkla tahmin edebilir. Bu nedenle şifrelemenin başarılı olması için anahtarı bilmeyen bir kişinin metinden şifreyi çözememesi gerekir. Bu nedenle simetrik anahtarlı şifrelemede biraz daha kompleks matematik kullanılmaktadır :)
En çok kullanılan modern simetrik anahtarlı şifreleme algoritmaları Blowfish, AES, RC4, DES, RC5, ve RC6 olarak sıralanabilir. Bunların içinde AES-128 ve AES-256 günümüzde ençok tercih edilenlerdir. Buradaki 128 ve 256 sayıları şifrelemenin bloklar halinde yapılmasından gelmektedir. Örneğin AES-128 şifrelenecek olan mesajdan (plaintext) 128 bit uzunluğunda bir blok alır ve onu belli uzunluktaki anahtarı ile (128,192 ya da 256 bit uzunlukda olabilir) şifreler ve yine 128 bit olan karmaşık anlaşılmaz bir mesaja çevirir. Bu şifreli mesaja ciphertext denilir. AES algoritması Xor fonksiyonu ve bitlerin yerlerinin değiştirilmesi ile anahtar olmadan geri dönülemez bir şifreleme algoritmasıdır. SubBytes, ShiftRows, MixColumns, XorRoundKey denilen adımları defalarca metne uygular uygular. Detaylarını merak edenler için
Akılda tutulması gerekenler:
- Tek bir anahtar hem şifrelemede hemde şifre çözmede kullanılır.
- Anahtara sahip olanlar şifreyi çözebilir bu nedenle anahtarın karşı tarafa iletilmesi için güvenli bir yol bulunması gerekir. (Anahtar değişimi)
Kaynak:
https://www.kavaliro.com/wp-content/uploads/2014/03/AES.pdf
Asimetrik Anahtarlı Şifreleme
Bu şifreleme yönteminde iki farklı ama aralarında matematiksel bir ilişki olan anahtardan sözediyoruz. Bu anahtarlar büyük asal sayılar. Ve şifreleme bu anahtarlar ile yapılıyor. Mesajı ileten de mesajı alanda kendilerine ait 2 anahtara sahip olmaları gerekiyor. Bu anahtar çiftlerinden birisi açık anahtar yanı public key ve Internet’te paylaşılmasında bir sakınca yok. Diğer anahtar ise gizli/özel anahtar private key ve kesinlikle sizden başka birinin eline geçmemesi gereken anahtar. Karşı tarafa gizli bir mesaj göndermek için o kişinin açık anahtarını alıyorsunuz (bu açık anahtar zaten herkesin ulaşabileceği gizli olmayan bir anahtar ve gizli olmayan kanallarla kişiler arasında değişilebilir.) ve mesajınızı bu anahtarla şifreliyorsunuz. Bu andan itibaren gezegende o mesajın şifresini açabilecek tek kişi özel anahtara sahip olan kişidir. Şifrelenmiş mesaj yine açık kanallardan karşıya iletilebilir çünkü şifreli mesajdan normal mesaja dönmek özel anahtar olmadan çok uzun ve pahalı bilgisayar gücü gerektirmektedir. Bu anahtar çiftlerini oluşturmak için en çok kullanılan algoritma RSA algoritmasıdır. Tabi bir kişinin açık anahtarından onun gizli anahtarına ulaşmak da mümkün değildir. RSA algoritması temel olarak üst alma (power) ve mod işlemlerini baz alarak asal sayılar olan bu özel anahtarlarla şifreleme yapmaktadır. Detaylar için Kaynak:
Bu asimetrik şifreleme algoritması anahtarın gizli kanaldan paylaşılma şartını ortadan kaldırdığı için internet ortamında güvenli işlemler yapmamızı sağlamış ve bir devrimin başlangıcı olmuştur. Bu algoritmayı bulup geliştiren ve insanlığa sunan Whitfield Diffie and Martin Hellman, Ronald Rivest, Adi Shamir, Len Adleman ve James H. Ellis e şükranlarımı sunuyorum. Tarihçi David Kahn, açık anahtarlı kriptografiyi “Rönesans’ta polialfabetik ikamenin (https://en.wikipedia.org/wiki/Polyalphabetic_cipher) ortaya çıkmasından bu yana alandaki en devrimci yeni kavram” olarak tanımlamıştır.
Akılda tutulması gerekenler:
- Birbiri ile ilişkili 2 anahtar çifti kullanılır.
- Anahtarlardan biri gizli diğeri açıktır.
- Açık anahtarın paylaşılmasında bir sakınca yokken gizli anahtarın saklı tutulması esastır.
Hash fonksiyonu nedir ?
Buna sindirim(digest) fonksiyonu da denilmektedir. Bu fonksiyon içine aldığı bilgiyi -ki bu bilgi istenilen uzunlukta olabilir- sabit uzunluk da bir başka veriye dönüştürür. Pek bir işe yaramayan bir fonksiyon gibi görünse de Hash fonksiyonu herhangi bir fonksiyon değil kriptografik bir fonksiyondur. 3 ana özelliği içinde bulundurması gerekir. 1- Aynı bilgi verildiği sürece aynı hash oluşur ama farklı iki bilgiden asla aynı hash oluşmamalıdır. 2- Girdi verisinde ufak bir değişiklik olsa bile sonuç olarak üretilen Hash çok fazla değişikliğe uğrar. 3- Hash sonucundan baştaki girdi verisine ulaşmak mümkün değildir. Hash fonksiyonu çaldığımız bir şarkının herhangi bir yerinden kısa bir süre dinlese bile ne olduğunu anlayan shazam ya da torent’den indirilen dosyaların hangi parçasının nerede olduğunun belirlenmesine ve hatta bitcoin’in temeline kadar çok fazla yerde kullanılmaktadır.
Dijital imza nedir?
Bazı durumlarda bilginin şifrelenmesi kadar kaynağının doğrulanması da önemli olmaktadır. Bir bilginin gerçekten yolladığını düşündüğümüz kişiden mi yoksa başka birinden mi geldiği ya da bağlandığımız site gerçekten o bankanın server’ı mı yoksa arada kötü niyetli kişilerin sahte sitesine mi bağlanıyorum? Gibi şüphe uyandıran durumlar herkese açık olan ve bilginin bir uçtan başka bir uca gidebilmesi için onlarca bilgisayar ve network cihazından geçerek yolculuk ettiği bir mecrada önem arzetmektedir. Bu şüpheleri ortadan kaldırmak için temeli asimetrik kriptografiye dayanan dijital imzalama teknolojisi geliştirilmiştir. Bir mesajı şifrelemek de anahtarın tek bir kişide olduğu gerçeğinden yola çıkılarak kaynağının doğru olduğuna bizi inandıracaktır. Ama şifreleme görece uzun süren bir süreçtir ve çok uzun ya da çok kısa mesajlarda kimlik doğrulamak için kullanılması pratik olmayabilir. Bunun yerine kendini gerçekten kendisi olduğunu ispatlamak isteyen kişi ya da dokumanı gerçekten kendisinin yazdığı doküman olduğunu karşı tarafa göstermek isteyen kişi dokumanı Hash fonksiyonuna sokarak sindirilmiş bir halini oluşturur. (örneğin SHA256 hash fonksiyonu kullanılırsa doküman hangi uzunluk da olursa olsun çıkan sonuç 256 bit uzunluk da olacaktır) Daha sonra bu sindirilmiş halini kendi gizli anahtarı ile şifreleyen kişi bu dokumanı imzalamış olur. Dokumanı ve bu imzayı karşı tarafa gönderdiğinde bunu doğrulayacak kişi imzayı karşı tarafın açık anahtarı ile açar ve hash bilgisine ulaşır. Dokumanı hash fonksiyonuna tabi tutar ve iki hashin aynı olup olmadığına bakar. Aynı ise bu dokumanı imzalayan kişiden ve dokumanın bir karakterinin bile değişmediğinden emin olur. (Hash fonksiyonunun yapısı gereği aynı hashin oluşabilmesi için dokümanlarının her bitinin aynı olması gerekir bu da dokumanın oynanmadığını kanıtlar.)
Sertifika Nedir?
Asimetrik şifrelemede karşı tarafın açık anahtarını alıp şifrelemeyi onunla yaptığımızı söylemiştik. Kötü niyetli bir kişinin araya girdiğini ve kendisini karşı tarafmışçasına size tanıttığını ve kendi açık anahtarını size verdiğini düşünelim. Şifrelemeyi bu anahtarla yapacağımız için şifrelenmiş mesajı da karşı tarafa ilettiğimizde kötü niyetli kişi kendi özel anahtarı ile mesajı açarak bizim hassas bilgilerimizi ele geçirmiş olacaktır. Peki bağlandığımız sitenin gerçekten ilişki kuracağımız taraf olduğundan ve alacağımız açık anahtarın gerçekten onun anahtarı olduğundan nasıl emin olacağız? İnternet dolandırıcılığının büyük bir kısmı insanları banka ya da e ticaret sitesi imiş gibi gösteren sahte sitelere girmelerini sağlamak üzerinden yapılmaktadır. Burada dijital sertifikalar devreye girmektedir. Dijital sertifika bağlanılan sunucunun tanıtıcı bilgileri ile açık anahtarının birleşiminden oluşan bir dosyadır. Burada akla gelen soru kötü niyetli kişilerin de sahte sertifika oluşturup yine başkasının yerine geçme işini gerçekleştirebilecekleridir. Bu durumu engellemek için sertifikalar üst güvenilir bir otorite (Certificate Authority kısaca CA) tarafından imzalanarak doğruluğu garanti altına alınır. Bu nedenle SSL sertifikalarını bir ücret ödeyerek oterite (Godady, Symantec, Comodo gibi) den imzalanmış olarak alırız. Sonuçta güvenilirliğinden emin olduğumuz bir otoritenin (CA) imzaladığı sertifika bize karşı tarafın ticari kimliği ile ona ait açık anahtarının birleşiminin doğruluğunu kanıtlar.
HTTPS nedir?
İnternetin herkese açık bir ağ olduğunu ve bilginin bir uçtan diğer uca gitmesi için birçok başka cihazdan geçtiğini ve yönlendirildiğini söylemiştik. İnternet üzerinde ulaşılabilir olan her noktanın IP adresi mevcuttur ve bu adres sadece o bilgisayara aittir. Aynı şekilde IP adresleri daha kolay hatırlanması için akılda kalıcı isimlere çevrilmiştir buna DNS denilmektedir. Sonuç olarak internet üzerinde bir sayfaya bağlanmak için o sayfanın adresini tarayıcımıza yazarız. İletilen bilginin başkaları tarafından ulaşılamaması ve bağlandığınız kişinin gerçekten o kişi olduğuna emin olmanız için şifrelenmesi gerekir. HTTPS protokolü iki tarafında bildiği ve o anda üretilmiş olan bir anahtar ile bilgilerin simetrik şifreleme ile şifrelenip karşı tarafa iletildiği bir protokoldür. Simetrik şifreleme asimetrik şifrelemeye nazaran daha hızlıdır. Bu nedenle anahtar değişiminde asimetrik şifreleme anahtarın iki tarafta da var olmasından sonra haberleşmede simetrik şifreleme kullanılır.
Akılda tutulması gerekenler:
- Kullanılan şifreleme simetrik anahatarlı şifrelemedir.
- Anahtar o anda rastsal olarak oluşturulur.
- İki tarafta da aynı anahtar mevcuttur.
Peki ama herkese açık bir ağda simetrik şifrelemeyi yapmak için kullanılacak gizli anahtar karşı tarafa güvenle nasıl ulaştırılacak. Burada TLS ve el sıkışma protokolü devreye girmektedir.
TLS nedir?
Hepimiz güvenlik sorunu olan sitelerle karşılaşmışızdır. Günümüz modern tarayıcıları bizi bu konuda uyarmaktadır. Bu tür sitelerin SSL sertifikaları bulunmamakta ya da süresi dolmuş sertifika kullanmaktadırlar. Ve bu sitelere TLS denilen güvenlikli bağlantı sağlanamaz. Peki nedir TLS?
TLS’in açılımı transport Layer Security yani taşıma katmanı güvenliği anlamına gelir. Eskiden SSL olarak bilinen TLS, bir web sunucusu ile bir tarayıcı arasındaki bağlantıyı şifreli ve gizli tutar. TLS ayrıca ziyaretçilere bir Dokümanının yayınlandığı ana bilgisayar adının sahibi olduğunuzu kanıtlar.
TLS 1.2 El sıkışma Protokolü (Handsake)
Tarayıcınıza adresi yazdığınızda örneğin [youtube.com](http://youtube.com) (get request) bana yazdığım adresteki sayfayı ver demiş olursunuz. Bu noktada karşı server size sayfa bilgisini göndermeden önce kendi sertifikasını yollar. Cevap şuna benzer: Hey al bak bu benim ismim ve açık anahtarımın içinde olduğu ve Google CA tarafından imzalanmış olan sertifikam der. Karşılık olarak tarayıcı hımm tamam google CA ya güvenirim ben de onun açık anahtarı var bakalım gönderdiğin sertifikayı gerçekten o mu imzalamış diyerek sertifikayı kontrol eder. Bundan sonra karşı taraf gerçekten söylediği kişi ise ve sertifikası geçerli bir sertifika ise (Sertifikalar belirli süreliğine verilir ve düzenli olarak yenilenmeleri gerekir) tarayıcı bir gizli anahtar üretir. (kişinin kendi gizli anahtarı değil o an için simetrik şifreleme için kullanılacak anahtar) bu anahtarı karşı tarafın sertifikası içinden elde ettiği açık anahtarı ile şifreleyerek youtube.com a gönderir. İnternet üzerinde bu yeni oluşturulan gizli anahtara sadece youtube.com özel anahtarı ile şifre çözülerek ulaşılabileceğinden anahtar karşı tarafa güvenle gönderilmiş olur. Bu aşamadan sonra tüm Internet’te bu gizli anahtara sahip olan sadece bu iki bilgisayar olduğu için bu anahtarla şifrelenen bilgiler bu iki uç arasında şifreli olarak iletilir ve uçlarda aynı anahtarla şifre çözülerek bilgiler kullanılır.
Araştırılabilecek diğer konular
- Elliptic curve cryptography
- TLS 1.3