# Padding oracle atağı
Kriptolojide padding oracle atağı kriptografik bir mesaja padding(doldurma) denilen yöntemin uygulanması sonucunda ortaya çıkmaktadır. Padding (cryptography) kriptografide özellikle blok şifrelemelerde değişken uzunluktaki mesajların uzatılarak aynı blok uzunluğuna gelmesi için doldurulmasını sağlamaktadır. Açık anahtarlamalı yapılarda da kullanılmaktadır. Oracle, kriptografide bir testin başarılı olup olmadığını gösteren mekanizmaya denir. Bu mekanizma genellikle karşımıza sunucu olarak çıkmaktadır. Padding oracle atağı da, mesaj bloklarının doldurulmasının doğru olup olmamasına cevap verilmesi özelliğine dayanmaktakdır. Bu atak genellikle blok şifrelemelerde kullanılan CBC (Cipher Block Chanining) moduyla ilişkilendirilir. Ayrıca asimetrik algoritmalarda (örneğin OAEP) padding oracle zafiyeti olabilir.


## Simetrik Şifreleme.
Simetrik kriptografide, padding oracle atağı (oracle attack) CBC mode da şifreleme işlemine uygulanabilir. Sunucunun blok doldurma işleminin doğru olup olmadığı bilgisini sızdırması sonucunda saldırgana şifreleme anahtarını bilmeden sunucunun anahtarını kullanarak, şifreyi çözmesine imkân tanımaktadır. CBC modunun şifre çözme mekanizması aşağıda gösterilmiştir.


### CBC Modda Atak Örneği.
Saldırganın elinde üç adet C_1, C_2, C_3 şifreli blok olduğunu ve ikinci bloğun (yani P_2) şifresini çözmek istediğini farzedelim. Saldırgan sadece C_3 son bloğun PKCS7 doldurma(padding) metodu ile doğru olarak doldurulduğunu (padded) biliyor. PKCS7'de doldurma işlemi, n byte kadar eksik byte varsa oraya 0xn şeklindedir. Aşağıdaki resim doldurma işlemini özetlemektedir.
CBC şifre çözme işlemi yukarıdaki resimde de belirtildiği gibi şu şekilde çalışır P_i = D_K(C_i) ⊕C_i-1, C_0 = IV. Eğer saldırgan C_1 in son byte'ını değiştirip, (IV,C_1,C_2)'i sunucuya gönderirse, P_1'in tüm bloğu (avalanche effect) ve P_2'nin son byte'ı ( XORing operasyonundan dolayı) etkilenir.
Bundan sonra sunucu, en son şifresi çözülen blokun (yani P_2) doldurmasının(padding) doğru olup olmadığını döndürür (bu kontrol şifresiz mesaj işlenmeden önce gerçekleştirilir).
b_-1, C_1'in son byte'ı olsun. Saldırgan b_-1'i şu şekilde değiştirsin b_-1 = b_-1 ⊕z_-1 ⊕0x01 (z_-1, P_2'in tahmin edilen son byte'ı olsun). Eğer z_-1 doğru bir tahmin ise (yani P_2'nin doğru son byte'ı ise), sunucu doldurma(padding) hatası vermeyecektir. Eğer sunucu doldurma (padding) hatası verirse, saldırgan z_-1'in hatalı olduğunu anlayacaktır. Bu sebepten saldırgan z_-1 için diğer değerleri deneyecektir. Bu şekilde 255 denemede z_-1'in değeri bulunmuş olacaktır. Sonuç olarak P_2'nin son byte'ı elde edilmiş olur.
Saldırgan P_2'nin son byte'ını elde ettikten sonra son byte'dan bir önceki byte'ı bulmaya çalışacaktır. Bunu da b_-1 = b_-1 ⊕z_-1 ⊕0x02 ve b_-2 = b_-2 ⊕z_-2 ⊕0x02 şeklinde yapacaktır.
Böylelikle saldırgan tüm bloğu elde edebilecektir.
Farz edelimki 128 bits AES kullanılarak şifrelenmiş bloklar var elimizde. Saldırgan P_2'yi 255⋅16 = 4080 denemede elde edebilecektir. Bu atak birkaç saniye içinde başarıyla gerçekleştirilebilir.


## Padding oracle atakları.
Orijinal padding oracle atağı 2002 yılında Serge Vaudenay tarafından yazılmıştır. 2010 yılında ise atak, JavaServer Faces, Ruby on Rails ve ASP.NET. gibi web çatılarına uygulanmıştır. 2012'de bazı güçlendirilmiş donanımlarada atak yapılabildiği gösterilmiştir
Birçok TLS geliştiricisi tarafından bu zafiyet giderilmiş olsa da zaman yan-kanal analizi kullanan Lucy Thirteen Attack olarak bilinen atak 2013 yılında yayınlandı. 2014 başlarında, gerçek hayatta bir tehdit olarak değerlendirilmese de teoride ( bkz: Signal-to-noise ratio) bazı sınıf cihazlarda hala uygulanabilir durumdadır. 2015'te, kriptografik protokollere yapılan ataklar indirgeme (downgrade attacks) atakları örneğin Logjam ve Export RSA/FREAK atakları gibi karşımıza çıkmaktadır. Bu atak destekleyen istemcilerin daha düşük seviyeli protokelleri kullandırılması prensibine dayanmaktadır. 2014 sonlarında ortaya çıkan PODDLE atağı ise hem indirgeme(SSLv3.0) hem de padding oracle atağını kullanarak güvensiz protokol kullanımını sağlayarak transfer edilen şifreli verinin ele geçirilmesini sağlamaktadır.