Professional Documents
Culture Documents
2 Cryptography
2 Cryptography
Kriptografi şifreleme bilimi demektir. Teknolojinin hızlı bir şekilde gelişmesiyle askeri,
elektronik, banka sistemleri ve daha birçok yer kriptografi biliminin kullanım alanları haline
gelmiştir. Günümüz sistemlerinde en önemli gereksinimlerden birisi bilgilerin sorunsuz bir
şekilde taşınması ve gizliliktir.
Kriptoloji ne iş yapar?
Haberleşme ve iletişim alanında iletilerin, mesajların, yazıların güvenli şekilde alıcısına
ulaşması için çalışmalar yapan, yöntemler geliştiren bilim dalına kriptoloji denir. Bu bilim
genellikle şifre bilimi ve kripto olarak biliniyor. Kriptoloji için bir matematik bilimi
diyebilirsiniz.
Cipher=şifre
İlkel Şifreleme Algoritmaları
-Sezar Şifreleme (Shift)
-Yerine Koyma (Substitution)
-Affine Şifreleme
Kriptoanaliz ve Frekans Analizi
Blok Şifrelemeler ve Vigenere Cipher
Simetrik Şifreleme (DES),
Asimetrik Şifreleme (RSA)
Anahtar Değişimi (Diffie Helman)
Özetleme Fonksiyonları (Hashing Function)
Güvenlik Prensibleri
Diğer Şifreleme Algoritmaları
İlkel şifreleme yöntemlerinden birisidir. Basitçe şifrelenmek istenen metindeki her karakterin
anahtara kadar kaydırılması ile şifrelenir (encrypt). Şifrenin açılmasında (decrypt) anahtar
kadar her karakter geri kaydırılır.
Örnek Mesaj (plain text) : “baba dede”
Anahtar (Key) : 2
Şifreli Mesaj (cipher text) : “dcdc fgfg”
Saldırı yöntemi olarak anahtarların tamamı denenebilir. Örneğin 26 harf bulunan ingilizce için
25 ihtimal teker teker denenirse metne ulaşmak mümkündür.
Saldırı yöntemi olarak anahtarların tamamı denenebilir. Örneğin 26 harf bulunan ingilizce için
25 ihtimal teker teker denenirse metne ulaşmak mümkündür.
Bu algoritmanın C / C++ dilindeki kodlaması aşağıdaki şekildedir:
#include <stdio.h>
#include <conio.h>
char c = kelime[0];
int i = 0;
while(c!='\0'){
if(c>=65&&c<=90){
kelime[i]=(kelime[i]+anahtar);
if(kelime[i]>90)
kelime[i]= (kelime[i]%90)+65;
if(c>=97&&c<=122){
kelime[i]=(kelime[i]+anahtar);
if(kelime[i]>122)
kelime[i]= (kelime[i]%122)+97;
i++;
c=kelime[i];
int main(){
printf("nsifreli :%s",kelime);
shift(kelime,-2);
printf("nacilmis :%s",kelime);
getch();
Yukarıdaki kodda, basitçe gelen kelimenin içeriğine bakılıyor ve şayet mesaj ascii tablosundaki
büyük harflere tekabül ediyorsa (65 büyük A ve 90 büyük Z olduğuna göre, bu sayılar
arasındaysa) veya küçük harfe tekabül ediyorsa (97 küçük a ve 127 küçük z harfleri
arasındaysa) bu durumda anahtar miktarı arttırma yapılır.
Anahtar miktarı arttıktan sonra, z harfinden sonraki bir harfe gelirse modu alınıp a harfi kadar
ekleme yapılır.
örneğin z harfini ( ascii değeri 127) anahtar değeri olan 2 kadar arttırdığımızı düşünelim, bu
durumda değeri 129 gibi bizim için anlamsız bir harf olacak, bu değerin mod 127 karşılığı alınıp
‘a’ harfinin değeri eklenir, sonuçta 129 % 127 = 2 + 97 = 99 olur ki bu değer c harfidir.
Kodun örnek ekran çıktısı aşağıdaki şekildedir:
dikkat edileceği üzere, sadece harfleri şifrelemiş ancak ascii kod karşılığı 32 olan boşluk
sembolünü olduğu gibi bırakmıştır. Bunun sebebi, şifrelenmesini istediğimiz iki aralığı (büyük
ve küçük alfabe harflerini) dikkate alıyor olmasıdır.
ÖDEV: Sizde Sezar Şifreleme yöntemini kullanarak bir C/C++ ya da Java dillerini ile bir
şifreleme algoritması yazınız.
Kriptoanalizi
Yerine koyma saldırısının kripto analizini (cryptoanalysis) inceleyelim . Yerine koyma
şifrelemesi özellikle frekans saldırısına (frequencey attack) karşı zayıf bir şifrelemedir. Ancak
şifreleme sisteminin anahtar uzayını çıkararak (key space), kaba kuvvet saldırısına (brute
froce attack) karşı en kötü ihtimal (worst case analysis) analizi yapmaya çalışalım.
Öncelikle yerine koyma şifrelemesinde her harfin farklı bir harf ile yer değiştirmesi gerektiğini
biliyoruz. Bu duruma yukarıda verilen örnekte olduğu gibi 8 karakterli bir alfabeyi ele alalım
ve durumu inceleyelim.
a 8
b 7
c 6
d 5
e 4
f 3
g 2
h 1
Yukarıdaki tabloda, her harfe karşılık kaç farklı harf gelebileceği incelenmiştir. Örneğin a
harfine karşılık 8 farklı harf yerleştirilebilir. Bu durumda b harfine karşılık yerleştirilebilecek 7
farklı harf kalmış olur (alfabedeki bir harf zaten a harfine karşılık olarak yerleştirilmiştir ve
ikinci kere kullanılamaz)
Bu durumda kaba kuvvet saldırısı 8! ihtimal içerir.
Yukarıdaki tabloda dikkat edilebilecek bir durum. Bu tablodaki ilk harf olan a harfi için 8 farklı
olasılık değerlendirilirken, a harfine karşılık yine a harfinin yazılabilme ihtimalinin de
içerilmesidir. Oysaki yerine koyma şifrelemesinde, bir harf başka bir harf ile ikâme edilirken
aynı harf kullanılmaz. Diğer bir deyişle a yarfinin şifreli mesajda da a harfi olarak kullanılması
doğru olmaz. O halde a harfi için aslında 7 olasılık bulunmaktadır.
a harfi için (a hariç) 7 olasılıktan birisi kullanıldıktan sonra (diyelim ki c kullanıldı), b harfi için
bu sefer 6 olasılık kalmış olur. Diğer harfler için de durum devam eder. Bu durumu aşağıdaki
tabloda görmeye çalışalım:
a bcdefgh 7 h
b acdefg 6 g
c abdef 5 f
d abce 4 e
e abcd 4 d
f abc 3 c
g ab 2 b
h a 1 a
Yukarıdaki tabloda görüldüğü üzere yapılan seçimlere ve muhtemel harflere göre ihtimaller
hesaplanmıştır. Bu durumda sonuç n! x n / 2 olarak bulunur. Ancak yukarıdaki tablo
karşılaşılabilecek en kötü durum değildir. En kötü durumda, ilk başta aynı harfle
değiştirilmesinden endişe ettiğimiz için kullanmadığımız a harfinin kullanılmasını aşağıdaki
tabloda görmeye çalışalım:
b acdefgh 7 c
c bdefgh 6 b
d cefgh 5 c
e dfgh 4 d
f egh 3 e
g fh 2 h
h f 1 f
Yukarıdaki bu son durumda görüldüğü üzere ihtimal sayısı, bir önceki duruma göre daha
yüksektir ve n harfli bir alfabe için (n-1) x (n-1)! olarak hesaplanır. Biz de kaba kuvvet
saldırısında (brute force attack) en kötü ihtimali aradığımız için, yerine koyma şifrelemesinde
olasılık olarak (n-1) x (n-1)! almamız daha doğru olur. Örneğin 26 alfabeli ingilizce için bu
durum 25 x 25! veya 29 harfli Türkçe için 28×28! olarak hesaplanabilir.