Veri tabanında şifreleme -encryption- yapmanın bedeli nedir?

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
ertank
Kıdemli Üye
Mesajlar: 1650
Kayıt: 12 Eyl 2015 12:45

Re: Veri tabanında şifreleme -encryption- yapmanın bedeli nedir?

Mesaj gönderen ertank »

Merhaba,

UniDAC kullanılarak yapılacak şifreleme birden faklı yöntemler ile olabiliyor. Bu yöntemler kullanılan database sistemine göre değişebilir. Her database sistemi tüm database dosyasına şifreleme uygulamayabilir. Database dosyasının tamamını şifreleyebilen bilgim dahilinde SQLite ve FirebirdSQL database'leri mevcut. SQLite database dosyasının tamamı sadece UniDAC kullanılarak şifrelenebilir. FirebirdSQL ise ücretli edinilebilecek ek bir plug-in gerektirmektedir.

Bunlar dışında kalan ve genellikle büyük ölçekli (birkaç TB veya daha fazla veri barındıran) kullanılan database sistemleri şifreleme yerine sorgu planlayıcısı, tablo bölümleme, database senkronizasyonu vb konulara yoğunlaşırlar. Şifreleme isteyenlerin ise dosya sistemi üzerinde şifreleme işlemini gerçekleştirmesini önerirler.

UniDAC şifreleme yapamayan database sistemlerinde kullanılabilmesi için TUniEncryptor bileşenini geliştirmiştir. Bu bileşen şifreleme desteği olmayan her türlü database sisteminde kullanılabilir. Sadece kolon şifrelemesi yapmaktadır. Şifrelenecek kolon ile ilişkilendirilerek ilgili kolon verilerini şifreleme işlemini gerçekleştirir. Okuma zamanında da otomatik olarak şifrelenmiş veriyi okunabilir veri haline geri çevirir. Birden fazla TUniEncryptor bileşeni kullanılarak farklı kolonların farklı şifreleme yöntemleri kullanılarak şifrelenmesine de olanak tanımaktadır.

Database bazında veya kolon bazında şifrelemenin olası avantajları;
- Güvenlik avantajı vardır.

Database bazında şifrelemenin olası dezavantajları:
- Genel olarak güvenlik arttıkça kullanım kolaylığı azalmaktadır. Şifrelenmiş database dosyaları standart "database management" uygulamaları tarafından kullanılamaz hale gelebilir. Ya da şifreli alanlar üzerinde sorgu çalıştırmak uygulama dışında mümkün olmayabilir.
- Şifreleme ve geri okunabilir hale getirmek için işlemci ekstra çalışmak durumunda kalacaktır. Duruma göre büyük veriler için Query cevap süreleri ciddi derecede uzamaya başlayabilir.
- Şifrelenmiş veriler için kolon büyüklüğünü artırmak gerekebilir. Bazı şifreleme yöntemleri blok olarak şifreleme yaparlar. Blok boyutu kadar karakter şifrelenmiş olarak kaydedilebilir olması gerekmektedir.
- Database dosyalarının elektrik kesilmesi, sistem kilitlenmesi, vb durumlarda oluşabilecek fiziki bozulma durumlarında kurtarılması mümkün olmayabilir ki çoğu zaman mümkün olmamaktadır.
- Standart database yedekleme uygulamaları şifrelenmiş database üzerinde çalışmayabilir veya şifreyi açmak için gerekli bilgi (KEY) okunabilir parametre olarak verilerek güvenlik açığına sebep olunabilir.

UniDAC kullanarak SQLite database dosyasını şifrelemek için aşağıdaki gibi bir kod kullanılabilir veya çalışma zamanında ilgili TUniConnection parametreleri ayarlanarak kullanılabilir.

Kod: Tümünü seç

uses
  Uni;

begin
  // Aşağıdaki DB bir TUniConnection bileşenidir
  DB.Close();
  DB.ProviderName := 'SQLite';
  DB.Database := 'sifreli.db';
  DB.SpecificOptions.Values['ClientLibrary'] := EmptyStr;
  DB.SpecificOptions.Values['ForceCreateDatabase'] := 'True';
  DB.SpecificOptions.Values['Direct'] := 'True';
  DB.SpecificOptions.Values['EncryptionAlgorithm'] := 'leAES256';  // Son sürümlerde leDefault olarakta kullanılabilir.
  DB.SpecificOptions.Values['EncryptionKey'] := 'database şifreleme kelimesi'; // KEY olarakta adlandırılır
  DB.Open();
Yukarıdaki şekilde erişilen bir database için TUniQuery veya TUniTable bileşenlerinde ekstra bir düzenleme gerekmez. Her zaman kullanıldığı gibi sorgu ve sonuçlar okunabilir.

TUniEncryptor kullanılarak şifrelenmiş bir kolon her defasında bit TUniEncryptor kullanılarak okunmalıdır. Dolayısıyla kullanılacak her bir TUniQuery veya TUniTable bileşeni ile ilişkilendirilmelidir. Şifrelenmiş bir kolonu bir TUniEncryptor ile ilişkilendirmeden okumaya çalışır iseniz şifreli şekilde bilgiler karşınıza gelecektir.

Bunlar dışında;
MySQL: MySQL Enterprise Encryption mevcuttur ancak bu ücretli MySQL sürümlerinde (hepsinde değil belirli ücretli sürümlerde) bulunmaktadır.

PostgreSQL: Bilgim dahilinde database bazında şifreleme desteklemez. Ancak "pgcrypto" gibi plug-in yardımı ile belirlenen kolonların şifrelenmesini sağlamak mümkündür. Bununla birlikte PostgreSQL şifreli bağlantı kullanılarak TCP/IP üzerinden gerçekleşen iletişimin şifreli olmasını sağlayabilir. Disk üzerinde şifrelenmiş dosyalar için dosya sistemi şifreleme kullanımı önerilmektedir.

SQL Server: Transparent Data Encryption (TDE) kullanılabilir. Ancak Microsoft TCP/IP üzerinden gerçekleşen iletişimin okunabilir bilgi olacağı konusunda uyarmakdatır. Bunun önüne geçmek için sertifika yardımı ile şifreli iletişim yapılması gerekmektedir.
mehmetantalya
Üye
Mesajlar: 189
Kayıt: 30 Eyl 2013 10:17

Re: Veri tabanında şifreleme -encryption- yapmanın bedeli nedir?

Mesaj gönderen mehmetantalya »

ertank eline saglik
harun1974
Üye
Mesajlar: 6
Kayıt: 12 Eki 2015 12:27

Re: Veri tabanında şifreleme -encryption- yapmanın bedeli nedir?

Mesaj gönderen harun1974 »

Selamlar,
Ben tabloda veri şifrelemesi kullanacaksam, jedi bileşenlerinden faydalanıyorum. Veriyi formdan tabloya post ederken encrypt ederek kaydediyorum. Tekrar verileri sorgularken dncrypt ederek tekrar okunabilir hale getiriyorum. Böylelikle tablo içeriği ele geçirilse bile şifreli olduğundan okunamıyor.
mehmetantalya
Üye
Mesajlar: 189
Kayıt: 30 Eyl 2013 10:17

Re: Veri tabanında şifreleme -encryption- yapmanın bedeli nedir?

Mesaj gönderen mehmetantalya »

Harun bey sifreyi sorgu esnasinda nasil cozuyorsunuz? Birde bu yontem yavaslama yapmiyor mu?
harun1974
Üye
Mesajlar: 6
Kayıt: 12 Eki 2015 12:27

Re: Veri tabanında şifreleme -encryption- yapmanın bedeli nedir?

Mesaj gönderen harun1974 »

Yavaşlama söz konusu olmuyor. Jedi componenti ile post esnasında şifrelemeyi yapıyorsun. Tekrar okurken de veriyi çözüyorsun. Buradaki dikkat edilmesi gereken nokta, veri şifrelemede kullanacağın kelime ve karakter zorluğudur. Çok uzun kelimeler kullanmamanı tavsiye ederim. Jedi componenti zaten ücretsizdir. Encrypt componentini kullanabilirsin.
Cevapla