16 Nisan 2014

Kriptografi - 1.Bölüm


Kiriptolama Yöntemleri Nelerdir?Kriptografi şifreleme bilimi demektir. İçindeki bilgileri görme yetkisi olanlar dışındaki herkesten gizli tutması, kimlik denetimi yapması, tek bir veri parçası için dahi gönderilen bu verinin üzerinde hiçbir değişiklik, ekleme, yeniden düzenleme yapılmadığını garanti etmesi, izinsiz kişi ya da uygulamaların erişmemeleri gereken kaynaklara erişemeyecekleri garantisi vermesi beklenir.
Bir başka deyişle kriptografi, okunabilir durumdaki bir bilginin istenmeyen taraflarca okunamayacak bir hale dönüştürülmesinde kullanılan tekniklerin tümüdür. Teknolojinin hızlı bir şekilde gelişmesiyle askeri, elektronik, banka sistemleri ve daha bir çok yer kriptografi biliminin kullanım alanları haline gelmiştir. Verilerin güvenli bir şekilde yollanması ve karşı taraftan alınabilmesi için kriptografi bilimi aracılığıyla geliştirilen çeşitli şifreleme, anahtarlama ve çözümleme algoritmaları kullanılmaktadır.  Kriptoloji algoritmalarından en  yaygın kullanılanı ise şifreleme algoritmalarıdır. Şifreleme algoritması şifrelenecek metni ve şifreleme anahtarını girdi olarak alır. Çözümleme algoritması ise şifreleme algoritmasının ters yönünde çalışır. 

 
İlk kriptolama örneklerinden biri Sezar Şifrelemedir. Bu şifrelemede, her harf o harften sonra belirtilen harf kullanılarak şifrelenir. Örneğin; 3 harf atlamalı bir Sezar Şifrelemesinde “deneme” yerine “ghrhph” yazılır. Çözümü içinde 3 harf geriye gidilerek “deneme” çıktısı elde edilir.

Kriptografi 4 ana fonksiyon sağlar:
• Gizlilik
• Kimlik tanılama
• Bütünlük
• İnkar edememe

Gizlilik, kriptolanmış bilgi transfer sırasında veya depolanırken decryption anahtarına sahip olmayan kullanıcılar tarafından okunamadığından sağlanmış olur. Kimlik tanılama bilginin doğru kaynaktan alındığını doğrulamak için kullanılır. Bilgi veya mesaj bütünlüğü bilginin ağdaki yolculuğu sırasında değişikliğe uğramadığından emin olmak için gereklidir. İnkar edememe bir mesajı gönderen kişinin o mesajı size gönderdiğini inkar edememesini sağlayan alındı onayları sağlar. Kriptografide şifreleme için kullanılan anahtarın özellikleri ve çeşidine göre temel olarak iki çeşit şifreleme algoritması bulunmaktadır.

 

1. Simetrik Şifreleme Algoritmaları

 

Bu algoritmada şifreleme ve şifre çözmek için bir tane gizli anahtar kullanılmaktadır. Kullanılan anahtar başkalarından gizlidir ve şifreleme yapan ile şifrelemeyi çözecek kişiler de arasında anlaşılmış ortak bir anahtardır. Gönderilecek gizli metinle beraber üstünde anlaşılmış olan gizli anahtar da alıcıya gönderilir ve şifre çözme işlemi gerçekleştirilir. 

Simetrik şifrelemenin en önemli avantajlarından birisi oldukça hızlı olmasıdır. Asimetrik şifrelemeyle karşılaştırıldığında hız konusunda simetrik algoritmalar çok daha başarılıdır. Bununla birlikte simetrik algoritmayı içerdiği basit işlemlerden dolayı elektronik cihazlarda uygulamak çok daha kolaydır. Ayrıca simetrik algoritmalarda kullanılan anahtarın boyu ve dolayısıyla bit sayısı çok daha küçüktür. 


Kuvvetli Yönleri;
  • Algoritmalar olabildiğince hızlıdır.
  • Donanımla birlikte kullanılabilir.
  • Güvenlidir.

Zayıf Yönleri;
  • Güvenli anahtar dağıtımı zordur.
  • Kapasite sorunu vardır.
  • Kimlik doğrulama ve bütünlük ilkeleri hizmetlerini güvenli bir şekilde gerçekleştirmek zordur.
 
Simetrik algoritmalar blok şifreleme ve dizi şifreleme algoritmaları olarak ikiye ayrılmaktadır. Blok Şifreleme Algoritmaları veriyi bloklar halinde işlemektedir. Bazen bağımsız bazen birbirine bağlı olarak şifrelemektedir. Bu algoritmalarda iç hafıza yoktur, bu yüzden hafızasız şifreleme adını da almıştır. Bütünlük kontrolü gerektiren uygulamalarda genellikle blok şifreleme algoritmaları tercih edilir.

Dizi şifreleme algoritmaları ise veriyi bir bit dizisi olarak almaktadır. Bir üreteç aracılığı ve anahtar yardımıyla istenilen uzunlukta kayan anahtar adı verilen bir dizi üretilir. Kayan anahtar üretimi zamana bağlıdır ve bu yüzden bu algoritmalara aynı zamanda hafızalı şifreleme denir. Telsiz haberleşmesi gibi gürültülü ortamlarda ses iletimini sağlamak için genellikle dizi şifreleme algoritmaları kullanılır.

 

1.1. DES (Data Encrytion Standard - Veri Şifreleme Standartı)


Blok şifreleme algoritmasıdır. Şifrelemeyi metin uzunlukları belli olan bloklar halinde gerçekleştirir.  DES algoritması 64 bitlik anahtar uzunluğuna sahip olmasına rağmen 56 bit uzunluğunda simetrik kriptolama tekniği kullanan bir sistemdir (8 bit partiy için harcanır). Her kullanımında o kullanıma özel yeni bir anahtar yaratması DES’in güçlü yanı olup, günümüz teknolojisi için algoritmasının yavaş ve 56-bit’lik anahtar uzunluğunun yetersiz kalması DES’in zayıf yönleridir. 2000’li yılların başında kırılmasıyla günümüz teknoliojsi için yetersiz kaldığı görülmüştür ve itibarını kaybetmiştir. DES"in algoritmasından kaynaklanan bu sorunlar "Triple DES" ya da "DES-3"  (3DES) olarak bilinen yeni bir algoritma ile düzeltilmiştir. SSH gibi günümüzde kullanılan çoğu uygulama 3DES’i kullanmaktadır. 3DES algoritması DES şifrelemesinin 3 kere art arda yapılması şeklinde çalışır. Bu yüzden DES’e göre 3 kat daha yavaştır. Bununla birlikte 3DES şifreleme yapmak için uzunluğu 24 bayt olan bir anahtar kullanılır. Her bayt için 1 eşlik biti vardır. Dolayısıyla anahtarın uzunluğu 168 bittir. AES’in geliştirilmesiyle etkinliğini kaybetmiştir çünkü daha gelişmiş bir algoritmaya sahip olan AES şifreleme yöntemine göre 6 kat daha yavaş çalışır.

Şifrelenecek olan açık metni (plain text) parçalara bölerek (blok) her parçayı birbirinden bağımsız olarak şifreler ve şifrenmiş metni (cipher text) açmak içinden aynı işlemi bloklar üzerinde yapar. Bu blokların uzunluğu 64 bittir.

Aşağıda 64 bitlik bir veri girişinin bir geçiş boyunca yaptığı işlemler gösterilmiştir:

Yukarıdaki şekilde 64 bitten oluşan bir metnin öncelikle 2 parçaya ayrılması gerekir, soldaki ve sağdaki parça ayrı ayrı işlenmektedir. Bu işleme sağdaki 32 bitlik parçanın f fonksiyonuna anahtar ile birlikte girmesi ve parçaların yer değiştirmesi şeklinde yapılmaktadır.

Yukarıdaki şekilde "+" işlemi 
yahut işlemidir (xor (exclusive or, özel veya)) .Yukarıdaki şekilde DES için yapılan bir geçiş çizilmiştir, DES şifrelemesinde bu işlem 16 defa tekrar edilmektedir.

Yukarıdaki şekilde f fonksiyonu olarak verilen fonksiyonun detayı aşağıdaki şekilde verilmiştir:

Yukarıdaki şekilde bir DES geçişi (pass) içindeki f fonksiyonunun nasıl çalıştığı gösterilmiştir. Bu fonksiyon bir 32 bit’lik parçayı alarak 48 bit’lik anahtar ile 32 bit’lik sonuç üretmektedir. Bu üretme işlemi sırasında en kritik işlem yukarıdaki şekilde E olarak görüntülenmiş expansion işlemidir. Bu işlem basitçe aynı bit için birden fazla sonuç üretilebilmesini ön görür. Aşağıda detaylıca  anlatılacaktır ancak yukarıdaki resmin detaylarına devam edilecek olursa genişletilmiş (expanded) bit, anahtar ile xor işlemine tabî tutulur. Sonuçta 48 bitlik olarak üretilen metin 8 bloğa bölünür. Her blok 6 bitlik bir parçadan oluşmaktadır. Her 6 bitlik parça bu sefer expansion işleminin tersi olarak küçültülmekte ve 4 bit’e indirilmektedir. Sonuçta 4 bitlik 8 blok yani toplam 32 bitlik veri üretilmiştir.

Yukarıdaki işlemde genişletme işlemi olarak adlandırılan işlem (expansion) basitçe aşağıdakine benzer bir tablo ile yapılmaktadır:
 
Yukarıdaki tablodaki mantık basitçe bir sayının birden fazla pozisyonda bulunmasıdır. Bu durumda örneğin 1 sayısı için hem 2. hem de 4. konumda karşılık bulunmaktadır.
DES ile ilgili diğer bir ayrıntı da anahtar üretilmesidir. Dikkat edilirse DES’in 64 bitlik bir anahtar ile çalıştığı ve 8 bitlik parity kontrolü çıkarılacak olursa bu anahtarın 56 bitlik olduğu yukarıda anlatılmıştı. Ancak f fonksiyonuna giren her geçişteki anahtar boyutu yukarıda 48 bit olarak verilmiştir. Dolayısıyla aslında her geçiş (pass) için farklı bir anahtar üretilmektedir. Bu anahtarlar 56 bitlik esas anahtardan üretilen anahtarlardır. Aşağıda bu anahtarların nasıl üretildiği gösterilmiştir:
 
 
Yukarıdaki şekilde 56 bitlik giriş anahtarından her geçiş için gereken anahtarların üretilmesi gösterilmiştir. Bu işlem 16 adımda yapılmaktadır ve her adımda o adım için üretilmiş olan tablo kullanılmaktadır. Her adım öncelikle 2 adet 28 bitlik parçaya bölünmüştür. Tablolara PC1′den PC16′ya kadar isimler verilmiştir. Ayrıca her tablo girişinden önce bir kaydırma işlemi kullanılarak üretilen anahtar değiştirilmektedir. Buna göre örneğin 10. adımda orjinal verinin her iki parçası da 10 bit kaydırılmış olacaktır.

DES ile şifrelenmiş bir metni açmak için aynı algoritmaya şifreli metni (cipher text) aynı anahtar ile vermek yeterlidir

 

1.2. Üçlü DES (triple DES , 3DES)


Zaman içerisinde DES şifreleme yöntemine yapılan saldırıların zorlaştırılması için geliştirilmiş olan bir methottur. Buna göre DES’in çalışma mantığı aynen korunmuş ancak anahtar boyutu 64 bit’ten 128 bit’e çıkarılmıştır. Yeni anahtar boyutu 2 adet 64 bitlik parçaya bölünerek standart DES’e anahtar olarak girmektedir.

Bu işlemin yapılış sırası aşağıdaki şekilde verilmiştir:


Yukarıdaki şekilde görüldüğü üzere 128 bitlik anahtar öncelikle 2 adet 64 bitlik parçaya bölünmüş, daha sonra her parça DES işlemlerine normal birer anahtar olarak girmiştir. Bu girişler ardışık olamaz dolayısıyla ilk parça 1. ve 3. DES işlemlerine, 2. parça ise 2. DES işlemine anahtar olarak girmektedir.

 

1.3. AES (Advanced Encrytion Standard - Gelişmiş Şifreleme Standartı)


Des’e göre daha güvenli bir sistemdir. Çeşitli bilim adamları tarafından DES’in kırılması üzerine 2001 yılında geliştirilmiştir. Belçikalı Vincent Rijmen ve Joan Daemen tarafından bulunmuş, DES'in ve zayıf  yönlerini tamamen düzelterek, matematikle oluşturulmuş bir blok şifreleme algoritmasıdır. 128 bit, 192 bit ve 256 bit olmak üzere üç farklı anahtar uzunluğuna sahip olabilir. AES  DES’in aksine donanımda ve yazılımda hızlı olması, daha kolay uygulanabilir olması ve çok daha az hafızaya gerek duyması güçlü yönleri olarak söylenebilir. Günümüzde bilinen tüm akademik,  pratik ve doğrudan (brute force) saldırılara karşı dayanıklı olduğu düşünülmektedir. En yaygın olarak kullanılan simetrik şifreleme algoritmasıdır.

Algoritma yapısı;
1) Aes orijinal  veriyi 128 bitlik bloklara bölüyor ve her bloğu 4×4′lük bir matris halinde düzleniyor.Böylece 16 matris hücresi, iki basamaklı onataltılık bir sayıya denk düşen 8 bit ya da 1 byte içeriyor.

2) Anahtar geliştirme: Bir algoritma, 128 bitlik Aes anahtarından her biri 128 bit uzunluğunda 11 anahtar oluşturuyor.

3) Başlangıç: Aes, veri bloğunu bit bit(XOR işlemi) ilk anahtar ilişkilendiriliyor.

4) Alt byte’lar: Bloğun her bir byte’ı bir referans tablosundan bir byte’la değişriliyor. Eski byte ‘ın iki onaltılık rakamı, yeni byte’ın satır ve sütun sayısı oluyor.

5) Sütun kaydırma: Bloğun sütunları 0,1,2 ya da 3 konum sola kaydırılıyor. Taşan sütunlar sağa ekleniyor.

6) Sütun karıştırma: Aes bloğun sütunlarından ve sabit bir matrisin satırlarından hareketle yeni hücre değerleri hesaplıyor. Bu işlem sadece son geçişte yapılıyor.

7) Anahtar ekleme: Uygun anahtar kullanılırak bloktaki veriler bit bit değiştiriliyor.

8) Son olarak Aes şifreli blokları bir araya getirerek tek bir metin oluşturuyor. Bu kodun çözümü için aynı işlemleri tersine sırayla yapmak gerekiyor. 
  

1.4. Blowfish


Blowfish, 64-bit öbek büyüklüğüne ve 32 bit'ten 448 bit'e kadar anahtar uzunluğuna sahiptir. , DES’in eksik kalmaya başlamasından sonra onun yerini alması amacıyla tasarlanmıştır. Blowfish algoritması en az 4 kb ram’a ihtiyaç duyar. Bu yüzden akıllı kartlar gibi en küçük sistemlerde kullanılamaz. Yüksek şifreleme ve e-posta gibi rutin kullanıcı uygulamaları konusundaki etkinliğiyle başarılı bir algoritma olarak değerlendirilmektedir. Blowfish kullanımını artıran en özelliklerinden birisi yapıldığı zamanda kullanılmakta olan şifreleme algoritmaları lisanslı ve paralı satılmasına rağmen, Blowfish’in tamamen ücretsiz olmasıdır. Blowfish piyasada kullanılan en hızlı öbek şifreleyicilerdendir ve içerdiği karmaşık anahtar çizelgesi şifrenin kırılmasını zorlaştırmıştır.
Açık metin olarak adlandırılan Plaintext(64 bitlik veri) 32 bitten oluşan 2 parçaya ayrılır. Left ve right olarak 2 parçaya bölünen plaintextin sol kısmı 1. alt anahtar olan P1 ile XOR işleminden geçirilir ve P' değeri elde edilir. Bu P' değeri de F fonksiyonuna gönderilir. Bu fonksiyondan çıkan değerle plaintextin sağ kısmı XOR işlemine sokulur. Buradan çıkan sonuç F2 sonraki adımda sol kısma , daha önce oluşturulan P' değeri de sağ kısma gelecek şekilde yer değiştirilir.Bu işlemler P16 üstü ve F16 üstü elde edilinceye kadar yapılır yani 16 kez tekrarlanır. Daha sonra kalan 2 alt anahtar aşağdaki şekilde gibi yer değiştirme işlemi yapılmadan uygulanır.

Şekildeki gibi P17 ve P18 alt anahtarları uygulanıncaya kadar işlemler tekrarlanır. 64 bitlik plaintext şifreli hale getirilir. Her 64 bitlik blok için aynı işlemler gerçekleştirilir.

Her biri 32 bitten oluşan 18 adet alt anahtarın bulunması ise şu şekilde gerçekleşmektedir:
P dizisinin başlangıç elemanları olarak Pi sayısının ilk 3 rakamı hariç hexadecimal digitleri kullanılır. Daha sonra 128 bitlik gizli anahtarımız 32 bitten oluşan 4 parçaya bölünür. (K1,K2,K3,K4). Her bir parça da alt anahtarla XOR işleminden geçilir ve yeni P değerleri bulunur. Bu işlemden sonra da  0'lardan oluşan veri Blowfish algoritmasına sokulur , algoritmadan dönen 64 bitlik değer 2 ye bölünür ve ilk olarak P(1) ve P(2) elde edilir. Bu veri daha sonra yine algoritmaya gönderilir, dönen değer 2 parçaya bölünür ve P(3) ve P(4) elde edilir bu işlem P(17) ve P(18) elde ediliniceye kadar devam eder.
                                                                                              

F fonksiyonu içersinde 4 adet S box bulunmaktadır . Bu S boxlar ise P(17) ve P(18)in elde edildiği verinin tekrar algoritmaya gönderilmesinden oluşan sonuçtan ilk olarak S(0,0) ve S(0,1) elde edilir. Bu veri yine algoritmaya gönderilir ve elde edilen sonuçtan sırayla S boxların diğer elemanları bulunur. Bu işlem 4 S boxın elemanları bulununcaya kadar devam ettilir.
 
                                        
F fonksiyonu ise aşagıdaki gibi kullanılmaktadır :

                                            

BlowFish algoritması simetrik şifrelem yöntemi olduğundan yani , alıcı ve gönderici tarafta aynı anahtarlar kullanıldığından deşifrelemede aynı anahtarlar kullanılarak ters işlemler yapılır ve veri çözülür.

1.5. IDEA


Uluslararası Veri Şifreleme Algoritması, (IDEA) 1991 yılında tasarlanmış bir blok şifreleme algoritmasıdır. Bilinen en güçlü algoritmalardandır.

IDEA, şifrelenecek olan 64 bitlik metin ve 128 bitlik anahtarı kullanarak 64 bitlik şifrelenmiş metni oluşturur. IDEA algoritması çeşitli matematiksel işlemlerin karışımından oluşmaktadır. Bu işlemler çarpma, toplama ve xor gibi matematiksel işlemlerdir.

IDEA şifreleme şemasında kullanılan anahtarların üretimi ve şifreleme – deşifreleme işlemleri aşağıdaki gibi yapılır.128 bit uzunluğunda K = k1 ... k128 kullanılarak 52 adet 16 bit uzunluğunda Ki(r) alt anahtar bloklarını elde edebilmek için;

1) K1(1) ... K6(1) , K1(2) ... K6(2) , ... , K1(8) ... K6(8) , K1(9) ... K4(9) alt anahtar grupları sıralanır.

2) K 8 adet 16 bit uzunluğunda bloğa ayrılarak ilk 8 alt anahtar olarak tanımlanırlar.

3) K dairesel olarak 25 bit sola kaydırılır, sonuç 8 bloğa bölünerek yeni 8 alt anahtar yaratılmış olur. 52 alt anahtarın tümü yaratılıncaya kadar bu işleme devam edilir.

M=m1 ... m64 mesajını yukarıdaki algoritmayı kullanarak oluşturulan K = k1 ... k128 anahtarı ile şifrelemek için;
1) ( X1, X2, X3, X4 ) ← ( m1 ... m16 , m17 ... m32 , m33... m48, m49... m64 )

2) for r=1 to 8 do

3) Y1 ← X1 K1(9) , Y4← X4 K4(9) , Y2 ← X3 K2(9) , Y3 ← X2 K3(9)

4) Y=( Y1 , Y2 , Y3 , Y4 ) şifrelenmiş metni elde edilir.

Şifreleme de uygulanan işlemlerin ters işlemleri uygulanarak aynı algoritma kullanılarak şifre çözümleme işlemi yapılabilmektedir.

K1(r) şifreleme alt anahtarları yardımıyla elde edilecek olan K'i(r) alt anahtarları kullanılırsa deşifreleme işlemi gerçekleştirilmiş olur. 

1.6. RC4


RC4, 1987`de RSA Laboratories tarafindan gelistirilen bir simetrik akis sifreleme metodudur. Pseudo-random numara sirasina dayalidir. RC4`den elde edilen cikis bilgi akisi ile XOR`lanir. Bu sebeple hicbir RC4 anahtari iki farkli bilgi akisini kriptolamak icin kullanilmamalidir. RC4, 1 ile 2048-bit arasi uzunluklarda anahtarlari destekler. Fakat Amerika disina satilan yazilimlarda 40-bit sinirlamasi uygulanir. 40-bit altindaki anahtarlarin RC4 ile kullanilmasi tavsiye edilmez. Geçmişte bu kriptolama kırılmıştır.

Algoritma ilk adımı tanımlanan değerlerle S-tablosunu oluşturur.  S-dizisi oluştuktan sonra kullanılan dizi keylerini karıştırılır. Bunu da yapmak için 256 defa gerçekleyen bir döngüye girer.

topla  j = j + S[i] + key[i mod keylength]
karıştır S[i] and S[j]
artır  i


Şimdi S dizisi üretildi, anahtar üretimi için bir sonraki aşamada kullanılacaktır.

Bu adımda algoritma bize herhangi bir uzunluktaki anahtar dizisi üretmeye izin verecektir.  2 gösterge başlatırız ve kriptolamak için mesaj boyuna erişilir erişilmez, o zaman anahtar üretimi başlatırız.
i := 0
j := 0
while GeneratingOutput:
                i := (i + 1) mod 256   // i ve j’nin yeni değerleri hesaplanır
                j := (j + S[i]) mod 256
                swap values of S[i] and S[j] // değiştirilir.
                K := S[(S[i] + S[j]) mod 256]  // anahtardizisinin gelecek byte tekrar elde edilir.
                output K
endwhile

Enson da kriptolamak için düz metin ile anahtar dizisi XOR’lanarak kriptolu bilgi elde edilir.

De-kriptoma da tersi olacaktır.


Sonraki Bölüm>>