Merhaba :) Bizim için çok özel olan bu sayımızda, ne zamandır yazmak istediğim bir konuyla sizlerleyim. Bu ay size, bilgisayar bilimi ve matematiğin kesiştiği noktada doğan, belki de bu iki bilimin birden esrarengiz yanını oluşturan bir alt bilim dalından söz edeceğim: Kriptoloji. Teknoloji ilerledikçe, bilgisayarlara ve özünde bilgiye olan bağımlılığımız arttıkça, bilgi güvenliğimize olan düşkünlüğümüzün de artması kaçınılmaz bir hale geliyor. Temel olarak her türlü bilgi güvenliğinin sağlanmasını amaçlayan kriptoloji, işte bu yüzden günümüzün en gözde ve en önemli bilim dallarından.

Biliyor musunuz, küçükken bir arkadaşımla sadece kendi aramızda iletişim kurabilmemiz için, sırlarımızı saklamak için, kısaca güvenli bir şekilde aramızda bilgi aktarımını sağlayabilmek için kendi kendimize bir alfabe uydurmuştuk (tabi ki küçükken bunları düşünmeyerek, tek kaygımız “kimse görmesin” idi :). Her harfin bir karşılığı vardı, alfabemizi deşifre etmek için kullandığımız bir tabloda yazardı bu karşılıklar. Birimiz oradan baka baka yazıp diğerine gönderirdik, diğeri de yine tablodan harfleri deşifre ederek mesajı okurdu. Minik not kağıdımız arada başkalarının, birazdan saldırgan olarak tanımlayacağımız kötü karakterlerin, eline geçse bile anlaşılmazdı. Bu yöntemimizin aynısı olmasa da çok benzeri, yani bir mesajı belirli bir şekilde şifreleyerek gönderme tekniği, Julius Ceaser zamanında da kullanılıyormuş. Sezar generallerine gönderdiği metinlerde, her harf için alfabede üç harf sonraki harfi kullanarak mesajını şifreliyormuş. “e-bergi” yerine “ğ-dğpıl” yazmak gibi :)

Her ne kadar Sezar'dan binlerce yıl önce Mısırlılar'ın kullandığı sıradışı hiyerogliflerin de (resim yazısı) bir çeşit kriptografi olduğu düşünülse de; kriptolojinin başlangıcı, Sezar'ın bulduğu bu “üç harf atlamalı şifreleme” olarak kabul edilir. Kriptolojinin tarihteki başka bir rolü ise ikinci dünya savaşı sırasında Almanların haberleşmede kullandığı “Enigma” makinesi ve onun Alan Turing tarafından çözülmesidir. Kriptolojinin dilbilimi açısından kökenine göz atarsak, Yunanca “Kryptos logos” olan “gizli kelime”den türediğini görürüz. Benim ve Sezar'ın kendini korumak için bilinçsizce yöneldiği bu yoldan esinlenerek, kriptolojinin de her bilim dalı gibi insan ihtiyaçlarından ortaya çıktığını söyleyebiliriz. Ayrıca kriptolojinin kaynağı salt bilgi olduğu için, sayısız ve sınırsız uygulama alanı vardır; sadece yazılı mesaj değil, görüntü, ses ve aklınıza gelen her türlü bilgi şifrelenebilir dolayısıyla kriptolojinin konusudur.

Kriptografi ve Kriptoanaliz

Kriptoloji (şifre bilimi veya iletişimde gizlilik bilimi olarak da tanımlanabilir) kendi içinde iki alt kola ayrılır. Bunlardan ilki kriptografi, Yunanca “Kryptos graphen”, “gizli yazı” anlamına gelir ve şifrelemeye (encryption) dayanır. Bir mesajın güvenli bir şekilde dönüşümünü sağlamak kriptografinin görevidir. Buna dayanarak kriptografi (arkadaşımla kurduğumuz kriptosistemden örnekler vererek anlatacağım);

  • gizlilik (secrecy veya privacy): kimse notumuzu anlamamalı,
  • bütünlük (integrity):notu arkadaşıma verirken araya başka biri girip notu değiştirmemeli,
  • reddedilmezlik (non-repudiation): “hayır o notu ben yazmadım ki sana” diyememeliyim,
  • kimlik doğrulama (authentication): biri, arkadaşımın kılığına girip nota ulaşmaya çalışmamalı,

unsurlarını kapsar. Diğer alt kol olan kriptoanaliz ise şifre çözmeyi (decryption) temel alır. Daha çok şifre kırma, dili çözümleyip şifreye ulaşma, harflerin frekanslarına dayanarak istatistiksel çözümlemeler yapma, çeşitli saldırılarla ele geçirilen şifreyi kriptografik teknikleri ters kullanarak çözme ve kriptografik sistemlerin güvenliğini inceleme gibi konularla ilgilenir. Kriptografinin belirttiğim alanlarını düşünürsek, bunlara karşılık kriptoanalizde iletilmeye çalışılan bilgiyi dinleme, değiştirme, engelleme ve oluşturma yollarına ulaşmayı hedefler. Kısaca kriptografi yapıcıdır, kriptoanaliz yıkıcıdır. Ayrıca, kriptolojiyle sadece tarihsel gelişimi açısından ilgisi olan “steneografi” ise bilgiyi saklayarak koruma altına alma bilimidir ve kriptolojiden daha farklı bir alandır.

Birazdan anlatacağım şifreleme tekniklerinin daha iyi anlaşılması için, kriptoloji alanında terminolojimizi biraz daha genişletelim;

  • Düz metin (plaintext): Şu an okuduğunuz bu yazımız gibi, herkesin ulaşıp okuyabileceği metindir (M ile gösterelim).
  • Şifrelenmiş metin (ciphertext): Şifreli (gizli) metindir. (C ile gösterelim.)
  • Şifrelemek (encrypt): Aslında tanım kümesi M olan ve görüntü kümesi C olan bir fonksiyonun uygulanmasından başka bir şey değildir (E(M)=C).
  • Şifre çözmek (decrypt): Bu fonksiyonun ters fonksiyonunu alıp C den M e uygulanmasıdır (D(C)=M).
  • Şifre (cipher): Şifrelemek için kullanılan M’den C’ye fonksiyondur.
  • Anahtar (key): Şifreleme işlemleri için normal hayatta fonksiyonlarla uğraşmak yerine, bazı anahtarları bu fonksiyonların genel kullanımı olarak tanımlanmasıyla şifreleme rutinleştirilir. Kısaca anahtar, bir bilgiyi şifrelemede kullanılan veri parçasıdır; sayı, harf, kelime katarı, hatta resim, her şey olabilir. Şifre fonksiyonunu anahtar argümanıyla birlikte düz metne uygulamak şifrelemeyi tamamlar. Anahtarlar olmasa, fonksiyonların çözülmesi çok basit olacağından her algoritmanın veya şifrenin anahtar çeşitlemesi de en az şifre kadar önemlidir. Ayrıca anahtarların oluşturulduktan sonra güvenliğinin sağlanması bir şifreleme için en önemli faktördür.
  • Protokol: Bir kriptografik aktivitenin bütün adımlarını, her durumda yapacaklarıyla birlikte içeren kümenin özellikleridir.
  • Algoritma: Sadece bilgiyi başka bir şekle dönüştürmede kullanılan prosedürdür. Ayrımı keskinleştirmek için, arkadaşıma gönderdiğim mesajdaki alfabe ne kadar çözülemez olursa olsun (algoritma), biri ben yazarken görürse, veya alfabenin olduğu tabloyu ele geçirirse, veya arkadaşım mesajı çözdükten sonra okursa, protokolün zayıflığından dolayı sistemimiz tamamen çöker.

Kriptosistemler

Kriptosistemleri tek tek incelemeye başlarsak, ikinci yaşımızı bile kutlamaya yetişemeyebiliriz; o yüzden şimdi sadece bunların sınıflandırılmasından söz edeceğim. Şifreleme algoritmalarına göre sınıflandırılan kripto sistemler, simetrik (konvensiyonel kriptolama sistemleri) ve asimetrik (açık anahtar kriptolama sistemleri) olmak üzere iki sınıfta incelenir. Simetrik şifreleme algoritmaları, şifreleme ve şifre çözme için aynı anahtarı kullanırken, asimetriklerde iki ayrı anahtar vardır. Bu iki anahtar genel (public) ve özel (private) anahtar olarak adlandırılır. Genel anahtar şifreleme için kullanılır, yani yanlış ellere düşmesinde bir sakınca yoktur, hatta zaten bu anahtar tüm protokol kullanıcılarına dağıtılır; ancak özel anahtar deşifre için kullanıldığından sadece ve sadece gönderilene özgüdür. Simetrik sistemlerde ise tek bir anahtar olduğundan bu anahtar gizli tutulmalıdır. Peki simetrik sistemleri düşünürsek, mesajı güvenli bir şekilde iletmek için şifreliyoruz, ama anahtarı da aynı alıcıya göndermemiz gerekmiyor mu? Anahtarın güvenliği nasıl sağlanacak? Bu yüzden anahtar çiftlerine ihtiyacımız var. Yani simetrik şifreleme algoritmaları asimetriklere göre çoğu güvenlik kriterinde yetersiz kalır, buna rağmen nadir avantajları daha hızlı olması ve donanımsal uygulamaya yatkınlığı diyebiliriz. Bir de karışık algoritmalar var, bunlar iki sistemin de artı taraflarını kullanarak hem güvenliği hem de hızı hedefler.

Sezar şifrelemesini düşünelim, üçlü harf atlama algoritmasını şöyle gösterirsek:

C = M + 3 (mod26)

Sezar’ın anahtar olarak sadece 3’ü kullanmasının üstüne simetrik bir algoritma olduğunu ekleyince, çözülmesinin çok kolay olduğunu görürüz. Bu algoritma genelleşerek:

C = M + i (mod 26)  
     0 <= i <= 25

halini almıştır, nitekim anahtarımız artık sabit değildir ve 26 çeşit anahtarımız vardır. Yine de bir şifreleme algoritması için 26 anahtar çeşitliliği güvenli olmasına yetecek bir sayı değildir, ancak en azından sabit anahtardan güvenlidir.

Simetrik kriptosistemlerin de çeşitleri vardır. Sezar’ın bu simetrik algoritması “tekli alfabetik yer değiştirme” (monoalphabetic substitution) şifreleme tekniğinin bir alt kümesidir. Bu teknik, metindeki bir harfin her şifrelenmesinde aynı harf ile yer değiştirmesine dayanır. “Çoklu alfabetik yer değiştirme”de (monoalphabetic substitution) ise bir harfin yerini her zaman aynı harf almaz. Buna örnek olarak da Enigma’yı verebiliriz. Yer değiştirme şifrelerinin dışında bir de dönüşüm şifreleri (transposition chiphers) vardır. Bunlar yer değiştirmeye ilaveten, açık metnin harflerinin sıralanmasını da değiştirir. İlk olarak Eski Yunan’da ortaya çıkan bu şifreleme, bir şeridin bir silindire sarıldıktan sonra mesajın şeride yazılmasıyla şifrelenmesi ve daha sonra aynı yarıçaplı silindire sarılarak şifrenin çözülmesinden oluşuyordu. Yer değiştirme şifrelerine göre daha güvenli olduğundan, ondan daha yaygındır. Simetrik şifreleme yöntemlerinin üçüncü bir türü ise tek kullanımlık şifreler (Vernam şifreleri)dir. Bunların kırılması imkansızdır; ama her defasında mesaj, en az gönderilen mesaj kadar uzun bir anahtar ile veyalandığı (XOR) için kullanışlı değildir. Simetrik kriptosistemlerin diğer örnekleri ise, DES, IDEA, RC2, RC4, RC5, Skipjack ve Blowfish algoritmalarıdır.

Asimetriklere ise bizim de kullandığımız RSA ve DSA algoritmalarını örnek verebiliriz. Ayrıca, El Gamal ve Diffie & Hellman anahtar belirleme algoritmaları da asimetrik kriptosistemlerdir. RSA ve DSA anahtar çiftlerinin SSH protokolünde oluşturulması ve kullanımı örneği için E-bergi şubat sayısındaki “SSH Anahtar Yönetimi” adlı yazıya bir göz atmanızı öneririm :) Karışık algoritmaların ise en güzel örneği IDEA ve RSA algoritmalarının karışımını kullanan PGP algoritmasıdır.

Kriptoanaliz ve Güvenlik

undefined

Neredeyse her algoritma veya sistem için güvenli/güvenli değil diye kıyaslama yaptık, peki güvenlilik neye göre karar veriliyor? Kriptoanalizin araştırma alanına giren bu tartışma; kriptosistemin gücünün, şifresinin kırılması için geçen zamanla doğru orantılı olması sonucuna varıyor. Mesela, Sezar şifresinin kırılması için 26 denemenin yeterli olması sistemin zayıf olduğunu kanıtlamaya yeterli. Diğer yandan, 128 bitlik anahtar kullanan PGP algoritmasının kırılması için 2128 deneme gerekli, bu da 106 şifre/sn hızdaki bir bilgisayarın neredeyse 6000 yıl boyunca denemesi demek! Kriptosistemlerin gücünün analizindeki yöntemler ise;

  • Şifreli mesaj yöntemi: Saldırgana her zaman açık olan şifreli mesajı çözmeye dayanır. Genelde “kaba kuvvet saldırısı” (brute-force) kullanılır (şifrenin tüm permütasyonlarını denemek gibi).
  • Bilinen düz metin yöntemi: Saldırgan bir şekilde gönderilen düz metnin bir parçasını biliyorsa (başlık, dosya uzantısı, vb.) bunu kullanarak metnin diğer kısımlarını deşifre edebilir.
  • Seçilmiş şifreli metin yöntemi: Saldırgan algoritmayı ve/ya anahtarı bilmese de düz metin gönderebilme yetkisine sahip olabilir. O zaman gönderdiği metni ve şifrelenmiş halini analiz ederek şifreye ulaşabilir.
  • Seçilmiş anahtar yöntemi: Protokolün bir bölümünden herhangi bir anahtarı eline geçiren saldırgan, bunu diğer bölümleri de ele geçirmek için şifrelemede kullanabilir.

Başlıca bu yöntemlerle kriptosistemleri inceleyen kriptoanalizin başka yöntemleri de var; fakat şimdilik bu kadarının sizi saldırılara karşı yeteri kadar bilgilendirdiğini düşünüyorum :) Günümüzde ise artık kriptosistemlerinin güvenliği şifreye veya algoritmaya değil de anahtarların çeşitliliğine bağlıdır ve bu bir standart haline gelmiştir. Kerckhoff prensibine göre “**sadece anahtar gizli olmalıdır**”. Yani kullanılan birçok güvenlik sisteminde algoritma açıktır; ancak anahtarlar güvenli bir şekilde saklanır ve bu sayede protokoller güvenlikten taviz vermez.

Koskoca bir yılın bile nasıl geçtiğini henüz anlamamışken, yazımızın sonuna geldik bile. Günden güne meraklısı artan kriptolojinin, gelişmeye çok açık bir bilim olduğu hem kullanım alanlarının çokluğundan, hem de konusu olduğu güncel konferans ve sempozyumlardan belli. Umarım ilginizi çeken bu konuda yeterli bir giriş bilgisi sunabilmişimdir sizlere. Aşağıda belirttiğim kaynaklardan (bu sefer biraz çok oldu ama :) ) kriptoloji konusunda her türlü bilgiye ulaşabilirsiniz. Daha nice yeni yaşlarda buluşmak dileğiyle…

Kaynaklar: