Özetle, bazı bilgileri bir veritabanında şifreli veri olarak depolayan bir web uygulamasını ele alalım. Ben bilerek bunu genel ne tutmak için çalışırken, İşte bazı varsayımlar:
Sorular:
Bunun oldukça basit bir güvenlik sorusu olduğunu biliyorum ve bu yüzden belki de özlediğim kaynaklar varsa, bu da çok, çok yardımcı olacaktır. Web uygulaması güvenliği (OWASP, PCI DSS, vb.) Hakkındaki bilgilere dayanarak bu bilgileri kavramaya çalışarak (yıllar boyunca) çok zaman geçirdim, ancak çoğu zaman bu bilgiler çok genel (ör. "," verileri şifreleme ") veya çok özel (" AES ile bir şeyi şifrelemek için bunu yapın ... ").
* Bunun kendi başına tam bir güvenlik çözümü olmadığını anlıyorum. Bu bilgiye ulaşmak ve kodunu çözmek için birkaç vektör olduğunu anlıyorum. Bunun bu açıdan zayıf bir soru olabileceğini kabul ediyorum :)
Bu soruya varsayımlar hakkında daha fazla bilgi eklemek için düzenlendi
Şifreleme için kullanılan anahtarları nerede/nasıl saklıyorsunuz?
SQL veya Oracle veritabanı gibi bir şeyde yerleşik şifreleme kullanıyorsanız, standart yaklaşım, veritabanı bir şifreleme anahtarı oluşturur ve bunu başka bir anahtar koruma anahtarı veya Ana anahtarla şifreleyecektir. Bu, bir parola veya ör. .pem dosyası.
Bu genellikle yalnızca kök/Yönetici ve veritabanı hizmeti hesabının erişebileceği kısıtlı bir dizinde depolanır. Veritabanı başlatıldığında anahtar okunur ve belleğe yüklenir. Bu daha sonra şifreleme anahtarlarının şifresini çözmek için kullanılır.
İlk olarak, web ve veritabanı sunucularının aynı olduğu bir sistemde, anahtarı nasıl yönetirsiniz?
Anahtar, sunucudaki bir dizinde saklanır. Yenilemek veya iptal etmek genellikle veritabanı programı aracılığıyla yapılır.
İkinci olarak, web sunucusu ve DB sunucularının ayrı olduğu sistemlerde, anahtarı nasıl yönetirsiniz?
Anahtar yerel olarak sadece veritabanı sunucusunda saklanır. Daha güvenli bir seçenek, her iki senaryoda da bir Donanım Güvenlik Modülü (HSM) kullanmaktır. Bu, sunucuya bağlı ve sunucuda kısıtlı bir klasör yerine anahtarı depolamak için kullanılan bir donanım aygıtıdır.
Anahtarlar yalnızca izinle kısıtlanmış dosyalar mı? Ayrı bir araç/yazılımda mı saklanıyorsunuz? Bazen şifreleme anahtarlarının da şifreli olduğunu, ancak bunun nerede yardımcı olabileceğinden emin olmadığını belirttim.
Yönetici erişimini yönettiğiniz ve yetkisiz girişler, hizmet hesabı olarak girişler, yeni hesaplar veya klasöre erişim ile eklenen gruplar gibi şeyleri izlediğiniz sürece klasör kısıtlaması kabul edilebilir. Yukarıda belirtildiği gibi, koruduğunuz veriler ve karşılaştığınız tehditler buna ihtiyaç duyuyorsa HSM daha güvenli bir seçenektir.
Genellikle veritabanı örnek veya tablo anahtarları oluşturur ve bunu ana anahtarla şifreler. Ana anahtarı daha fazla şifrelemenin en az yararı vardır.
Önceki cevapta bazı iyi bilgiler sağlanmış olsa da, gerçekten fark edilmeyen kritik bir tasarım hatası vardır - ancak sorudaki örtülü varsayımlardan bazılarından gelir.
Fark aşağıdakiler arasında olmamalıdır:
Tasarım şunlardan başlamalıdır:
Veya aslında daha da doğru:
Hangi sırayla geliyor:
Sadece bu sorulara dayanarak, uygun şekilde tasarlanmış bir şifreleme sistemi tasarlayabilirsiniz. (@ D.W.'nin bahsettiği kripto peri tozunu önleyin).
Yani, bazı örnek senaryolar:
Basitlik açısından, şifrelemenin sunucu tarafında yapılması, sorumluluğun sunucuda olması ve son kullanıcının (ve yöneticinin) şifreleme üzerinde bir etkisi olmadığını varsayalım.
Ana soru, şifreleme uygulama sunucusu veya veritabanı sunucusu tarafından mı gerçekleştiriliyor? (Aslında o kadar basit değil, başka seçenekler de var ...)
Bu, çoğu güvenlik sorununun yaptığı gibi, bir ödünleşmeye geri dönüyor:
Ve bunun gibi. (Yukarıdaki soruların bazılarının alakasız olduğunu ve sunucu şifrelemesi ile çözülemeyeceğini unutmayın).
Şimdi, yukarıdakilere dayanarak, uygulama sunucusu şifrelemesi ile veritabanı şifrelemesi arasında karar verdiğinizi varsayalım.
Web sunucusu ve db aynı sunucuda olsun ya da olmasın, burada neredeyse hiçbir etkisi yoktur - uygulama şifreliyorsa, o zaman sadece db için "özel" veri gönderiyor, aksi takdirde tartışma. Ancak, bu yok yukarıdaki tehdit tartışmasını etkiler - bazı sorunlar tasarım tarafından kullanılmaz, bazıları geliştirilir ...