Blok şifre çalışma kipleri

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.).

İlk çalışma kipleri ECB, CBC, OFB ve CFB 1981 yılına kadar dayanır ve FIPS 81, DES Modes of Operationda tanımlanmıştır. 2001 yılında NIST SP800-38A, 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 SP800-38E, 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 FIPS 198, The Keyed-Hash Message Authentication Code (HMAC) olarak onaylandı, CMAC 2005'te SP800-38B , Recommendation for Block Cipher Modes of Operation: The CMAC Mode for Authentication ile tanımlandı ve GMAC 2007 yılında SP800-38D, 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 (SP800-38C), GCM (SP800-38D), 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) ç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.

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 bit'ini takiben yeterince sıfır bit'i 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 Şifreleri'in 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 olmaduğı uygulamalarda tercih sebebi yapar.

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.

Ş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.

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 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.

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'de kullanılmamıştır.

Ş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 xorlanı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 xorlayı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.

Eğer şifreli metinden x bit kaybolursa, kaydırma yazmacı bir kez daha şifreleme sırasındaki duruma eşit oluncaya kadar şifre yanlış şifresiz metin üretir bu durumda şifre yeniden senkronize edilir. Bu, n/s blok boyutunda çıktının n blok boyutu ve s kaydırılan bit sayısı ile karışmasına neden olur.

CBC kipinde olduğu gibi, şifresiz metinde değişiklikler şifreli metinde sonsuza dek yayılır ve şifreleme paralelleştirilemez. CBC gibi, şifre çözme paralelleştirilebilir. Şifre çözme işlemi gerçekleştirilirken, şifreli metindeki bir bit değişikliği iki şifresiz metin bloklarını etkiler: karşılık gelen şifresiz metin bloğundaki bir bit değişiklik ve sonraki şifresiz metin bloğunun tamamındaki bozulma. Sonraki şifresiz metin blokları normal olarak çözülür.

CFB, CBC kipine göre akış şifreleme kipleri olan OFB ve CTR ile iki avantaj paylaşır: blok şifre sadece şifreleme yönünde kullanılır ve mesajın şifre bloğu katlarına doldurulması gerekmez (şifreli metnin çalınması, dolguyu gereksiz kılmak için kullanılabilir).

Çıktı geri bildirim kipi bir blok şifreyi bir senkron akış şifre yapar. Anahtar akışı blokları oluşturur, bunlar daha sonra şifreli metin üretmek için şifresiz metin bloklarıyla XORlanır. Diğer akış şifrelerinde olduğu gibi, şifreli metinde bir bit döndürmek şifresiz metinde aynı konumda döndürülmüş bit üretir. Bu özellik, şifrelemeden önce uygulandığında bile hata düzeltme kodlarının normal çalışmasına izin verir.

Çıktı geri bildirim blok şifreleri operasyonları öncekilerin hepsine bağlıdır, bu yüzden paralel olarak çalıştırılamaz. Ancak, şifreli metin veya şifresiz metin sadece son XOR için kullanıldığından, blok şifreleme operasyonu işlemleri önceden gerçekleştirilebilir, son adımın şifreli veya şifresiz metin müsait olduğunda paralel çalıştırılabilmesine izin verilir.

CBC kipi ile girdi olarak sıfırlardan oluşan bir sabit dizi kullanarak OFB kipi anahtar akışı elde etmek mümkündür. Bu kullanışlı olabilir çünkü OFB kipi şifrelemesi için CBC kipi hızlı donanım implementasyonlarının kullanılmasına izin verir.

OFB kipini bir kısmi blokla geri bildirim olarak CFB kipi gibi kullanmak ortalama çevrim uzunluğunu 232 veya daha fazla bir faktör ile azaltır. Davies ve Parkin tarafından önerilen bir matematiksel model ve deneysel sonuçlarla doğrulanan yalnızca tam geri bildirim ile maksimuma yakın ortalama çevrim uzunluğunun elde edilebildiğini göstermiştir. Bu yüzden, kesik geri bildirim için destek OFB spesifikasyonundan kaldırılmıştır.

OFB gibi, sayaç kipi bir blok şifreyi akış şifreye çevirir. Sonraki anahtar akış bloğunu bir “sayacın” ardışık değerlerini şifreleyerek oluşturur. Sayaç uzun bir süre tekrar etmeyeceği garanti olan bir dizi üreten herhangi bir fonksiyon olabilir, buna rağmen gerçek bir artış sayacı en basit ve en popüler olanıdır. Basit bir deterministik girdi fonksiyonu kullanımı önceden tartışmalıydı; eleştirmenler “kripto sistemi bilinen bir sistematik girdiye kasıtlı olarak maruz bırakmanın gereksiz bir risk temsil ettiğini” tartıştı. Ancak, günümüzde CTR kipi yaygın olarak kabul edilmektedir ve herhangi bir sorun girdisindeki sistemik yanlılığa bakılmaksızın güvenli olması beklenen blok şifresinin bir zayıflığı olarak kabul edilir. CBC ile, CTR kipi Niels Ferguson ve Bruce Schneier tarafından önerilen iki blok şifreleme kipinden biridir.

CTR kipi OFB kipi ile benzer karakteristiğe sahiptir, ama aynı zamanda şifre çözme sırasında rastgele erişim özelliğine izin verir. CTR kipi, blokların paralel olarak şifrelenebildiği çok işlemcili bir makinede çalışmak için uygundur. Ayrıca OFB’yi etkileyebilen kısa çevrim probleminden etkilenmez.

Eğer IV/tek-seferlik-şifre rastgele ise, daha sonra şifreleme için gerçek özgün sayaç bloğu üretmek üzere herhangi bir ters çevrilebilir işlem (ekleme, toplama veya XOR) kullanılarak sayaç ile birleştirilebilir. Rastgele olmayan tek-seferlik-anahtar durumunda (paket sayacı gibi), tek-seferlik-anahtar ve sayaç birleştirilmelidir (örneğin tek-seferlik-anahtarın 128 bit sayaç bloğunun üst 64 bitinde ve sayacın alt 64 bitinde depolanması). Basitçe tek-seferlik-anahtar ile sayacın tek bir değer olacak şekilde toplanması veya XORlanması çoğu durumda seçilen şifresiz metin saldırısı altında güvenliği bozar, çünkü saldırgan çarpışmaya sebep olmak için tüm IV-sayaç çiftlerini değiştirebilir. Saldırgan IV-sayaç çiftini ve şifresiz metni kontrol ettiğinde, şifreli metnin ve bilinen şifresiz metnin XORlanmasının ürettiği değer, aynı IV-sayaç çiftini paylaşan diğer bloğun şifresiz metniyle XORlandığında o bloğun şifresini çözer.

Bu şemadaki tek-seferlik-şifrenin diğer şemalardaki ilklendirme vektörüne (IV) eşdeğer olduğuna dikkat edin. Ancak, eğer uzaklık/konum bilgisi bozulmuşsa, bayt uzaklığına bağımlı olduğu için bu tür verilerin kısmi olarak kurtarılması imkânsız olacaktır.

Mesaj doğrulama kodları ve kimlik doğrulamalı şifrelemenin yaygın kullanımından önce çalışma kipleri için "hata yayılımı" özellikleri bir seçim kriteri olarak tartışılmıştır. Örneğin bir blokta meydana gelen hatanın ECB kipinde bir bloku, CBC kipinde ise iki bloku etkilemesi gibi.

Bazıları bu esnekliğin rastgele oluşan hatalara karşı arzu edilen bir koruma sağladığını, bazıları ise bu hata kurtarmanın kötü niyetli kişilerin yapabileceği mesajla oynama türevi saldırıları mümkün kılacağını savunmuştur.

Bu kiplerde bazıları XCBC, IACBC, IAPM, OCB, EAX, CWC, CCM, ve GCM'dir. Kimlik doğrulamalı şifreleme kipleri tek geçiş ve çift geçişli kipler olarak sınıflandırılır. Maalesef kriptografi kullanıcıları için tek geçişli kiplerin çoğu (OCB kipi gibi) patent koruması altındadır.

Bunlara ek olarak AEAD (Authenticated-Encryption with Associated-Data) olarak adlandırılan bazı kipler şifrelenmemiş ilave verinin kimlik doğrulamasına olanak verir. Örnek olarak çift geçişli EAX kipi ve tek geçişli OCB kipi gösterilebilir.

Blok şifreler için birçok kip önerilmiştir. Bazıları kabul görmüş, hatta standartlaşmış ve kullanımdadır. Bazıları da güvensiz bulunmuştur ve kullanılmaması gerekir. Gizlilik, kimlik doğrulamalı veya kimlik doğrulamalı şifreleme kategorilerine girmeyen Anahtar geribildirim kipi (KFM) ve AES-hash gibi örnekler de vardır.

Kimlik doğrulamalı şifreleme bileşen olarak blok şifreleri kullanır. Bu kipler gizlilik ve kimlik doğrulamayı aynı anda sağlar. IAPM, CCM, CWC, EAX, GCM ve OCB gibi örnekleri mevcuttur.