MySQL Veritabanında Veri Şifreleme

AES (Advanced Encryption Standard), Amerika'da birçok algoritmanın katıldığı yarışmada finale kalarak birinci seçilmiştir. Kriptoanaliz testlerinde yarışmaya katılan diğer algoritmalara göre daha iyi sonuçlar alınmış, bilim adamlarınca yapılan ve gerek zaman gerekse hesapsal karmaşık testlerinde, diğer algoritmalara göre daha etkili olduğu matematiksel olarak ispatlanmıştır.

























Belçikalı iki matematikçinin geliştirdiği,  Rijndael Şifreleme Algoritması, AES algoritması olarak kabul edilmiştir. Bugün bankalar dahil birçok kurumda, kritik güvenlik gerektiren birçok yazılımda kullanılmaktadır. Şifreleme algoritmalarında anahtar büyüdükçe güvenlik artar ve algoritmayı kırmak zorlaşır, fakat şifreleme ve şifreyi çözme zamanı uzar. Web yazılımları gibi, hızlılığın gerektiği ve insanların fazla sabredemediği durumlarda bu gibi güçlü algoritmaları kullanmak, aşırı yavaşlığa neden olabilir. Bu nedenle veritabanındaki tüm verilerin bu algoritmayla şifrlenmesi yerine çok özel birkaç tablo alanının şifrelenmesi tercih edilmelidir.

















Yazılımdan bahsetmişken, AES Algoritmasını yazılımlarınızda ücretsiz kullanamazsınız, açık kaynak bir sistem değildir, lisanslıdır. Ticari yazılımlarda kullanılırken ücretini ödemek gerekir. WinRAR gibi birçok yazılımda AES'in kullanıldığını görebilirsiniz. Birçok veritabanı yönetim sistemi de AES'i kullanmaktadır.

MySQL veritabanında AES algoritmayla şifreleme yapmak için AES_ENCRYPT fonksiyonu kullanılır. Kullanımı aşağıdaki gibidir.

AES_ENCRYPT(veri, şifreleme anahtarı)

Örneğin; AES_ENCRYPT('merhaba','abc1234'); 
 
şeklinde kullanabilirsiniz. Burada 'merhaba' gibi bir metni 'abc1234' gibi bir anahtar kullanarak şifreledik. Tabi verdiğimiz örnekteki gibi bir anahtar kullanırsanız, dünyanın en güçlü şifreleme algoritmasını kullansanız da yaptığınız işin hiçbir anlamı olmaz, sözlük saldırısı gibi saldırılar ile kolayca kırılır. 

MySQL veritabanında yeni bir tablo oluşturup, aşağıdaki alanları tanımlayalım.












Aşağıdaki INSERT sorgusu ile veritabanımıza birkaç kayıt ekleyip, görüntüye bakalım.

INSERT INTO uyeler( kullaniciadi, sifre, email ) 
VALUES (
AES_ENCRYPT(  'oguzhan',  'abc1234' ) , 
AES_ENCRYPT(  'sifre',  'abc1234' ) , 
AES_ENCRYPT(  'emailim@email.com',  'abc1234' )
)

Uyeler tablomuza bir kayıt satırı daha ekleyelim.


INSERT INTO uyeler( kullaniciadi, sifre, email ) 
VALUES (
AES_ENCRYPT(  'sinan',  'abc1234' ) , 
AES_ENCRYPT(  'sinaninsifre',  'abc1234' ) , 
AES_ENCRYPT(  'sinan@email.com',  'abc1234' )
)



SELECT
AES_DECRYPT(kullaniciadi, 'abc1234') AS kullanici_adi,
AES_DECRYPT(sifre, 'abc1234') AS sifre,
AES_DECRYPT(email, 'abc1234') AS email_adresi
FROM uyeler;










Şifreleme konusu ile yakından ilgileniyorsanız Güvenlik bölümündeki makaleleri de okuyabilirsiniz. MD5 ve SHA Hash algoritmaları, AES algoritmasından daha hızlı çalışırlar. MD5 ve SHA Hash algoritmaları ile AES Şifreleme Algoritması karıştırılmamalıdır. Hash Algoritmaları tek yönlü çalışırlar, yani algoritmanın çıktısından orjinal metne dönüş mümkün değildir. Şifreleme algoritmaları ise çift yönlü çalışırlar. Mesaj Özütü algoritmaları ile ilgili makalemi Güvenlik bölümünden okuyabilirsiniz.

NOT: Burada verilen bilgiler saldırı amaçlı ya da zarar verme amacıyla verilmemiştir, kriptografi bilimi ile internette, kütüphanelerde birçok tez, makale, kitap herkese açık şekildedir, kriptografi tıpkı matematik gibi herkese açık bir bilim dalıdır.

Güvenli günler dilerim.
Oğuzhan TAŞ - 2014


KAYNAKLAR

- AES Algoritması Hakkında
http://tr.wikipedia.org/wiki/AES

- MySQL Kütüphanesi
http://dev.mysql.com/doc/refman/5.5/en/encryption-functions.html

Bookmark and Share