Dolgu oracle saldırısı - Padding oracle attack
Kriptografide, dolgulu oracle saldırısı , şifreli metnin şifresini çözmek için kriptografik bir mesajın dolgu doğrulamasını kullanan bir saldırıdır . Kriptografide, değişken uzunluktaki düz metin mesajlarının, temeldeki kriptografik ilkel ile uyumlu olması için genellikle doldurulması (genişletilmesi) gerekir . Saldırı, bir mesajın doğru şekilde doldurulup doldurulmadığına dair sorulara özgürce yanıt veren bir "dolgu oracle" a sahip olmaya dayanır. Dolgu oracle saldırıları çoğunlukla blok şifrelerinde kullanılan CBC modu şifre çözme ile ilişkilidir . OAEP gibi asimetrik algoritmalar için doldurma modları da oracle saldırılarının doldurulmasına karşı savunmasız olabilir.
Simetrik kriptografi
Simetrik kriptografide, dolgu oracle saldırısı , " oracle " ın (genellikle bir sunucu) şifrelenmiş bir mesajın dolgusunun doğru olup olmadığına dair verileri sızdırdığı CBC çalışma moduna uygulanabilir . Bu tür veriler, saldırganların, şifreleme anahtarını bilmeden oracle anahtarını kullanarak oracle aracılığıyla mesajların şifresini çözmesine (ve bazen şifrelemesine) izin verebilir.
CBC şifrelemesine dolgu oracle saldırısı
Blok şifrelerde CBC şifre çözmenin standart uygulaması, tüm şifreli metin bloklarının şifresini çözmek, dolguyu doğrulamak, PKCS7 dolgusunu kaldırmak ve mesajın düz metnini döndürmektir. Sunucu, genel bir "şifre çözme başarısız" hatası yerine "geçersiz doldurma" hatası döndürürse, saldırgan, iletilerin şifresini çözmek (ve bazen şifrelemek) için sunucuyu bir dolgu oracle olarak kullanabilir.
CBC şifre çözme için matematiksel formül
Yukarıda tasvir edildiği gibi, CBC şifre çözme, önceki şifreli metin bloğu ile her bir düz metin bloğunu XORlar. Sonuç olarak, bloktaki tek baytlık bir değişiklik, içindeki tek bir bayta karşılık gelen bir değişiklik yapacaktır .
Saldırganın iki şifreli metin bloğu olduğunu ve düz metni elde etmek için ikinci bloğun şifresini çözmek istediklerini varsayalım . Saldırgan (yaratmanın ) son baytını değiştirir ve sunucuya gönderir . Sunucu daha sonra şifresi çözülen son bloğun ( ) dolgusunun doğru olup olmadığını (0x01'e eşit) döndürür . Dolgu doğruysa, saldırganın artık son bayt olduğunu bilir olduğunu . Bu nedenle, son eşittir baytı . Dolgu yanlışsa, saldırgan son bayt'ı bir sonraki olası değere değiştirebilir. Saldırganın son baytını bulmak için en fazla 256 deneme (olası her bayt için bir tahmin) yapması gerekecektir . Şifresi çözülen blok doldurma bilgisi veya doldurma için kullanılan baytlar içeriyorsa, bu belirsizliği çözmek için ek bir girişimde bulunulması gerekecektir.
Son baytını belirledikten sonra , saldırgan aynı tekniği kullanarak ikinci-son baytını elde edebilir . Saldırgan, 'nin son baytını' olarak ayarlayarak son baytı ' e ayarlar . Saldırgan daha sonra yukarıda açıklanan aynı yaklaşımı kullanır, bu kez dolgu doğru olana kadar (0x02, 0x02) ikinci-son baytı değiştirir.
Bir blok 128 bitten ( örneğin AES) oluşuyorsa , bu 16 bayttır, saldırgan en fazla 255⋅16 = 4080 denemede düz metin elde edecektir . Bu, 128 bitlik bir anahtara zorlama girişimlerinden çok daha hızlıdır .
Padding oracle attack (CBC-R) ile mesajları şifreleme
CBC-R, bir şifre çözme oracle'ını bir şifreleme kahinine dönüştürür ve öncelikle dolgu oracle'larına karşı gösterilir.
Dolgu oracle saldırısının kullanılması CBC-R, herhangi bir düz metin için bir başlatma vektörü ve şifreli metin bloğu oluşturabilir:
- herhangi bir şifreli metnin şifresini çözme P i = PODecrypt (C i ) XOR C i − 1 ,
- önceki şifre bloğunu seç C x − 1 serbestçe,
- geçerli şifreli metin / düz metin çifti üretir C x-1 = P x XOR PODecrypt (C i ) .
N blok uzunluğunda bir şifreli metin oluşturmak için , saldırganın N sayıda dolgu oracle saldırısı gerçekleştirmesi gerekir . Bu saldırılar, mesajın sonundan ( C N ) başlangıç mesajına ( C 0 , IV) doğru düz metin ters sırada inşa edilecek şekilde birbirine zincirlenir . Her adımda, IV'ü önceki seçilen şifreli metne dönüştürmek için doldurma oracle saldırısı kullanılır.
CBC-R saldırısı, şifresini çözmeden önce şifreli metni doğrulayan (bir mesaj kimlik doğrulama kodu veya benzeri kullanarak) bir şifreleme düzenine karşı çalışmayacaktır .
Dolgu oracle'larını kullanan saldırılar
Orijinal saldırı 2002'de Serge Vaudenay tarafından yayınlandı . Saldırının somut örnekleri daha sonra SSL ve IPSec'e karşı gerçekleştirildi. Ayrıca çeşitli uygulandı web çerçeveler dahil JavaServer Faces , Ruby on Rails ve ASP.NET gibi hem de diğer yazılımlar, Buhar oyun istemcisi. 2012 yılında bazı sertleştirilmiş güvenlik cihazlarına karşı etkili olduğu gösterildi.
Bu önceki saldırılar , genel duyurusunun ardından çoğu TLS uygulayıcısı tarafından giderilirken, 2013'te yayınlanan yeni bir varyant olan Lucky Thirteen saldırısı , daha önce düzeltilmiş uygulamalarda bile güvenlik açığını yeniden açmak için bir zamanlama yan kanalı kullandı. 2014'ün başlarından itibaren, belirli bir makine sınıfına karşı teorik olarak hala uygulanabilir olmasına rağmen (bkz. Sinyal-gürültü oranı ) saldırı, gerçek hayattaki operasyonda artık bir tehdit olarak görülmüyor . 2015 itibarıyla, İnternet trafiğini güvence altına almak için kullanılan kriptografik protokollere yönelik saldırıların en aktif geliştirme alanı, istemcileri eski istemcilerle uyumluluk için sağlanan daha az güvenli kriptografik işlemleri kullanmaları için kandıran Logjam ve Export RSA / FREAK saldırıları gibi düşürme saldırılarıdır. daha güvenli olanlar mevcut olduğunda. POODLE adlı bir saldırı (2014 sonu), aktarılan verilerin tehlikeye atılmasını sağlamak için hem eski sürüme düşürme saldırısını (SSL 3.0'a) hem de daha eski, güvenli olmayan protokole yapılan bir dolgu oracle saldırısını birleştirir. Mayıs 2016'da CVE - 2016-2107'de OpenSSL'de Lucky Thirteen'e karşı yapılan düzeltmenin başka bir dolgu oracle getirdiği ortaya çıktı.