Ş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'dan “cmd” 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.
Ş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.
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.