# Biçim korumalı şifreleme
Kriptografide, biçim korumalı şifreleme, çıktı (şifreli metin) ve giriş (düz metin) aynı formatta olacak şekilde şifreleme anlamına gelir. "Biçim" in anlamı değişir. Biçimin anlamı için tipik olarak sadece sonlu alanlar tartışılır, örneğin:
  - Şifreli metnin 16 haneli başka bir sayı olması için 16 haneli bir kredi kartı numarasını şifrelemek. 
  - Şifreli metnin başka bir İngilizce kelime olması için İngilizce bir kelimeyi şifrelemek. 
  - Şifreli metnin "n" bitlik başka bir sayı olması için "n" bitlik bir sayıyı şifrelemek. (Bu bir "n" bitlik blok şifre tanımıdır.)
Bu tür sonlu alanlar ve aşağıdaki tartışmanın amaçları için, şifre "N" adet tam sayının bir permütasyonuna {0, ..., "N"−1} eşdeğerdir. Burada "N" alanın boyutudur.


## Motivasyon.
### Sınırlı alan uzunlukları veya biçimleri.
Biçim korumalı şifrelemenin kullanılma sebeplerinden biri, iyi tanımlanmış veri modelleri olan mevcut uygulamalara şifrelemenin entegre edilmesinden kaynaklanan sorunlardır. Tipik bir örnek, 1234567812345670 (16 bayt uzunluğunda, sadece basamaklar) gibi bir kredi kartı numarasıdır .
Bu tür uygulamalara şifreleme eklemek, eğer veri modelleri değiştirilecekse, genellikle alan uzunluğu sınırlarını veya veri türlerini değiştirmeyi içerdiğinden zor olabilir. Örneğin, tipik bir blok şifrenin çıktısı, kredi kartı numarasını onaltılık (örneğin, 0x96a45cbcf9c2a9425cde9e274948cb67, 34 bayt, onaltılık basamaklar) veya Base64 değerine (örneğin, lqRcvPnCqUJc3p4nSUjLZw==, 24 karakter, alfanümerik ve özel karakterler) dönüştürecektir, bu da kredi kartı numarasının 16 haneli bir sayı olmasını bekleyen uygulamaları bozacaktır..
AES-128-CBC kullanarak basit biçimlendirme sorunlarının yanı sıra, bu kredi kartı numarası onaltılık değerine 0xde015724b081ea7003de4593d792fd8b695b39e095c98f3a220ff43522a2df02 şifrelenebilir. Geçersiz karakterler oluşturmanın ve verilerin boyutunu artırmanın yol açtığı sorunlara ek olarak, bir şifreleme algoritmasının CBC modu kullanılarak şifrelenen veriler, şifresi tekrar çözüldüğünde ve şifrelendiğinde de değerini değiştirir. Bunun nedeni, şifreleme algoritmasını başlatmak için kullanılan ve şifrelenmiş değerin bir parçası olarak dahil edilen rastgele tohum değerinin her şifreleme işlemi için farklı olmasıdır. Bu nedenle, veritabanındaki bir satırı tanımlamak için CBC moduyla şifrelenmiş verileri benzersiz bir anahtar olarak kullanmak imkânsızdır.
Biçim korumalı şifreleme, orijinal verilerin biçimlendirmesini ve uzunluğunu koruyarak geçiş işlemini basitleştirmeye çalışır ve eski uygulamalarda düz metin değerlerinin şifrelenmiş değerleriyle değiştirilmesine olanak tanır.


## Gerçekten rastgele permütasyonlarla karşılaştırması.
Her ne kadar gerçekten rastgele bir permütasyon ideal biçim korumalı şifreleme şifresi olsa da, büyük alanlar için gerçekten rastgele bir permütasyonun önceden oluşturulması ve hatırlanması mümkün değildir. Bu nedenle biçim korumalı şifrelemenin problemi, gizli bir anahtardan tek bir değerinin hesaplama süresi küçük olan sözde rastgele bir permütasyon oluşturmaktır (ideal olarak sabit, ancak en önemlisi "O(N)"'den daha küçük olacak şekilde).


## Blok şifrelerle karşılaştırılması.
Bir n bit blok şifresi teknik olarak {0, ..., 2n-1} setinde bir biçim korumalı şifrelemedir. Bu standart boyutlu setlerden birinde (örneğin DES için n = 64 ve AES için n = 128) bir biçim korumalı şifreleme gerekiyorsa, doğru boyutta bir blok şifre kullanılabilir.
Bununla birlikte, tipik kullanımda, bir blok şifre keyfi olarak uzun mesajları şifrelemesine izin veren bir çalışma modunda ve yukarıda tartışıldığı gibi bir başlatma vektörü ile kullanılır. Bu modda, bir blok şifre biçim korumalı şifreleme değildir.


## Güvenlik tanımı.
Kriptografik literatürde (aşağıdaki referansların çoğuna bakınız), "iyi" bir biçim korumalı şifrelemenin ölçüsü, bir saldırganın biçim korumalı şifrelemeyi gerçekten rastgele bir permütasyondan ayırt edip edemeyeceğidir. Bilinen 'şifreli metin/düz metin' ikilisine erişimine bağlı olarak çeşitli saldırgan türleri olduğu önerilmektedir.


## Algoritmalar.
Burada listelenen yaklaşımların çoğunda, iyi anlaşılmış bir blok şifreleme (AES gibi) ideal bir rastgele fonksiyonun yerini alan bir öncü olarak kullanılır. Bunun avantajı, gizli bir anahtarın algoritmaya dahil edilmesinin kolay olmasıdır. Aşağıdaki tartışmada AES'den bahsedildiği gibi, diğer tüm iyi blok şifreler de işe yarayacaktır.


### Black ve Rogaway'in biçim korumalı şifreleme yapıları.
Güvenli bir şekilde biçim korumalı şifrelemeyi uygulamanın altında yatan blok şifresinin güvenliği, ilk defa John Black ve Phillip Rogaway tarafından bunu yapmanın üç yolunun tanımlandığı bir makalede ele alınmıştır. Bu tekniklerin her birinin, onu inşa etmek için kullanılan blok şifresi kadar güvenli olduğunu kanıtlamışlardır. Bu şu anlama gelir, AES algoritması bir biçim korumalı şifreleme algoritması oluşturmak için kullanılırsa, sonuçta ortaya çıkan biçim korumalı şifreleme algoritması AES kadar güvenlidir, çünkü biçim korumalı şifreleme algoritmasını yenebilen bir saldırgan AES algoritmasını da yenebilir. Bu nedenle, AES güvenliyse, ondan oluşturulan biçim korumalı şifreleme algoritmaları da güvenlidir. Aşağıdakilerin hepsinde "E" bir biçim korumalı şifreleme algoritması oluşturmak için kullanılan AES şifreleme işlemini ve "F" ise biçim korumalı şifreleme işlemini belirtir.


#### Bir önek şifresinden biçim korumalı şifreleme oluşturma.
Böylece, K anahtarı verildiğinde, {0,1,2,3} alanında bir biçim korumalı şifreleme oluşturmak için her tam sayıya AES (K) uygulanır, örneğin:
"weight"(0) = 0x56c644080098fc5570f2b329323dbf62
"weight"(1) = 0x08ee98c0d05e3dad3eb3d6236f23e7b7
"weight"(2) = 0x47d2e1bf72264fa01fb274465e56ba20
"weight"(3) = 0x077de40941c93774857961a8a772650d
[0,1,2,3] 'ün ağırlığa göre sıralanması [3,1,2,0]' u verir, böylece şifre aşağıdaki gibi olur.
"F"(0) = 3
"F"(1) = 1
"F"(2) = 2
"F"(3) = 0.
Bu yöntem sadece küçük N değerleri için kullanışlıdır. Daha büyük değerler için, arama tablosunun boyutu ve tabloyu başlatmak için gereken şifreleme sayısı pratik olamayacak kadar büyük olur.


#### Döngü yürüyüşünden biçim korumalı şifreleme oluşturma.
Eğer bir sözde rastgele permütasyon P alanında izin verilen değerlerin olduğu bir "M" kümesi varsa (örneğin P, AES gibi bir blok şifreleme olabilir), sonuç izin verilen değerlerden ("M" kümesi içinde) biri olana kadar tekrar tekrar blok şifrelemeyi uygulayarak blok şifrelemeden bir biçim korumalı şifreleme algoritması oluşturulabilir. 
 CycleWalkingFPE(x)
 if "P"(x) is an element of "M"
 return "P"(x)
 else 
 return CycleWalkingFPE("P"(x))
Özyinelemenin sona ermesi kesindir. ("P" bire bir ve alan sonlu olduğu için, "P '"nin tekrarlanan uygulaması bir döngü oluşturur, bu nedenle "M'"deki bir noktadan başlandığında, döngü en sonunda "M"'de sona erecektir.)
Bunun avantajı, "M" 'nin öğelerinin ardışık bir tam sayılar dizisi {0. . ., "N" -1} ile eşleşmesi gerekmemesidir. Bunun dezavantajı, "M" P'nin alanından çok daha küçük olduğunda, her işlem için çok fazla yineleme gerekebilir. Eğer P, AES gibi sabit boyutlu bir blok şifresiyse, bu yöntemin verimli olduğu "M" kümesinin boyutları üzerinde ciddi bir kısıtlama getirir.
Örneğin, bir uygulama 100 bit değerlerini AES ile başka bir 100 bit değer oluşturacak şekilde şifrelemek isteyebilir. Bu teknikle, AES-128-ECB şifrelemesi, en yüksek 28 bitinin tümü 0'a ayarlanmış bir değere ulaşana kadar uygulanabilir ve ortalama 228 yineleme gerçekleştirir.


#### Feistel ağından biçim korumalı şifreleme oluşturma.
Feistel ağı kullanarak bir biçim korumalı şifreleme algoritması yapmak da mümkündür. Bir Feistel ağı, her turda alt anahtarlar için sözde rastgele değerler kaynağına ihtiyaç duyar ve AES algoritmasının çıktısı bu sözde rastgele değerler olarak kullanılabilir. Bu yapıldığında, yeterli sayıda tur kullanılırsa ortaya çıkan Feistel yapısı iyidir.
AES ve bir Feistel ağı kullanarak bir biçim korumalı şifreleme algoritması uygulamanın bir yolu, Feistel ağının sol veya sağ yarılarının uzunluğunu eşitlemek için AES çıkışından gereken sayıda bit kullanılmasıdır. Örneğin bir alt anahtar olarak 24 bitlik bir değere ihtiyaç duyulursa, bu değer için AES çıkışının en düşük 24 bitini kullanmak mümkündür.
Bu, Feistel ağının çıkışının giriş formatını korumasına neden olmayabilir, ancak Feistel ağını, bisiklet yürüyüşü tekniğinin formatın korunmasını sağlamak için yaptığı gibi tekrarlamak mümkündür. Girişlerin boyutunu bir Feistel ağına ayarlamak mümkün olduğundan, bu yinelemenin ortalama olarak çok hızlı bir şekilde bitmesi çok olasıdır. Kredi kartı numaraları söz konusu olduğunda, örneğin 1016 tane olası 16 haneli kredi kartı numarası vardır ve 1016 = 253.1 olduğundan, döngü yürüyüşüyle birlikte 54 bit genişliğinde Feistel ağı kullanmak ortalama olarak oldukça hızlı bir şekilde şifreleyen bir biçim korumalı şifreleme algoritması oluşturacaktır.


### Thorp karıştırması.
Bir Thorp karıştırması, idealize edilmiş bir kart karıştırması veya bir tarafın tek bir bit olduğu maksimum dengesiz bir Feistel şifresi gibidir. Dengesiz Feistel şifreleri için güvenliği kanıtlamak dengeli olanlardan daha kolaydır.


### VIL modu.
İkinin kuvveti olan alan boyutları ve daha küçük bir blok boyutuna sahip mevcut bir blok şifresi için, Bellare ve Rogaway tarafından açıklanan VIL modu kullanılarak yeni bir şifre oluşturulabilir.


### Hasty Pudding (HPC) Şifresi.
HPC Şifresi, keyfi seçilmiş sonlu küçük alanları şifrelemek için özel yapılar (öncü olarak mevcut blok şifrelemelere bağlı olmayan) kullanır.


### AES'in FFSEM / FFX modu.
NIST tarafından değerlendirilmek üzere kabul edilen AES'in (özellikleri) FFSEM modu, yukarıda açıklanan Black ve Rogaway'in Feistel ağ yapısını, tur fonksiyonu AES olacak şekilde, küçük bir değişiklikle kullanır: tek bir anahtar kullanılır ve her tur için anahtar hafifçe değiştirilir.
Şubat 2010'dan itibaren FFSEM'in yerini Mihir Bellare, Phillip Rogaway ve Terence Spies tarafından yazılan FFX modu aldı. (özellikleri, ).


### JPEG 2000 şifrelemesi için biçim korumalı şifreleme.
JPEG 2000 standardında, işaret kodları (0xFF90 - 0xFFFF aralığında) düz metin ve şifreli metinde görünmemelidir. Basit modüler-0xFF90 tekniği JPEG 2000 şifreleme sorununu çözmek için uygulanamaz. Örneğin, şifreleme metni sözcükleri 0x23FF ve 0x9832 geçerlidir, ancak bunların kombinasyonu olan 0x23FF9832, 0xFF98 işaret kodunu ortaya çıkardığı için geçersiz olur. Benzer şekilde, basit döngü yürüyüş tekniği JPEG2000 şifreleme sorununu çözmek için uygulanamaz, çünkü iki geçerli şifre metni bloğu birleştirildiğinde geçersiz şifre metni verebilir. Örneğin, ilk şifreli metin bloğu "... 30FF" baytları ile biterse ve ikinci şifreli metin bloğu "9832 ..." baytları ile başlarsa, şifreli metinde "0xFF98" işaret kodu görünür.
JPEG 2000 için biçim korumalı şifreleme olarak Hongjun Wu ve Di Ma tarafından yazılan "JPEG2000 için etkili ve güvenli Şifreleme Sistemleri" isimli makalede 2 yöntem verilmiştir. JPEG 2000'in biçim korumalı şifrelemesini gerçekleştirmek için verilen teknik, "0xFF" baytını şifreleme ve şifre çözme işleminin dışında tutmaktır. Daha sonra bir JPEG 2000 şifreleme mekanizması, dizi şifresi ile modulo-n ekleme yapar; başka bir JPEG 2000 şifreleme mekanizması, blok şifreleme ile döngü yürüyüş tekniğini gerçekleştirir.


### Diğer biçim korumalı şifreleme yapıları.
Birkaç biçim korumalı şifreleme yapısı, şifrelenecek verilere standart bir şifre çıktısının, modulo-n ile birlikte, sonucu ortaya çıkarmak için çeşitli yöntemlerle eklenmesine dayanır. Yapıların birçoğu tarafından paylaşılan modulo-n ilavesi, biçim korumalı şifreleme problemi için açık bir çözümdür (bu nedenle birçok durumda kullanılır), ana farklılıklar ise kullanılan ortaya çıkarma mekanizmalarıdır.
FIPS 74 Bölüm 8, "Federal Bilgi İşleme Standartları Yayını 1981 NBS Veri Şifreleme Standardını Uygulama ve Kullanma Yönergeleri", DES şifreleme algoritmasını, modulo-n ilavesi ve takiben bir ortaya çıkarma işlemi yoluyla verilerin biçimini koruyacak şekilde kullanmanın bir yolunu açıklamaktadır. Bu standart 19 Mayıs 2005'te kaldırılmıştır, bu nedenle bu teknik resmi bir standart olarak kullanılmamalıdır.
Format korumalı şifreleme için bir başka erken mekanizma, sonucu tekdüze hale getirmek için bazı ayarlarla birlikte herhangi bir şifre üzerinde tekrar modulo-n eklemesi yapan ve sonuçta ortaya çıkan şifrelemenin dayandığı temel şifreleme algoritması kadar güçlü olduğu, Peter Gutmann'ın "Sınırlı değer aralığına sahip verileri şifreleme" isimli mekanizmasıdır.
Michael Brightwell ve Harry Smith tarafından yazılan "Veri Ambarı Güvenliğini Artırmak için Veri Türü Korumalı Şifrelemeyi Kullanma" makalesinde DES şifreleme algoritmasını düz metnin biçimini koruyacak şekilde kullanmanın bir yolu açıklanmaktadır. Bu teknik, burada atıfta bulunulan diğer modulo-n tekniklerinde olduğu gibi, tarafsız bir adım uygulamıyor gibi görünmemektedir.
Mihir Bellare ve Thomas Ristenpart'ın "Biçim Korumalı Şifreleme" adlı makalesinde, güvenli biçim korumalı şifreleme algoritmaları oluşturmak için "neredeyse dengeli" Feistel ağlarının kullanılması açıklanmaktadır.
Ulf Mattsson tarafından yazılan "Veri Türü Korumalı Şifrelemeyi Kullanarak Biçim Kontrollü Şifreleme" makalesinde biçim korumalı şifreleme algoritmaları oluşturmanın diğer yolları açıklanmaktadır.
Biçim korumalı şifreleme algoritmasının bir örneği FNR'dir ("Flexible Naor ve Reingold").


## Standart yetkililer tarafından biçim korumalı şifreleme algoritmalarının kabulü.
NIST Özel Yayını 800-38G, "Blok Şifreleme Çalışma Modları için Öneri: Biçim Korumalı Şifreleme Yöntemleri" iki yöntem belirler: FF1 ve FF3. Her biri için sunulan tekliflerle ilgili ayrıntılar, patent ve test vektörü bilgileri de dahil olmak üzere NIST Blok Şifreleme Modları Geliştirme sitesinde bulunabilir. Hem FF1 hem de FF3 için örnek değerler mevcuttur.
  - FF1, ANF X9 altındaki X9.119 ve X9.124 gibi standart işlemlerde de bulunan FFX [Radix] "Biçim Korumalı Feistel Tabanlı Şifreleme Modu" dur. Mihir Bellare, Phillip Rogaway ve Terence Spies tarafından NIST'e sunulmuştur. Test vektörleri de verilmiştir ve parçaları patentlidir. (DRAFT SP 800-38G Rev 1) şifrelenen verilerin minimum alan boyutunun 1 milyon olmasını gerektirir (önceden 100).
  - FF3, daha sonra yazarların adını taşıyan BPS olarak adlandırılmıştır. Fransa, Ingenico'dan Eric Brier, Thomas Peyrin ve Jacques Stern tarafından NIST'e sunulmuştur. Yazarlar NIST'e algoritmalarının patentli olmadığını beyan etmişlerdir. HPE Voltage şirketi, BPS modu için de patent sahibi olduğunu iddia etmiştir. 12 Nisan 2017'de NIST, araştırmacılar bir güvenlik açığı bulduğundan dolayı FF3'ün "artık genel amaçlı bir biçim korumalı şifreleme yöntemi olarak uygun olmadığı" sonucuna varmıştır.
  - FF3-1 (DRAFT SP 800-38G Rev 1) FF3'ün yerini almıştır ve şifrelenen verilerin minimum alan boyutunun 1 milyon (önceden 100) olmasını gerektirir.
Taslak NIST kılavuzuna başka bir mod dahil edilmiş, ancak nihai yayından önce kaldırılmıştır.
  - FF2, FFX için VAES3 şemasıdır: "Şifrelemeyi Korumak için FFX Çalışma Modu" eki: Şifreleme anahtarının ömrünü uzatmak için alt anahtar işlemiyle rastgele sayı tabanı şifreleme dizeleri için bir parametre koleksiyonu. VeriFone Systems Inc. şirketinden Joachim Vance tarafından NIST'e sunulmuştur. Test vektörleri FF1'den ayrı olarak verilmemiştir ve parçaları patentlidir. Yazarlar NIST tarafından aktif olarak değerlendirilen DFF olarak değiştirilmiş bir algoritma sunmuşlardır.