Toplam Sayfa Görüntüleme Sayısı

6 Ekim 2010 Çarşamba

Kriptoloji Örneklemelerim

Modern Kriptoloji temelde üç görevi yerine getirmek için kullanılır. Verinin okunmasını ve değiştrilmesini engelleme ve verinin belirtilen kişi tarafından gönderildiğinin garanti altına alınması. Bir hacker yada kötü niyetli herhangi bir kişi internet gibi güvenli olmayan ortamlarda iki merkez arasındaki haberleşmeleri dinleyebilir ve bu haberleşmelerde gönderilen veriler üzerinde işlemler yapabilir. Bu işlemler genelde üç şekilde olabilir. Verinin gitmesini engelleme (intercept), veriyi sadece okuma (read), veriyi değiştirme (modify). Bu tip işlemlerin yapılmasını engellemek amacıyla şifreleme bir bilim olarak çalışmaktadır ve temelde üç görev üstlenmiştir.
1 - Veri Güvenliği (Confidentiality)
İki merkez arasında gönderilen verinin üçüncü kişiler tarafından okunmasını engelleme. (A/Symmetric Crypto) Bu basit şekilde normal yoldan gönderilen bir mektubun, alıcı kişiye giderken yolda herhangi bir kişi tarafından okunmasını (mesala postacı) engeleme amacı güder. Yazdığınız mektup düzmetin (plaintext) şeklindedir ve herhangi bir kişi tarafından zarfın açılması halinde, göndermiş olduğunuz mektup okunabilir. Şifreleme bu düzmetni şifreleyerek yazma işlemini gerçekleştirmenizi sağlar. Bu sayede mektubunuz yolda giderken herhangi bir kişi tarafından açılması halinde yazı düzmetin olmadığı için okunması engellenecektir. (Bu şifreleme için Symmetic yada Asymmetric yöntemler kullanılır.)
2 - Veri Bütünlüğü (Data integrity)
İki merkez arasında gönderilen verinin üçüncü kişiler tarafından değiştirilmesini engelleme. (Hashing)
Normal yoldan göndermiş olduğunuz mektup yine üçüncü kişiler tarafından yolda sizin yazdığınız şeklin dışında başka bir şekle dönüştürülerek yolculuğuna devam ettirilebilir.
Yazdığınız mektup düzmetin (plaintext) şeklindedir ve içerik okunabilmektedir. Okunabilen bu düzmetin kötü niyetli kişiler tarafından yolda değiştrilerek sizin gönderdiğiniz alıcıya, aslında söylemediğiniz şeyleri siz söylemiş gibi göstermek amacıyla yollanabilir. Şifreleme gönderilen bu düz metin üzerinde işlem yaparak sayısal bir sonuç oluşturur. Bu sonuç gönderilen yazının üzerinde en ufak bir değişiklik yapılırsa algoritma aynı olduğundan değişecektir.
Göderici ve alıcı tarafından aynı yazı üzerinde aynı algoritmayla oluşturulan sayısal sonuçlar birbirinin aynı olmak zorundadır. Eğer sayısal sonuçlar tutmuyorsa gönderilen metin yolda giderken değiştirilmiştir şeklinde düşünülebilir. Çünkü aynı metin üzerinde yapılcak bir değişiklik aynı sayısal sonucu çıkarmaycaktır. Kullanılan algoritma sayesinde farklı metinler üzerinde aynı sayısal sonucun çıkartılması neredeyse imkansızdır. (Bu sayısal sonuç oluşturma işlemi için Hasing yöntemi kullanılır)
3- Kimlik denetimi (Authentication)
İki merkez arasında gönderilen verinin, alıcı tarafında, belirtilen gönderici tarafından gönderildiğinden emin olunması . (Digital Signature)
Size ulaşan herhangi bir mektubun üzerinde bulanan gönderici ismi herzaman doğru olmayabilir. Kötü niyetli kişiler tarafından gönderici isimleri farklı yazılarak kişilere mektup yollanabilir (spam mailler gibi). Şifremele bilim olarak bu mektuplar üzerine özel imzalar (signature) ekleyerek, mektubu gönderen kişinin gerçekten mektubu gönderen kişi olduğundan emin olmanızı sağlayabilir.
Gönderilen zaman dilimine göre özel algoritmalar la oluşturulan bu imzalar, alıcı kişi tarafından belirli yöntemlerle doğrulanabilir. (Bu imza oluşturma ve doğrulama işlemi Digital Signature olarak adlandırılır.)
Bu bilgi alışverişi için geliştirilen şifreleme yöntemlerinden bilinen ilki Roma imparatoru Sezar'a aittir. Ve Sezar şifresi olarak bilinir.
Sezar şifresi çok basit bir yöntemle çalışır. Alfabe bütün harfleri ile direk yazılır.
ABCDEFG...........VWXYZ.
Sonra alfabe istenilen sayıda (en fazla alfabenin harf sayısından bir eksik kez. Neden ?) sağa kaydırılarak yazılır. Mesala 4 kez.
WXYZ..................ABCD.
Ve daha sonra mesaj bu yeni harflerle baştan yazılır.
ABCDEFG...........VWXYZ.
WXYZ..................ABCD.
Mesala ABD (Amerika Birleşik Devletleri) yazmak istiyorsak WXZ yazarız.. bu saydede ABD harfleri WYZ ye dönüşmüş olur. Düzmetin (plaintext) bu şekilde şifrelenmiş metin (encrypted text) olarak gönderilir. Ve alıcı kişiye alfabenin kaç kez sağa kaydırıldığı gizli bir şekilde söylenir. Ve alıcı kişi alfabeyi tersine kaydırarak orjinal metni (decrypted text - çözülmüş metin) bulur.
WXYZ..................ABCD. (4 kez sağa kaydırılmış alfabe)
ABCDEFG...........VWXYZ. (normal alfabe)
WXZ (şifreli metin)
ABD (çözülmüş metin)
Ve verinin yolda giderken üçüncü kişiler tarafından okunması engellenmiş olur.
Uygulanan bu yöntemin, şifresinin çözülmesi için denenmesi gereken çok az sayıda ihtimal vardır. (alfabenin harf sayısından bir eksik kez. Ortalama 28 deneme. Neden ?) bu ihtimallerin tamamı denenirse bu şifre çözülür. Alfabe teker teker sola kaydırlır ve her seferde yazı baştan çözülür anlamlı bir yazıya dönüştüğü an şifre çözülmüş olur.
KRİPTOLOJİ - SİMETRİK ŞİFRELEME
Kimi zaman bu şifreleme metodu gizli anahtar (secret-key) şifreleme olarak da adlandırılır. (belirtilen Sezar şifrelemesi modern olmamasına rağmen simetrik şifreleme olarak kabul edilir). Metni şifreleme işlemi için bir gizli anahtar seçilir ve bu gizli anahtar ile metin şifrelenir (alfabeyi 4 harf sağa kaydırma yukarıdaki örnekte gizli anahtar olarak kabul edililebilir.) Şifrelenmiş metin alıcı kişiye yollanır ve gizli bir şekilde gizli anahtar da alıcı kişiye bildirilir. Şifrelenmiş metni alan kişi bu metni, belirtilen gizli anahtar ile çözüp düzmetne çevirir ve metni okur. Bu şifreleme metodunda ki en büyük dezavantaj gizli anahtarın alıcıya bildirilmesidir. Bu bildirme işlemi üçüncü kişiler tarafından bilinmemelidir. Çünkü gizli anahtarın üçüncü bir kişi tarafından bilinmesi şifrelenmiş metni kolayca çözmesini sağlar.
Bilgisayar üzerinde basit bir simetrik şifreleme yapmanın yolu XOR (özel veya) operatörünü kullanmaktır. XOR operatorü iki bit i karşılaştırıp sadece ve sadece farklı ise 1 değerini verir. Yani diyelim ki A harfinin ascii kodu olan 65 (klavyeden alt tuşuna basılı tutarken numerik klavyeden 65 yazın) sayısını 87 ile XOR işlemine tabi tutmak istiyoruz. Önce 65 sayısının binary şeklinde yazarız daha sonra 87 sayısını yazarız ve bu iki sayının farklı olan bitlerini 1 aynı olan bitlerini 0 olarak işaretleriz.
(128 64 32 16 8 4 2 1)
0 1 0 0 0 0 0 1 = 65 => 'A'
0 1 0 1 0 1 1 1 = 87
----------------------- ^
0 0 0 1 0 1 1 0 = 20 => ''elde edilmiş olur
Tersine çevirmek içinde 20 sayını 87 ile XOR işlemine tabi tutarız
0 0 0 1 0 1 1 0 = 20
0 1 0 1 0 1 1 1 = 87
--------------------- ^
0 1 0 0 0 0 0 1 = 65 => 'A' ya geri dönmüş olur.
Xor ile yapılan veri şifreleme örnekleri.Visual C#.Net :
KRİPTOLOJİ - ASİMETRİK ŞİFRELEME
Asimetrik şifreleme (public key) yöntemi simetrik şifreleme yönteminin en büyük dezavantjı olan gizli anahtarı (secret key) karşı tarafa, kimsenin öğrenmeden gönderilmesindeki zorluğu ortandan kaldırma adına geliştirilmiştir.
Asimetrik şifrelemede iki adet anahtar oluşturulur. Bu anahtarlar genel anahtar (public key) ve özel anahtar (private key) olarak adlandırılır. Public key ile veri şifrelenir private key ilede sadece şifrelenmiş veri deşiflenip orjinal hale getirilir. Public key olarak belirtilen anahtar umuma açıktır ve herkes tarafından bilinmesinde herhangi bir sakınca yoktur. Çünkü bu anahtarla sadece veri şifrelenir ve bu anahtarla şifrelenmiş veriler ancak ve ancak public key e karşılık oluşturulmuş private key (özel anahtarla ) çözülebilir. Bu itibarla private key in kesinlikle gizli olarak kalması gerekir.
Belirtilen yöntem şu mantıkla çalışır. İki kişi arasında bir veri alışverişi yapıldığını varsayalım (bu iki kişi hemen bütün şifreleme kitaplarında Alice ve Bob diye geçer. Nedendir bilinmez?) Alice, Bob’a şifreli bir mesaj göndermek istemektedir. Bob kendi bilgisayarı üzerinde bir adet public key (şifreleme için) ve bir adet de private key (şifre çözmek için) oluşturur. Ve Bob oluşturmuş olduğu public key i Alice gönderir. Yolda public key in başkaları tarafından görülmesinde herhangi bir sakınca yoktur.(secret key yada simetrik algoritmalardan farkı buradadır.) Çünkü public key sadece şifreleme yapar. Alice Bob’a ait public key ile mesajını şifreler ve şifreli bir şekilde Bob’a yollar. Bob’un elinde de kendisine ait olan public key e karşılık gelen private key vardır (ve bu private key sadece oluşturulmuş olan public key ile şifrelenmiş mesajları çözer ve bu sebebten ötürü hep gizli kalmalıdır.) Bob şifrelenmiş mesajı private key i ile çözerek okur. Yolda metin şifrelenmiş olarak gittiğinden ve private key (özel anahtar) her zaman Bob un elinde gizli bir şekilde tutulduğundan mesajın güvenliği sağlanmıştır.
Alice : Plaint text + Bobs publickey = > Encrypted Text
Oluşturulmuş bu şifreli mesajı Bob’a yolla.
Bob : Encrypted Text + Bobs privatekey => Decrypted Text (Yani Orjinal mesaj)
Biraz da matematik
Bu public/private key çiftini üretmek için özel bir algoritma kullanılır. Bu algoritma ilk kez Amerikalı üç bilim adamı tarafından 1977 yılında geliştirimiştir ve ismini bu üç kişinin baş harflerinden almıştır RSA. Rivest, Shamir, Adleman. (Her ne kadar İngilizler ikici dünya savaşı yıllarında bu tip te bir yöntem keşfettiklerini ve bu yöntemi güvenlik amacıyla kimseye söylemedikleri belirtseler bile RSA yöntem olarak ilk kabul edilmiştir.)
RSA mantık olarak şöyle çalışır.
Tamamiyle asal sayılar üzerinde hareket eder..
Önce bir adet asal sayı seçilir ve buna p sayısı denir. Sonra bir tane daha asal sayı seçilir ve bunada q denir.
p = 3
q = 11 (3 ve 11 asal sayıdır dimi?)
Daha sonra bir adet bu iki sayının çarpımından oluşan N sayısı oluşturulur.
N = (p * q)
N = (3 * 11)
N = 33
Bu N sayısı Modulus olarak kabul edilir. Ve hem public hemde private key in bir parçasını oluşturur.
Daha sonra bir a sayısı oluşturulur ve bu a sayısı p değerinin bir eksiği ve q değerinin bir eksiniğinin çarpımından oluşur.
a = (p -1 ) * (q -1)
a = (3 -1 ) * (11 - 1)
a = 2 * 10
a = 20
sayısı elde edilir.
Daha sonra bir e sayısı oluşturulur ve bu e sayısı a ile herhangi bir ortak böleni olmayan bir sayı olmalıdır.
e = 7 (denebilir)
7 sayısının 20 ile ortak böleni yoktur.
Bu oluşturulan e ve N sayılar public key dir (e Exponent (yani üs) N modulus (yani mod alınacak sayı)
Daha sonra private key i oluşturmak için bir adet d sayısı üretilir ve bu d sayısı e sayısı ile çarpılıp a sayısı ile mod landığında kalanı 1 verecek şekilde bir sayı olmalıdır.
d = ? * e mod a => 1 sonucunda olmadır
bunun matematik teki yazımı şöyledir. d * e = 1 mod a, yani
d * 7 = 1 mod 20
d = 3 sonucu bulunur
çünkü 3 * 7 = 21 mod 20 de 1 sonucunu verir.
Oluşturulan bu d sayısı ile N sayısı da private key dir (d Exponent, N modulus)
Yukarıdaki örnek devam ettirilirse Bob’un kendi adına public ve private key lerini oluşturduğunu fazedelim
Bob un key çifti :
Public key : e = 7 ve N = 33
Private key : d = 3 ve N = 33
Bob oluşturduğu bu keylerden private key i çok iyi bi şekilde saklar. Ve public key i Alice’ e yollar. Alice bu bu public key ile mesajı şu şekilde şifreler. Diyelimki ‘A’ karakterini şifreleyip göndermek istiyor. ‘A’ harfine karşılık gelen herhangibi sayı oluşturur (burada ascii kodları kullanılabilir)
A harfinin sayısal değerini 16 olarak seçelim. 16 sayısını public key de bulunan e sayısı ile üs alır ve N sayısı ile de çıkan sonucun mod unu alır. Yani
X = 16 ^ 7 mod 33
X = 268435456 mod 33
X = 25
16 sayısını (ayni A harfini) 25 sayısına çevirerek Bob’a yollar.
Bob’da almış oluduğu bu 25 sayısını d ile üs alıp, N ile modlar
X = 25 ^ 3 mod 33
X = 15625 mod 33
X = 16 ya geri çevirir. (yani A)
Görüldüğü gibi Alice 16 sayısını şifreleyip 25 e çevirmişti. Bob’da 25 sayısını çözüp 16 sayısına geri çevirdi.
(Burade belirtilen örnekte şifrelemek için 33 sayısına eşit yada büyük bir sayı kullanılmamalıdır. Neden?)
Asimetrik şifreleme metodunun iki güvenliği vardır. Birincisi secret-key yönteminde olduğu gibi gizli bir veriyi karşı tarafa yollmak gerekli değildir. İkisinciside şifrenin çözülmesi için gerekli olan ihtimal sayısı çok fazladır.
Asimetrik bir algoritmanın çözülmesi için gerekli olan, p ve q sayılarının bulunmasıdır. p ve q sayıları bilinen (ve herkese açık olan) public key içerisindeki N sayısından bulunabilir. (nasıl?)
Burada belirttiğimiz örnekte sayıları hesaplayabilelim diye çok küçük asal sayılar seçtik 3 ve 11 gibi. Ancak bu şifreleme metodunda kullanılan sayılar oldukça büyüktür.
128 bitlik şifrelemede ortalama 45 haneli asal sayılar kullanılmaktadır. N sayısını oluşturmak için 45 haneli iki sayının çarpımı bulunmalıdır.
128bit lik bir şifrenin çözülmesi için ihtimal sayısı 2 üzeri 128 dir. Ve bu kadar ihtimal normal bir bilgisayar ile ortalama 2 trilyon yılda çözülür. (Saniyete 1 trilyon işlem yapabilen 1 milyon dolarlık süper bilgisayarlarla bu süre 1190 yıl dır)
Japonyada 64bit bir şifre yaklaşık 100.000 (yüzbin) bilgisayarın paralel bağlanarak ortak çalışması sonucunda yaklaşık 3,5 yılda çözülmüştür.
Bügün internet üzerinde SSL ile kurulu sayfalarda 128bit lik şifreleme kullanılır. (sizin kredi kartı bilgilerinizin korunması için) ve her zaman şifrelemede verinin geçerlilik süresi çözülme süresinden az ise güvendesiniz demektir.
Yani SSL kullanılan bir sayfada şifrelenerek yollanan kredi kartı bilgileriniz 1190 yıldan fazla süre yürürlükte kalmayacağı için 1190 yıl sonra çözülmüş olmasının bir mahzuru yoktur. Özel şifreleme programları ile 4096 bitlik şifreleme yapılabilir bu şekilde gerçekleştirilmiş bir şifrenin çözülme ihtimali 2 üzeri 4096 yani yaklaşık olarak 10 üzeri 500 dür. Bu sayının büyüklüğünü anlamak için şöyle bir örnek verilebilir. Dünyada bilinen atom sayısı 10 üzeri 70 dir.
Asimetrik şifreleme yönteminin bütün güvenliği şifre çözümünde denenmesi gereken tüm ihtimallerin sayısının çok yüksek miktarda oluşundan kaynaklanır. (Ama sonuçta yine bir ihtimal vardır.
Asimetrik key yöntemi ile ilgili örnekler Kriptoloji ve .Net konusunda verilecektir.

Hiç yorum yok:

Yorum Gönder