Doldurma (kriptografi)

Resmi mesajlar genellikle başlangıcı ve sonu tahmin edilebilir şekildedir: Sevgili büyükelçi, Hava Durumu raporu, Saygılarımla vb. Klasik şifrelemeyle birlikte kullanılan doldurmanın birincil kullanım amacı; kriptoanalistin bilinen açık mesajı bulmasını sağlayacak tahmin edilebilirliğin engellenmesi ve böylece şifrelemenin kırılmasının engellenmesidir. Rastsal uzunlukta doldurma, aynı zamanda saldırı yapan kişinin açık mesajın uzunluğunu bilmesini de engellemektedir.Birçok klasik şifreleme açık mesajı belirli bir kalıba (örneğin kareler, dikdörtgenler vb.) çevirmekte ve eğer açık mesaj bu kalıba tam anlamıyla uymazsa, bu kalıba uygun hale getirmek için fazladan harfler eklemek çoğunlukla elzemdir. Bu amaçla anlamsız harfler eklemek bazı kriptoanaliz türlerinin zorlaşması gibi bazı ek yararları vardır.Klasik doldurmanın ünlü örneklerinden birisi olan "Dünyanın Harikaları" büyük bir yanlış anlamaya sebebiyet vermiştir.En modern kriptografik özet fonksiyonları mesajları belirli boyutlu bloklar halinde işler, özet fonksiyonlarının erken örnekleri dışındaki tüm özet fonksiyonları bir şekilde doldurma şeması içermektedir. Kriptografik özet fonksiyonlarının sonlandırma şeması içermesi özetin mesaj uzatımı saldırılarına karşı zayıf olmasını engeller.Birçok doldurma şeması son bloğa tahmin edilebilir veri ekleme şeklindedir. Örneğin, dolgu mesajın uzunluğundan türetilebilir. Bu tür doldurma şemaları çoğunlukla Merkle-Damgard yapısını kullanan özet algoritmalarında kullanılmaktadır.Elektronik kod defteri ve şifre bloğu zincirleme blok şifreleme modu örneklerindendir. Simetrik anahtar şifreleme için blok şifreleme modu, açık mesaj girdisinin blok boyutunun katı olacak uzunlukta olmasını zorunlu tutar, böylece mesajlar bu uzunluğa erişecek şekilde doldurulabilir.Blok şifreleme modu yerine akan şifreleme modunda yükseliş mevcut. Akan şifreleme moduna sayaç modu örnek gösterilebilir. Akan şifreleme her boyutta mesajı şifreleyebilir ya da şifreli mesajı çözebilir, bundan dolayı herhangi bir doldurma gerektirmez. Şifreli mesajdan çalma veya artık blok sonlandırımı gibi daha karmaşık yolların mevcut olmasından dolayı doldurma işlemine olan ihtiyacı ortadan kaldırır.Doldurmanın bir dezavantajı da açık mesajı, doldurma tahmini saldırılarına açık kılmasıdır. Doldurma tahmini saldırıları, saldırgana açık mesaj hakkında blok şifreye saldırmadan bilgi sağlar. Doldurma tahmini saldırıları, saldırganın doldurma baytlarının ortadan kaldırılması hakkında bilgi edinmesi engellenerek önlenebilir. Bu ise mesaj doğrulama kodu veya dijital imzanın doldurma baytlarının ortadan kaldırılması öncesinde doğrulanması ile veya akan şifreleme moduna geçerek sağlanabilir.Mesaja sadece bir tane doldurma biti ('1') ve gerektiği kadar (hiç gerekmeyebilir) sıfırlama biti ('0') eklenir. Sıfırlama biti ('0') sayısı mesajın bit eklenerek genişletilmesi gereken blok sınırına bağlıdır. Bit açısından bu "1000 ... 0000" olarak gösterilebilir.Bu yöntem herhangi bir uzunluktaki mesajı doldurmak için kullanılabilir, tabi bu baytlarca olmak zorunda değil. Örneğin, 32 bitlik bir bloğu doldurmak için 9 bitle doldurulmuş 23 bitlik bir mesaj:Bu doldurma işlemi MD5 ve SHA gibi birçok özet fonksiyonunun iki aşamalı doldurma işleminin ilk aşamasıdır. Bu RFC1321 kısım 3.1 ile belirlenmiştir.ANSI X.923'te son bayt doldurmanın sınırını veya doldurma işlemi yapılmış toplam baytı gösterir, ayrıca sıfır ile doldurulmuş baytlar doldurma işlemi sonucu oluşmuştur.Örnek: Aşağıdaki örnekte blok büyüklüğü 8 bayt olup doldurma işlemi için 4 bayt gerekmektedir (on altı tabanında)ISO 10098'a (geri çekildi, 2007) göre doldurma işlemi son bloğun sonunda rastsal baytlar ile yapılmalı ve doldurma işleminin sınırı son bayt ile belirtilmelidir.Doldurma işlemi tüm baytlardadır. Eklenen her baytın değeri eklenen bayt sayısına eşittir, yani N bayt varsa, her bir doldurma baytının değeri N olacaktır. Eklenen baytların sayısı mesajın genişletilebileceği bloğun sınır değerine bağlı olacaktır.Bu doldurma yöntemi(son anlatılan ikisi de dahil olmak üzere) ancak ve ancak N sayısı 256'dan küçük ise iyi tanımlanmış bir doldurma yöntemidir.Eğer asıl veri Nin katı bir tam sayı ise, fazladan N değerli bloklar eklenecektir. Bu, mesajı çözen algoritmanın çözülen kısmın kesin olarak doldurma kısmı veya açık mesaj kısmı olup olmadığına karar verebilmek için gerekli bir işlemdir. Son baytı 01  olan Nin tam katı bir açık mesaj varsayılırsa, başka herhangi bir bilgi verilmeden mesajı çözen algoritma, bu baytın açık mesaj baytı ya da doldurma baytı olduğunu çözemez. Ama 01 açık mesaj baytının sonrasında N baytlık her biri N değerinde bayt eklenirse, şifre çözme algoritması her zaman son baytı doldurma baytı olarak görür ve şifrelenmiş mesajın sondaki doldurma baytlarından gerektiği kadar kısmı kaldırır, ortadan kaldırılacak baytların sayısı sondaki baytın değerine göre karar verilir.PKCS#5 doldurma ile PKCS#7 ile neredeyse aynıdır, sadece PKCS#5 64 bitlik(8 baytlık) bloklar kullanan blok şifreleme için tanımlanmıştır. Pratikte ikisi birbirinin yerine kullanılabilir.ISO/IEC 7816-4:2005 bit doldurma şemasıyla birebir aynı, N baytlık açık mesajlara uygulanır.  Zorunlu '80'(on altı tabanında) baytı ve gerekirse 0 ile N-1 arasında '00' baytı kullanılarak bloğun sonuna ulaşılana kadar doldurulur. ISO/IEC 7816-4, dosya yönetim sistemi  içeren akıllı kartlar için bir iletişim standardı olup, herhangi bir kriptografik tanımlama içermemeDoldurulması gereken baytlar sıfır ile doldurulur. Sıfır ile doldurma şifreleme için standart olarak tanımlanmış olmasa da, ISO/IEC 10118-1 ve ISO/IEC 9797-1'de özet fonksiyonları ve mesaj doğrulama kodunda 1. Doldurma Yöntemi olarak belirtilmiştir.Sıfır ile doldurma geri döndürülemez olabilir, eğer asıl dosya bir veya daha fazla sıfır bayt ile bitiyorsa, bu da doldurma baytları ile açık mesajın baytlarının birbirinden ayrımını imkânsız kılar. Sıfır ile doldurma genelde mesajın uzunluğunun mesaja bakmadan tespit edildiği durumlarda kullanılır. Sıfır ile doldurma genellikle ikilik tabanda olarak şifrelenmiş dizilerde uygulanır. Bu dizilerde sıfırlar genelde boşluk olarak görülür.Sıfır ile doldurma çoğu zaman "sıfırla doldurma" veya "sıfır bayt doldurma" olarak anılır. Ayrıca bazı uygulamalarda eğer açık mesaj blok büyüklüğüne tam bölünüyorsa, mesajın tam sonuna ek sıfırlarla doldurulmuş bir blok eklenir.Açık anahtarlı şifrelemede, doldurma işlemi, mesaj şifreleme için veya özellik kullanarak imzalama veya PKCS#1 v1.5, OAEP, PSSR, IEEE P1363 EMSA2 ve EMSA5 gibi şemaların ön hazırlığıdır. Asimetrik ilkel şifrelemede doldurma işleminin güncel hali OAEP'nin RSA algoritmasına uygulanmasıdır, bu sınırlı sayıda bayt mevcutsa kullanılabilir.Bu operasyon "doldurma" olarak adlandırılır, çünkü ilkel şifrelemelerde rastsal oluşturulmuş baytlar yeterince uzun olması için mesajın sonuna eklenirdi. Bu doldurma işlemi güvenli olmadığı için artık uygulanmamaktadır. Güncel doldurma şemaları saldırganın açık mesajı etkileyememesini sağlayarak ilkel şifreleme sisteminin matematiksel yapısını etkilemesinin önüne geçmeyi amaçlar ve genellikle yanında bir kanıt eşlik eder, genelde rastsal kahin modeli, bu kanıt ilkel şifreleme sisteminin kırılmasının doldurma şemasının kırılması kadar zor olduğunu gösterir.En iyi kriptografik işlemler kullanılsa dahi, saldırgan trafiğin ne kadar büyüklükte aktığını görebilir. Saldırgan Alice ve Bob'un ne konuştuğunu bilemese de, konuştuğunu ve ne kadar konuştuğunu bilebilir. Bazen bu çok kötü durumlara sebebiyet verebilir. Örneğin, bir ülkenin askeri yapısı başka bir ülkeye gizli bir saldırı gerçekleştiriyorsa, büyük bir gizli trafiğin akıyor olması diğer ülkenin durumu anlaması için yeterli olacaktır.Bir başka örnek ise IP üzerinden sesli iletişim (VoIP) trafiği şifrelenirken değişken bit oranlı şifreleme kullanır, bu da bir birim zamanda ne kadar bit işleneceğinin belirsiz olmasını sağlar. Bu da konuşulan cümlenin tahmin edilmesiyle kötüye kullanılabilir.Mesajları doldurma trafik analizini zorlaştırır. Normalde, mesajın sonuna ne kadar eklendiği bilgisiyle birlikte rastgele sayıda bit eklenir. Bu rastsallık minimum 0 değerli, maksimum N değerli olmalı ve bu iki sınır içerisinde eşit dağılmalıdır. Açıktır ki 0'i arttırmanın herhangi bir yararı olmaz, ama N'i arttırmak rastsallığı arttıracaktır, fakat bu da kullanılan trafiğin daha azının gerçek veri için kullanması anlamına gelecektir. Ayrıca kriptografik işlemlerin kırılamayacağı varsayılmaktadır(aksi takdirde doldurma işlemi de kırılabilir olur), doldurma işleminin mesajın başka yerlerine, örneğin başına, ortasına veya dağınık halde, yapılmasının herhangi bir yararı olmayacaktır. Bu sebeple, doldurma işlemi yapılandırılabilir(örneğin tamamen sıfırla doldurulabilir), fakat zamanlama saldırısında (timing attack) açıklandığı gibi yapılandırmak tehlikeli olabilir.