Şifreleme ve Deşifreleme

 

Şifreleme (encrypting), bir bilginin belli bir kurala bozulması demektir. Bilerek bozulmuş bilgi yetkisiz kişiler tarafından ele geçirilebilir ama içeriği anlaşılamaz.

Bu içeriğe yalnızca kuralı bilen taraflar erişebilir. Şifreleme kuralına anahtar (key) denir. Mantıklı bir adlandırma. Yalnızca elinizde anahtar varsa şifreliyi bilgiyi açabilirsiniz.

 

Peki, bilgi normalde nasıl saklanır ve nasıl bozulur, sonra nasıl asıl bilgiye ulaşılır? Bunu görmek için önce bir alıştırma yapalım.

 

Bir komut satırı açın (Start, Run'dancmd” komutunu vererek hemen komut satırına geçebilirsiniz).

Klavyenizin alt satırında iki adet "Alt" ibareli tuş bulunur. Bu tuşlardan soldakine basın ve basılı tutun.

Bu tuş basılı iken klavyenin sağ tarafındaki sayısal klavyeden sırasıyla 6 ve 5 rakamlarına basın, ellerinizi kaldırın.

Ne gördünüz? "A" harfi değil mi? Peki bu nasıl oldu?

 

Bizim bildiğimiz harfler, rakamlar (kısaca bunlara karakter diyoruz) bilgisayarda bizim bildiğimiz gibi saklanmaz.

Onlar hep 0 ve 1 rakamlarının belli kombinasyonları şeklinde saklanır.

Hangi kombinasyonun hangi karaktere karşılık geldiği çeşitli standartlar ile düzenlenmiştir.

Kişisel bilgisayarlarda kullanılan standart ASCII'dir (American Standard Code for Information Interchange).

Bazı harf karakterlerinin ASCII kodu aşağıdaki gibidir:

 

Harf    İkili Sayı Düzenindeki Değeri           Onluk Sayı Düzenindeki Değeri

A         0100 0001                                          65

B         0100 0010                                          66

C         0100 0011                                          67

 

Gördüğünüz gibi A harfi aslında 0100 0001 kombinasyonu ile gösteriliyor.

Okuması kolay olsun diye biz bunu onluk sayı düzeninde ifade ediyoruz (onluk düzendeki 65 sayısı ikilik düzendeki 0100 0001'e karşılık geliyor).

Genelde ASCII kodu denildiğinde onluk sayı düzenindeki karşılığı söylenir (ama gerçekte hep ikili sayı sisteminin kullanıldığını unutmayın).

 

Not: Büyük harflerin ASCII koduna 32 eklendiğinde onların küçük halini elde ederiz. Örneğin, 65+32=97 küçük a harfinin ASCII kodudur.

 

Şimdi ağımızdaki bir makinenin bir başka makineye "BABA" kelimesini göndereceğini varsayalım.

 

diyagram, ekran görüntüsü, çizgi, metin içeren bir resim

Açıklama otomatik olarak oluşturuldu

 

Şekilde A makinesi B makinesine bu bilgiyi gönderiyor.

Eğer kötü niyetli bir kişi o anda hattı dinliyorsa A makinesinden giden veriyi kapıp anlayabilecektir.

Bu bilginin üçüncü bir kişi tarafından anlaşılmaması için şifrelenmesi gerekir. Bunu nasıl yapalım?

 

Şifreleme Yöntemleri

 

Günümüzde şifreleme için iki yöntem kullanılıyor:

1) Preshared key (Önceden Paylaşılan Anahtar) yöntemi

2) Public Key Infrastructure (Açık Anahtar Altyapısı) yöntemi

 

key” (anahtar) sözcüğünün şifreleme kuralı anlamına geldiğini bir kez daha belirtelim.

 

Preshared Key Yöntemi

 

Bu yöntemde bilgiyi bozmak için bir kural oluşturulur ve bu kural taraflara bir şekilde gönderilir.

 

Gönderilecek bilgiyi bozmak için bir kural, yani bir anahtar uyduralım.

Kuralımız şöyle olsun: Gidecek olan bilgideki her bir karakterin ASCII kodunu 5 ile çarpıp 5 ekleyelim.

Bu durumda artık A makinesinden B makinesine 66 65 66 65 kodları değil 335 330 335 330 kodları gidecektir.

Bu da BABA kelimesi yerine OJOJ gibi anlamsız bir kelimenin gönderilmesi demektir.

Hattı dinleyen üçüncü bir kişi, “key”i bilmediği için gönderilen verinin BABA olduğunu anlayamaz. Bu bozulmuş bilgi karşı tarafa ulaştığında, “key” bilgisine uygun olarak, gelen karakterlerin ASCII kodundan 5 çıkarıp sonucu beşe bölerek özgün bilgiyi bulabilecektir.

 

Preshared key yönteminin bazı dezavantajları bulunmaktadır: Birincisi, kolay anlaşılmayacak bir anahtarın üretilmesinin gerekli oluşudur.

Yukarıdaki gibi basit bir anahtar ortalama zekaya sahip birisi tarafından en çok yarım saat içinde çözülebilir.

Bize daha karmaşık, çözülmesi zor anahtarlar gerekiyor.

İkincisi, bu anahtarın sık sık değiştirilmesi gerekir. Çünkü bir anahtar ne kadar karmaşık olursa olsun muhakkak çözülür.

Üçüncüsü, periyodik olarak değiştirilen ve karmaşık şekilde üretilen anahtarın taraflara güvenli bir şekilde ulaştırılması gerekir.

Belki de en zoru bu üçüncüsüdür: Anahtar, taraflara nasıl ulaştırılacak? Telefonla mı? Telefonu dinlemek kolaydır.

Mektupla mı? Mektup karşı tarafa ulaşmadan önce açılabilir. Sözel olarak mı? Bu da dinlenebilir.

 

Neyse ki akıllı ve üretken bir takım adamlar preshared key yönteminin dezavantajlarını gideren bir yöntem geliştirmişlerdir.

Bu yöntemin adı Public Key Infrastructure (Açık Anahtar Altyapısı) şeklindedir.

 

Public Key Infrastucture (PKI) Yöntemi

 

PKI'da taraflara (örneğin, A ve B Makinelerine) sayısal sertifika (digital certificate) verilir.

Her sayısal sertifika iki adet anahtardan oluşur: Bir adet public key (açık anahtar) ve bir adet de private key (özel, şahsi anahtar).

Sayısal sertifikalar bir sertifika makamı (Certificate Authority-CA) tarafından verilir.

 

diyagram, çizgi, metin, plan içeren bir resim

Açıklama otomatik olarak oluşturuldu 

Açık ve özel anahtarlar ayrı ayrıdır ama matematiksel olarak birbirleriyle ilişkilidir.

A’nın açık ve özel anahtarları B’nin açık ve özel anahtarlarından farklıdır.

 

Açık anahtarlar herkes tarafından bilinebilir. A makinesi ya da B makinesi kendisine sorulduğunda açık anahtarını sorana bildirir, bunda bir sakınca yoktur.

Ama özel anahtarlar, adı üzerinde, özeldir. Bu anahtarlar sertifika makamından gelince hep o makinede kalır, başka bir kişiye ya da makineye asla verilmez.

 

PKI yönteminde, açık anahtar bilgiyi şifrelemede kullanılır. Özel anahtarsa şifreli bilgiyi açmada, yani, deşifrelemede kullanılır.

 

Açık ve özel anahtarlar şifrelemede şu şekilde kullanılır: A makinesi B makinesine göndereceği bilgiyi B'nin açık anahtarı ile şifreleyerek ona gönderir. B makinesi kendisine gelen şifreli bilgiyi kendi özel anahtarıyla açarak okur. Kötü niyetli bir kişi hattı dinlerse göreceği tek şey B'nin açık anahtarı ile kriptolanmış veridir. Elinde B'nin özel anahtarı olmadığı için şifreyi çözüp içeriğe erişemez. Eğer B makinesi de A makinesine yanıt döndürecekse bu sefer yanıtını A’nın açık anahtarı ile şifreleyip A’ya gönderir, A kendi özel anahtarı ile şifreliyi veriyi çözer.

 

Özetlersek; PKI sisteminde bilgiler açık anahtarlarla şifrelenir (encrypt), özel anahtarlarla çözülür (decrypt).

 

Buradaki en büyük avantajımız, tarafların şifreleme kuralı üzerinde önceden anlaşmalarının gerekli olmamasıdır.

 

Hangisi Hızlı?

 

Şifrelemede iki seçenek varsa (preshared key ve PKI seçenekleri) bu seçeneklerden hangisini seçmek gerekir?

Şifrelemede dikkat edilecek şeylerin başında performans gelir: Eğer seçtiğimiz yöntem işlem yapma hızını çok düşürüyorsa o yöntemin kullanımı sınırlı olacaktır.

Performansı etkileyen şey şifreleme seçeneklerinden çok, o seçenekte kullanılan anahtarın büyüklüğüdür. Anahtar ne kadar büyükse bilgi o kadar iyi şifrelenir ama bir uçta şifreleme, diğer uçta da şifreyi çözme o kadar fazla zaman alır. Bu nedenle şifrelemenin gücüyle performans arasında bir denge tutturmak gerekir.

 

Burada bir bilgi daha var: Preshared key yönteminde kullanılan anahtar küçüktür, PKI yönteminde kullanılan anahtar büyüktür. Örneğin, Preshared key yönteminde genelde 128 bitlik anahtarlar kullanılırken PKI’da en az 2048 bitlik anahtarlar kullanılır. Neden böyledir?

Preshared key yönteminde anahtarı kötü niyetli tarafların elde etmesi daha zordur çünkü kötü niyetli tarafların anahtarı bir şekilde iki uca doğrudan erişmesi gerekir. PKI’da ise tarafların açık anahtarı ortadadır. Bu açık anahtara karşılık gelen özel anahtarı elde etmek, en azından kuramsal olarak mümkündür. Bu nedenle PKI anahtarları büyük seçilir.

 

Anahtar ne kadar büyükse performans da o kadar düşeceği için PKI’ın performansı kötüdür diyebiliriz.

 

O zaman ne yapmalı?

 

O zaman melez bir çözüme gitmeli. Bu çözümde hem PKI hem de Preshared key yöntemi kullanılmalı. Böyle bir çözüm var mı? Var, adı da SSL.

 

Secure Sockets Layer'ın (SSL) Çalışma Şekli

 

SSL, Preshared Key ve PKI (Public Key Infrastructure) yöntemlerinin bir karışımını kullanır. SSL’de sunucular Sertifika Makamlarından (CA) PKI sertifikası alır. İstemci makinelere PKI sertifikası vermek gerekmez. Bu şekilde sertifika dağıtımı işini de azaltmış oluruz.

 

SSL’de asıl şifreleme/deşifreleme işlemi preshared key yöntemiyle gerçekleştirilir. Preshared key istemci tarafında üretilir. Bu “key” sunucunun açık anahtarı ile şifrelenip sunucuya gönderilir. Sunucu kendi özel anahtarını kullanarak preshared key’i öğrenir ve o andan başlayarak iletişim preshared key ile şifreli bir şekilde gerçekleştirilir.

 

SSL'in çalışma yöntemini şöyle örnekleyelim.

 

Bir Web sunucumuz var adı WEBSUNUCU ve bu sunucuya ulaşmak isteyen bir istemcimiz var adı CLIENT. İstemci makinemiz İnternete bağlı herhangi bir makine olacağından bu makineye sertifika veremeyiz, vermemeliyiz. Web sunucuda CA’den alınmış sertifika içinde bir Public Key bir de Private Key var, istemcimizde ise hiçbir anahtar yok. SSL sayesinde bu durum çok da dert olmayacak. WEBSUNUCU ve CLIENT adındaki makineler arasındaki SSL işlemlerişöyle gerçekleşir:

 

1)     CLIENT makine WEBSUNUCU’a bağlanmak için bir Preshared Key üretir.

2)     CLIENT makine WEBSUNUCU’dan onun Public Key’ini alır.

3)     CLIENT makine kendi ürettiği Preshared Key’i WEBSUNUCU’nun Public Key’i ile kriptolar (şifreler) ve WEBSUNUCU’ya gönderir.

4)     WEBSUNUCU da bu kendi Public Key’i ile şifrelenmiş Preshared Key’i kendi Private Key’i ile açar. Artık iki taraf da Preshared Key’i bilmektedir.

 

SSL mi TLS mi?

 

SSL yöntemi şu anda piyasada olmayan Netscape firması tarafından geliştirildi ve büyük başarı kazandı. Sonra bu SSL mekanizması uluslar arası kuruluşlar tarafından TLS (Transport Layer Security) adıyla standart hale getirildi. Yani, bizim artık TLS dememiz daha doğru gibi. Ama TLS diyeceğiz diye tutturmanın da çok anlamı yok. TLS yerine SSL terimini kullanmak çok yaygın; SSL dediğimizde ne demek istediğimizi herkes anladığı için SSL dediğimizde yanlış yapmış olmayız.