Diyelim ki bir dosyayı simetrik anahtarla şifreleyen bir sunucum var, ör. AES-CBC ve şifresini çözen müşterilere gönderir. Bu, şifresi çözüldüğünde veri bütünlüğü sağlıyor mu? Ya da birisinin hala şifrelenmişken dosyayı kurcalaması ve daha sonra istemci dosyanın şifresini çözmesi durumunda değiştirilmiş bir dosya üretmesi mümkün müdür?
Tipik olarak veri bütünlüğü ve gerçekliğinin dijital imzalar veya MAC kullanımı açısından tartışıldığını görüyorum, ancak asla şifreleme bağlamında değil. Şifrelemenin karmadan daha pahalı olduğunu gösteren kriterler de gördüm, ancak bu benim ana düşüncem değil.
GÜNCELLEME
Bir dosyayı şifrelemek için Linux'taki openssl aracını kullandığım bir deneme denedim. Sonra, dosyayı çeşitli şekillerde değiştirmeyi denedim (bayt değiştirme, bayt silme, bayt ekleme). Her durumda, şifre çözmeyi denediğimde, "kötü şifre çözme" mesajı alırdım. Kullandığım komutlar:
openssl enc -aes-128-cbc -in test -out test.enc openssl enc -d -aes-128-cbc -in test.enc -out test.dec
Simetrik şifreleme sağlamaz bütünlük sağlar. Saldırganın şifrelenmiş veriler üzerinde sahip olabileceği denetim miktarı şifreleme türüne bağlıdır; ve bazı şifreleme modlarının bazı özel ayrıntıları, cerrahi değişiklikler yapmak istiyorsa, saldırgan için hayatı biraz zorlaştırabilir. CBC ile saldırgan, bir düzine başka baytı rasgele önemsiz hale dönüştürmeyi düşünmemesi koşuluyla istediği her şeyi çevirebilir.
Simetrik şifrelemeyi ve kontrol edilen bütünlüğü birleştiren son şifreleme modları vardır (bir MAC ). Bu modlar hem gizliliği hem de bütünlüğü sağlar. AES-CBC değil bunlardan biri. Bütünlük içeren bir şifreleme modu istiyorsanız EAX öneririm.
Güncelleme: denemenizle ilgili: CBC, kaynak veri uzunluğunun blok şifreleme blok uzunluğunun (AES için 16 bayt) katı olması gereken bir moddur. . Rasgele bir giriş mesajı herhangi bir uzunluğa sahip olabileceğinden, bazı dolgu eklenir: şifre çözme üzerine açık bir şekilde kaldırılabilecekleri belirli içeriklere sahip birkaç bayt. Sizin durumunuzda, OpenSSL, şifre çözme üzerine uygun bir dolgu yapısı bulamadığından şikayet ediyor. Ancak, saldırgan şifrelenmiş verilerin son 32 baytını değiştirmezse, dolgu zarar görmez, bu nedenle son 32 bayt dışındaki tüm değişiklikler algılanmaya devam eder. Ve son 32 bayt için bile, çok küçük olmayan bir olasılıkla algılamadan kaçınmanın yolları vardır.
CBC şifreleme veri bütünlüğü sağlamaz. İşte nedeni:
Bazı k anahtarlarını düzeltin (saldırgan tarafından bilinmeyen). E (k, -) ve D (k, -) bazı blok şifrelerin çıplak şifreleme ve şifre çözme işlevleri olsun. P düz metnin tek bir bloğu olsun. XOR + işaretini göstereceğim. Bazı IV'leri düzelttikten sonra şu şekilde şifreliyoruz:
c = E (k, p + IV).
Sonra tel üzerinden IV ve c göndeririz. Şifresini çözmek için hesaplıyoruz
p = D (k, c) + IV.
(Bunun D (k, c) = IV + s. İfadesine eşdeğer olduğuna dikkat edin.)
Şimdi, bir saldırganın tek bir düz metin/şifreli metin çifti bildiğini varsayalım. Bunları yukarıdaki gibi p ve (IV, c) olarak gösterelim. Şimdi, saldırganın seçtiği diğer düz metin bloğunun şifresini çözecek şifreli metin oluşturmak istediğini varsayalım - diyelim '. (IV + p + p ', c)' nin şifresini çözdüğünü iddia ediyorum. Neden?
IV'ü IV + p + p 'ile değiştirerek yukarıdaki şifre çözme prosedürünü izliyoruz. Sahibiz
D (k, c) + (IV + p + p ') = (IV + p) + (IV + p + p') = p '.
Eğlenceli bir şekilde, ECB modu bu soruna karşı savunmasız değildir (yine de kullanımını da desteklemiyorum).
AES-CBC şifrelemesi bütünlük sağlamaz. Nasıl uygulandığına ve kullanıldığına bağlı olarak, şifre metninde bazı yanlışlıkla değişiklikler tespit edilebilir, ancak şifre metninde kötü niyetli müdahalelere karşı korunmaz .
Kimlik doğrulaması olmadan şifreleme, kriptografi kullanımındaki en yaygın hatalardan biridir . ASP.NET, XML şifreleme, Amazon EC2, JavaServer Faces, Ruby, OWASP ESAPI, IPSEC ve WEP dahil) birçok sistemde ciddi güvenlik açıklarına yol açmıştır. daha fazla bilgi.
Düzeltme: EAX gibi kimliği doğrulanmış bir şifreleme düzeni (AES-CBC değil) kullanmalı veya şifreleme-sonra-kimlik doğrulama modunda CMAC gibi bir ileti kimlik doğrulama kodu kullanmalısınız.
Kriptografiyi kendiniz uygulayacaksanız, en yaygın hatalardan bazılarından kaçınmanıza yardımcı olmak için burada Öğrenilen dersler ve şifreleme ve kriptoloji ile ilgili yanlış kavramlar başlıklı soruyu okumanızı öneririz. Kimlik doğrulaması olmadan şifreleme kullanmak bunlardan biridir.
Simetrik şifreler kendi başlarına bütünlük sağlamazlar çünkü şifreleme metninde kötü amaçlı veya yanlışlıkla yapılan değişiklikler tespit etmezler; şifre çözme orijinal düz metinden başka bir şey çıktı ve bu şifre çözülmüş yük için bazı protokol ihlali ile sonuçlanmazsa, bir bütünlük sorunu var.
Çözüm, paketin bütünlüğünü doğrulamak için kullanılabilecek verileri içeren düz metinleri, genellikle karma tabanlı bir sağlama toplamı ( düzenlemesi olarak paketlemektir: HMAC anahtarlı). Bu, ör. Taşıma Katmanı Güvenliği için.
İşte bir Versile Platform güvenli bayt taşıma protokolünde kullanılan bir düz metin koruma şemasının örnek (sorumluluk reddi: VP geliştirmesine katılıyorum).
Düzenleme: Mesaj kapsüllemenin, tam bir dosya içeren senaryonuz için aşırıya kaçmış olduğunu fark ettim ve bu yüzden tam olarak anahtarlı bir MAC eklemeniz daha iyi şifreli. Paket korumalı formatlar için D.W. ayrıntılar önemlidir ve "sağlama toplamı" anahtarlı bir MAC olarak yapılmalıdır.