Blok şifre ç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.
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.).

Tarihçe ve standartlaşma
İlk çalışma kipleri ECB, CBC, OFB ve CFB 1981 yılına kadar dayanır ve FIPS 81 DES Modes of Operation da tanımlanmıştır. 2001 yılında NIST Recommendation for Block Cipher Modes of Operation ile CTR kipini ve AES blok şifresini ekleyerek onaylanmış çalışma kiplerini güncellemiştir. Son olarak NIST 2010 Ocak ayında Recommendation for Block Cipher Modes of Operation: The XTS-AES Mode for Confidentiality on Storage Devices ile XTS-AES kipini eklemiştir. NIST tarafından onaylanmamış başka çalışma kipleri de mevcuttur. Örneğin CTS (ciphertext stealing) kipi birçok popüler kriptografik kütüphanede bulunur.

ECB, CBC, OFB, CFB, CTS ve XTS kipleri sadece gizlilik sağlar; şifrelenmiş bir mesajın yanlışlıkla değiştiğinden ya da kasıtlı olarak oynanmadığından emin olmak için CBC-MAC gibi bir mesaj doğrulama kodu'na ihtiyaç vardır. Kriptografi topluluğu bir bütünlük kipinin gerekliliğinin farkına vardı ve NIST de HMAC, CMAC ve GMAC ile buna karşılık verdi. HMAC 2002'de The Keyed-Hash Message Authentication Code (HMAC) olarak onaylandı, CMAC 2005'te Recommendation for Block Cipher Modes of Operation: The CMAC Mode for Authentication ile tanımlandı ve GMAC 2007 yılında Recommendation for Block Cipher Modes of Operation: Galois/Counter Mode (GCM) and GMAC ile onaylandı.

Bir gizlilik kipini ve bütünlük kipini birleştirmeye çalışmanın güç ve hataya yatkın olmasının farkına varılmasıyla kriptografi topluluğu gizlilik ve bütünlüğü bir arada sağlayan kipler sunmaya başladılar. Bu kipler kimlik doğrulamalı şifreleme olarak bilinir. Örnekleri CCM GCM , CWC, EAX, IAPM ve OCB'dir.

Çalışma kipleri günümüzde ulusal ve uluslararası standart kuruluşları tarafından tanımlanmaktadır. Bunların başında NIST gelmektedir. Diğer önemli standart kuruluşları ISO, IEC, IEEE, ANSI ve IETF'dir.

İlklendirme vektörü (IV)
İlklendirme vektörü (IV) çeşitli kipler tarafından şifrelemeyi rassallaştırmak için kullanılan ve dolayısıyla aynı açık metnin tekrar şifrelendiği durumlarda anahtar değiştirmeden farklı şifreli metin üretilmesini sağlayan bir bit blokudur.
İlklendirme vektörünün güvenlik gereksinimleri anahtardan farklıdır, IV genellikle gizli olmak zorunda değildir. Ancak birçok durumda bir IV'in aynı anahtar ile tekrar kullanılmaması önemlidir. CBC ve CFB kipleri için aynı IV'nin tekrar kullanımı açık metnin ilk bloku hakkında ya da iki mesajın ortak ilk kısımları hakkında bilgi sızdırabilir. OFB ve CTR kiplerinde bir IV'yi yeniden kullanmak güvenliği tamamen yok eder. CBC kipinde IV ek olarak şifreleme anında tahmin edilememelidir, önceden yaygın olarak uygulanan bir sonraki mesajın IV'sini önceki mesajın son blokundaki şifreli metni olarak kullanmak güvenli değildir (bu yöntem SSL 2.0'da kullanılmıştır). Eğer bir saldırgan IV'nü (ya da önceki şifreli metin blokunu) sonraki açık metni seçmeden önce bilirse aynı anahtarla daha önce şifrelenmiş açık metinler hakkında tahmin yapabilir. (bu durum TLS CBC IV saldırısı olarak bilinir).

Özel bir durum olarak, eğer açık metinler bir bloka sığacak kadar küçük ise, ECB, CBC, PCBC gibi bazı kiplerde aynı IV'yi tekrar kullanmak açık metinlerin aynı olup olmadığı bilgisini açığa çıkarır. Bu durum bir kişinin deşifreleme yapmadan aynı metnin şifrelenip şifrelenmediğini anlayabilmesine yol açar.

Doldurma
Bir blok şifre, blok uzunluğu denen sabit uzunluktaki parçalar üzerinde çalışır, ancak işlenecek mesaj uzunluğu herhangi bir uzunlukta olabilir. Bu yüzden ECB, CBC gibi kipler son blokun şifrelemeden önce tamamlanmasını gerektirir. Birçok doldurma şeması vardır. En basiti açık metni blok uzunluğunun katı yapacak şekilde sıfır dizisi eklemektir, ancak deşifrelemeden sonra açık metnin ilk uzunluğunun bilinebilmesi için dikkatli olmak gerekir; örneğin açık metin C biçiminde bir dizinin sadece sonunda sıfır baytı içeriyorsa. Daha karmaşık bir yöntem mesaja tek adet bir bitini takiben yeterince sıfır biti ekleyerek bloku tamamlamayan DES yöntemidir; eğer orijinal mesajın uzunluğu blok uzunluğunun tam katıysa, bu durumda yeni bir tamamlama bloku eklenmiş olur. En karmaşık yöntemler fazladan kapalı metin üretimine neden olmayan ancak bunun karşılığında daha karmaşık olan CBC'ye has kapalı metin çalma tarzı şemalar veya artık blok sonlandırımıdır. Schneier ve Ferguson iki basit yöntem önermiştir: değeri 128 (hex 80) olan bir bayt ve ardından son bloku dolduracak kadar sıfır baytı ekleme veya son bloku değeri n olan n adet byte ile tamamlama.

CFB, OFB ve CTR kipleri açık metni şifrenin çıktısıyla XOR'lama işlemine tabi tuttukları için herhangi bir tamamlama gerektirmez. Bu kiplerde son açık metin parçası şifrenin çıktısının yeterli miktardaki kısmıyla XOR'lanarak açık metinle aynı uzunlukta kapalı metin oluşturur. Dizi şifrelerinin bu özelliği onları şifreli metnin açık metinle aynı uzunlukta olması gerektiği veya verinin akan bir yapıda iletildiği ve tamamlamanın uygun olmadığı uygulamalarda tercih sebebi yapar.

Elektronik kod defteri (ECB)
En basit şifreleme kipi elektronik kod defteri (ECB) kipidir. Mesaj parçalara ayrılır ve her parça ayrı ayrı şifrelenir.





Bu yöntemin dezavantajı aynı açık metinlerin şifrelendiğinde aynı kapalı metinlere dönüştürmesidir; bu yüzden mesajdaki örüntüleri belli eder. Başka bir deyişle mesaj gizliliği sağlanmayabilir ve kriprografik protokollerde kullanılması tavsiye olunmaz. ECB'nin açık metinlerdeki örüntüleri kapalı metinlere nasıl yansıttığının çarpıcı bir örneği aşağıda gösterilmiştir;
soldaki resmin pikselleri ECB kipiyle şifrelendiğinde ortadaki resim meydana çıkmıştır, sağdaki resim ise ECB dışındaki bir kip ile yapılan şifreleme sonucunu yansıtmaktadır.



Sağdaki resim CBC, CTR gibi daha güvenli kipler kullanıldığında ortaya çıkan sonuçtur ve rassallıktan ayırt edilemez.
Ancak resmin bu rassal görünüşü onun güvenli bir şekilde şifrelendiği anlamı taşımaz, çıktının rassal göründüğü birçok güvensiz şifreleme yöntemi vardır.

ECB kipi ayrıca doğruluk koruması bulunmayan protokollerde tekrar oynatma saldırılarına daha açıktır. Örneğin
Phantasy Star Online: Blue Burst çevrimiçi oyunu Blowfish blok şifresini ECB kipinde kullanır. Daha büyük açıklara yol açan anahtar değişim protokolünün kırılmasından önce hile yapmak isteyenler
Blowfish ile şifrelenmiş "monster killed" mesaj paketleri göndererek, oyunda haksız avantaj elde edebilmişlerdir.

Şifre-bloku zincirleme (CBC)
Şifre-bloku zincirleme (CBC) kipi IBM tarafında 1976 yılında geliştirilmiştir. CBC kipinde her açık metin bloku şifrelenmeden önce bir önceki kapalı metin bloku ile XORlanır. Bu sayede her kapalı metin bloku kendisinden önce gelen tüm açık metinlere bağımlı olmuş olur. Bir mesajın aynı anahtar altında tekrar şifrelendiğinin anlaşılamaması için ilk blokta ilklendirme vektörü (IV) kullanılmalıdır.





İlk blokun indeksine 1 dersek, CBC kipinin matematiksel ifadesi şu şekilde olur
CBC kipi ile şifrelenmiş metnin deşifreleme işlemi de şu şekilde yapılır
CBC kipi en yaygın olarak kullanılan kip olmuştur. Bu kipin en büyük dezavantajları blokların birbirine bağımlı olmalarından dolayı paralel olarak işlenememeleri ve tamamlama gerektirmesidir. Tamamlama sorununu çözmek için kapalı metin çalma yöntemi önerilmiştir.

Farklı bir IV ile deşifreleme yapmaya çalışmak ilk açık metin blokunun bozulmasına yol açarken diğer bloklar doğru şekilde deşifrelenecektir. Bunun sebebi bir açık metin blokunun kendisi ve önce gelen kapalı metin bloklarından çıkarılabilmesidir.
Sonuç olarak deşifreleme işlemi paralelleştirilebilir. Bir kapalı metin bitindeki hata o bloktaki açık metni tamamen bozar ve sonraki bloktaki açık metinde de karşılık gelen bitlerde hataya yol açar, ancak sonraki bloklarda bir bozulma olmaz.

Yayılan şifre-bloku zincirleme (PCBC)
Yayılan şifre-bloku zincirleme kipi ya da açık metin şifre-bloku zincirleme kipi kapalı metindeki ufak değişikliklerin deşifreleme yaparken sonraki bloklara belirsiz bir şekilde yayılması için tasarlanmıştır.





Şifreleme ve deşifreleme şu şekilde yapılır:

PCBC Kerberos v4 ve WASTE'de kullanılmış ancak bunun dışında yaygın değildir. PCBC ile şifrelenmiş bir mesajda ardışık iki kapalı metin bloku yer değiştirirse bu sonraki blokların deşifrelenmesini etkilemez. Bu sebeple PCBC Kerberos v5'te kullanılmamıştır.

Şifre Geri Bildirim (CFB)
Şifre geri bildirim kipi (CFB), CBC'nin bir benzeri olarak, bir blok şifreyi kendi kendine senkronize olan bir akış şifresi yapar. Bu operasyon oldukça benzerdir; özellikle, CFB şifre çözme, CBC şifrelenmesinin tersine gerçekleştirilmesiyle neredeyse aynıdır.











Kendinden senkronize şifre tanımından, eğer şifreli metnin bir parçası kaybolursa (iletim hatalarından kaynaklı olarak), bu durumda alıcı orijinal mesajın sadece bazı parçalarını kaybedecektir (bozuk içerik) ve bir miktar girdi verisi işlendikten sonra kalan blokların şifresini çözmeye devam eder. Bahsedilen bu CFB kullanımının kolay yolu, kendinden senkronize değildir. Eğer bir blok boyutu kadar şifreli metin kaybolduğunda ancak o zaman SFB senkron olacaktır, ama sadece tek bayt veya bit kaybetmek kalıcı olarak şifre çözümünü bozacaktır. Tek bit veya bayt kaybı olduğunda senkron hale getirebilmek için, bir seferde tek bir bayt veya bit şifrelenmedir. CFB, blok şifre için giriş olarak bir kaydırma yazmacı ile birleştirildiğinde bu şekilde kullanılabilir.

Kaybolan x bitlerinin herhangi biri için senkronize edecek kendinden senkronize olan bir akış şifresi oluşturmak amacıyla CFB kullanmak için, ilklendirme vektörü ile blok boyutunda bir kaydırma yazmacını oluşturarak başlayın. Bu blok şifre ile şifrelenir ve sonucun en yüksek x bitleri şifresiz metnin x bitleriyle XOR'lanır ve bu sayede şifreli metnin x bitlerini oluşturur. Çıktının bu x bitleri kaydırma yazmacına kaydırılır ve bu işlem (kaydırma yazmacını blok şifre ile şifreleme yaparak başlayan) şifresiz metnin sıradaki x bitleri için tekrar eder. Şifre çözme işlemi buna benzerdir, ilklendirme vektörü ile başlayın, sonucun yüksek bitlerini şifreli metnin x bitleri ile şifreleyip ve XOR'layıp şifresiz metnin x bitleri oluşturulur, sonra şifreli metnin x bitlerini kaydırma yazmacına kaydırın ve yeniden şifreleyin. Bu şekilde devam etmek CFB-8 veya CFB-1 (kaydırmanın büyüklüğüne bağlı) olarak biliniyor.

Notasyon olarak, Si kaydırma yazmacının durumu, a