# Blok şifreleme
Kriptografide blok şifreleme, "blok" olarak adlandırılmış sabit uzunluktaki bit grupları üzerine simetrik anahtar ile belirlenmiş bir deterministik algoritmanın uygulanmasıdır. Blok şifreleme birçok kriptografik protokol tasarımının önemli temel bileşenlerindendir ve büyük boyutlu verilerin şifrelemesinde yaygın biçimde kullanılmaktadır.
"Bileşke şifreleme", tek başına zayıf olan kriptografik yapıların bir araya getirilerek daha kuvvetli bir yapının oluşmasıyla elde edilir. Blok şifrelemenin temelinde tekrarlanan bileşke şifreleme vardır. 1949 yılında, yeni ufuklar açan yayını Gizlilik Sistemlerin Haberleşme Teorisi ile Claude Shannon bileşke şifrelemeyi önerip analiz ederek, substitüsyon ve permutasyon gibi iki basit operasyonu birleştirip etkin biçimde güvenliği artırmıştır. Şifreleme işlemi, tekrarlanan bileşke şifre kullanılarak birden çok "raund"da gerçekleşir ve her raundda "ana anahtar"dan üretilmiş farklı bir "alt anahtar" kullanılır. Bu tür şifrelerin yaygın bir uygulaması da Horst Feistel tarafından adlandırılmış olan ve özellikle de DES şifrelemedeki kullanımıyla dikkat çeken Feistel ağıdır. Diğer birçok blok şifreleme yapısı ise AESde olduğu gibi substitüsyon-permutasyon ağıdır.
1997 yılında ABD Ulusal Standartlar Bürosu (şimdiki adı [National Institute of Standards and Technology], NIST) tarafından DES şifrelemenin yayınlanması, modern blok şifreleme dizaynı için bir temel oluşturmuştur. Aynı şekilde akademik kriptanaliz yöntemlerinin gelişmesini de etkilemiştir. Diferansiyel ve lineer kriptanaliz yöntemleri DES dizaynı üzerine çalışmasıyla ortaya çıktı. Günümüzde, bir blok şifreleme birçok atak tekniğine karşı güvenli olmalıdır ve kaba kuvvet saldırılarına karşı da dayanıklı olmalıdır.
Güvenli bir blok şifreleme tek bir bloğun sabit bir anahtar kullanılarak şifrelenmesi için uygundur. Şifreleme ve kimlik doğrulama gibi güvenlik hedeflerine ulaşabilmek için çoklu blok şifre çalışma kipleri dizayn edilmiştir. Bununla birlikte, evrensel özet fonksiyonu ve sözderastlantısal sayı üreteci gibi diğer kriptografik protokollerde blok üretimi için de blok şifreleme kullanılmaktadır.
Ek ücret değerlendirilmesi için de blok şifresi girilmelidir.


## Tanım.
Bir blok şifreleme iki algoritmadan oluşur, birincisi şifreleme için, "E" ve ötekisi şifreyi çözmek için, "D". Her iki algoritma da iki adet girdi alır, "n" bit uzunluğunda bir blok ve "k" bit uzuluğunda bir anahtar; ve her ikisi de çıktı olarak "n" bit uzunluğunda blok üretir. Şifre çözme algoritması "D" şifrelemenin ters fonksiyonudur, yani "D" = "E"−1. Biçimsel olarak, şifreleme fonksiyonu 
E_K(P) := E(K,P): {0,1}^k ×{0,1}^n →{0,1}^n,
şeklinde tanımlanmıştır. Fonksiyon girdi olarak "k" bit "anahtar uzunluğu"na sahip anahtar "K" ve "n" bit "blok uzunluğu"na sahip "P" dizisi alarak "n" bitlik "C" dizisini üretiyor. "P" şifresiz metin ve "C" ise şifreli metin olarak adlandırılır. Her "K" için, "E""K"("P") fonksiyonu {0,1}"n" üzerinde tersi alınabilir olmalıdır. "E" fonksiyonunun tersi 
E_K^-1(C) := D_K(C) = D(K,C): {0,1}^k ×{0,1}^n →{0,1}^n,
şeklinde tanımlanmıştır. Fonksiyon girdi olarak anahtar "K" ve şifreli metin "C" alıp, çıktı olarak şifresiz metin "P" vermektedir, öyle ki
∀K: D_K(E_K(P)) = P.
Örneğin, bir blok şifreleme algoritması girdi olarak 128-bit şifresiz metin alarak, çıktı olarak 128-bit şifreli metin verebilir. Asıl dönüşümü sağlayan ikinci girdi olan gizli anahtardır. Şifre çözme de aynı şekildedir: şifre çözme algoritması 128-bit şifreli metinle beraber gizli anahtarı alarak çıktı olarak 128-bitlik orijinal şifresiz metni oluşturur.
Her anahtar "K" için, "EK" girdi blokları kümesi üzerine bir permutasyondur (bijeksiyon eşlemesi). Her anahtar olası (2^n)! permutasyondan bir adet seçer.


## Dizayn.
### Tekrarlanan Blok Şifreler.
Çoğu blok şifre tekrarlaran blok şifreler olarak sınıflandırılır, yani şifresiz metin sabit boyutta bloklara bölünerek aynı boyuttaki şifreli metin bloklarına dönüştürülür ve bu tekrarlanan tersi alınabilir dönüşüme "raund fonksiyonu" adı verilirken, her bir tekrara da "raund" denir.
Raund fonksiyonu "R" genellikle ikinci girdi olarak orijinal anahtardan üretilen "raund anahtarı" "Ki" alır:
M_i = R_K_i(M_i-1),
ve burada "r" raund sayısı olmak üzere M_0 şifresiz metin ve M_r ise şifreli metindir.
Buna ek olarak anahtar beyazlatma sık olarak kullanılır. Başta ve sonda veri anahtar malzemesi ile modifiye edilir (genellikle XOR kullanılır, ama toplama ve çıkarma gibi basit aritmetik işlemleri de kullanılabilir):
 M_0 = M ⊕K_0 
M_i = R_K_i(M_i-1) ; i = 1 …r
C = M_r ⊕K_r+1


### Substitüsyon-Permutasyon Ağı.
Diğer bir önemli tekrarlanan blok şifre türüyse substitüsyon-permutasyon ağıdır. Burada şifreli metin bloğu ve anahtar girdi olarak alınır ve birbirlerini izleyen raundlarda substitüsyon aşaması ve ardından permutasyon aşamasıyla her bloğa ait şifreli metinler üretilir. 
Lineer olmayan substitüsyon aşamasında şifresiz metin bitleri anahtar bitleri ile karıştırılarak Shannon'un "karışıklığı" elde edilir. Lineer olan permutasyon aşamasında ise bitler dağıtılarak "diffüzyon" sağlanır.
Substitüsyon kutusu (S-kutusu) kullanılarak girdi olarak alınan ufak bit bloklarından çıktı olarak başka bit blokları elde edilir. Tersinin olması için substitüsyon birebir olmalıdır. Güvenli bir S-kutusunda bir girdi biti değiştirilirse çıktı bitlerinin ortalama yarısı değişmelidir, yani her çıktı biti tüm girdi bitlerine bağlıdır.
Permutasyon kutusu (P-kutusu) tüm bitlerin yer değiştirmesidir: bir raunddaki tüm S-kutularının çıktılarını alıp bitlerin yerleri değiştirir ve bir sonraki raunddaki S-kutularına girdi olarak verir. İyi bir P-kutusu herhangi bir S-kutusunun çıktısını mümkün olduğunca fazla S-kutusuna dağıtabilmelidir.
Her raundda ana anahtardan üretilen raund anahtarları bazı grup operasyonları kullanılarak işleme dahil edilir. Burada genellikle XOR işlemi kullanılır.
Şifreyi çözme ise tüm bu işlemleri tersten yapılmasıyla kolayca yapılır.


### Feistel Ağı.
Feistel ağında, şifrelenecek olan şifresiz metin bloğu iki eşit uzunluktaki parçaya ayrılır. Alt anahtar kullanılarak raund fonksiyonu bu yarımlardan birine uygulandıktan sonra öteki yarı ile XOR'lanır. Ardından iki yarı yer değiştirir.
F raund fonksiyonu olsun ve 0,1,…,n için sırasıyla K_0,K_1,…,K_n alt anahtarlar olsun.
Basit işleyiş şu şekildedir:
Şifresiz metin bloğu iki eşit uzunluktaki parçaya ayrılır, (L_0, R_0)
i =0,1,…,n numaralı her raund için 
L_i+1 = R_i 
R_i+1= L_i ⊕F(R_i, K_i)
hesapla.
Sonrasında (R_n+1, L_n+1) şifreli metindir.
(R_n+1, L_n+1) şifreli metnini çözme işlemi, i=n,n-1,…,0 için sırasıyla 
R_i = L_i+1 
L_i = R_i+1 ⊕F(L_i+1, K_i)
hesaplanmasıyla elde edilir.
Ardından (L_0,R_0) şifresiz metindir.
Feistel ağının subtitüsyon-permutasyon ağına göre bir avantajı ise F raund fonksiyonun tersinin olma zorunluluğunun olmamasıdır.


## Çalışma kipleri.
Kriptografide çalışma kipleri, bir blok şifrenin tek bir anahtar altında güvenli bir şekilde tekrarlı kullanımına olanak veren yöntemlerdir.
Değişken uzunluktaki mesajları işlemek için veriler ayrı parçalara bölünmelidir. Son parça şifrenin blok uzunluğuna uyacak şekilde uygun bir tamamlama şeması ile uzatılmalıdır. Bir çalışma kipi bu bloklardan her birini şifreleme şeklini tanımlar ve genellikle bunu yapmak için ilklendirme vektörü (IV) olarak adlandırılan rastgele oluşturulmuş fazladan bir değer kullanır.
Çalışma kipleri özellikle şifreleme ve kimlik doğrulamada kullanılmak üzere oluşturulmuştur.
Tarihsel olarak çalışma kipleri çeşitli veri değiştirme senaryoları altında hata yayılma özellikleri bakımında geniş bir biçimde çalışılmıştır. Bütünlük koruması şifrelemeden tamamen farklı bir kriptografik amaç olarak doğmuştur. Kimlik doğrulamalı şifreleme kipi olarak bilinen bazı modern çalışma kipleri şifreleme ve kimlik doğrulamayı verimli bir şekilde birleştirmiştir.
Çalışma kipleri çoğunlukla simetrik şifrelemeyle ilişkilendirilmiş olsa da teoride RSA gibi açık anahtarlı şifreleme yöntemlerinde de kullanılabilir. (Ancak uygulamada uzun mesajların açık anahtarla şifrelenmesi genellikle melez şifreleme kullanılarak yapılır.


## Dolgu.
CBC gibi bazı modlar tam şifresiz metin blokları üzerinde çalışmak ister. Son bloğu 0-bitleri ile tamamlamak işe yaramaz, çünkü alıcı orijinal mesajla tek farkı dolgu olan yeni mesajı ayırt edemeyebilir. Daha da önemlisi böyle bir çözüm "dolgu kâhin atağı" ile sorun çıkarabilir. Bu nedenle daha iyi bir dolgu şeması gerekmektedir. ISO/IEC 9797-1'de "dolgu metodu 2" olarak geçen yöntem kullanılmaktadır: mesaja 1-bit'i ekleyip son blok 0-bit ile tamamlanır. Bu tür ataklara karşı güvenilirliği ispatlanmıştır.


## Kriptanaliz.
### Kaba kuvvet ataklar.
Blok şifrelemenin tersine çevrilebilir fonksiyonundan dolayı, doğumgünü problemi kullanılarak blok şifre çıktısının zamanla gerçek rastgeledizilerden ayırt edilebileceğini söyleyebiliriz. Bu özellikten ötürü sistemin güvenliği blok uzunluğunun karekökü ile orantılıdır. Blok uzunluğunu çok büyük seçmek ise performans kaybına sebep olacaktır, bu yüzden aradaki dengeyi korumak gerek. Eski blok şifrelerden DES 64-bit blok uzunluğu kullanıyorken, yeni olan AES ise 128-bit kullanmaktadır.


## Pratik değerlendirme.
Pratikte blok şifreleme birçok alanda değerlendirilebilir. Ortak faktörler:
 - Anahtar ve blok uzunluğu gibi temel parametreler güvenlik için bir üst limit oluştururlar.
 - "Tahmini güvenlik seviyesi", algoritma açıklandıktan sonra yapılan kriptanalizler, matematiksel dayanakları ve mevcut atak türleri ile ölçülür.
 - "Karmaşıklık", şifrelemenin donanım ve yazılım üzerine uygulamalarının sonuçları ile ölçülür.
 - "Performans" ölçümü sırasında çeşitli platformlardaki çalışmaları göz önüne alınır ve buna gerekli olan bellek miktarı da dahil edilir.
 - "Esneklik" ise şifrelemenin çeşitli blok ve anahtar boyutlarını desteklemesidir.