Bir önceki Kolon-SatırBazlı Şifreleme (Column Level Encrypyion) - Bölüm 2 isimli yazımda kolon
veya satır bazlı şifreleme (Column-Level Encryption) kapsamında kullanılan 4
mekanizmadan ilki olan T-SQL Functions yöntemini incelemiştik. Bu yazımızda
aynı kapsamdaki diğer mekanizmalara Asymmetric Keys, Symmetric Keys ve
Certificates yöntemlerine odaklanıyor olacağız.
2- Asymmetric Keys
Asymetric Keys public ve private
olarak adlandırılan iki key içermektedir. Public key network üzerinden
paylaşılabilirken private key kimse ile paylaşılmaz. Public key alıcılara
gönderilmeden önce verileri şifreler. Private key ise bu mesajın şifresini
çözer. Asymmetric Keys, birazdan değineceğimiz Symetric Keys güvenliği için de kullanılabilmektedir.
Aşağıdaki resimde Party #1 ile
ifade edilen kişi public keyi kullanarak encrypt ettiği veriyi Party #2 ile ifade edilen kişi sahip olduğu private
keyi kullanarak decrypt etmektedir.
Asymmetric key ile symmetric keyin
karşılaştırılmasının yapıldığı şu makaleye bir göz atmak isteyebilirsiniz.
Asymmetric keys aşağıdaki ifade ile
oluşturulabilir. CREATE işlemi için 3 çeşit şifreleme algoritması
kullanılabilmektedir(RSA_512, RSA_1024,
RSA_2048). Algoritma yerine FROM ifadesi ile keylerin import edilebileceği
bir kaynak belirtilebilir(File,Executable,Assembly).
Bu konudaki detaylı bilgiye http://technet.microsoft.com/en-us/library/ms174430.aspx
linkinden ulaşabilirsiniz.
CREATE ASYMMETRIC KEY asymmAnahtarim
WITH ALGORITHM=RSA_1024
ENCRYPTION BY
PASSWORD='pass@word1'
İfadedeki son ENCRYPTION BY PASSWORD satırı private keyin password ile encrypt
edilmesi için kullanılmaktadır. Eğer belirtilmezse varsayılan olarak Database Master Key kullanılmaktadır.
Burada belirtilen şifre maksimum 128 karakterdir ve SQL’in kurulu olduğu
makinedeki Windows Password Policy gereksinimlerine uygun olmalıdır(büyük,küçük
harfler,karakterler vs.).
Oluşturduğumuz bu asymmetric keyi
üzerinde çalıştığımız veri tabanındaki Security/Asymmetric
Keys bölümünde görebiliriz.
Oluşturduğumuz bu asymmetric key
sayesinde ENCRYPTBYASYMKEY
fonksiyonu ile verileri şifreleyebilir DECRYPTBYASYMKEY
fonksiyonu ile şifreli metni çözebiliriz. Bu fonksiyonlar encytp etmek için 2,
decrypt etmek için 3 parametre ile çalışmaktadır. Encrypt işleminde ilk
parametreye asymmetric keyin idsi ikinci parametreye de encrypt edilecek temiz
metin verilmektedir. Decrypt işleminde ise son parametreye asymmetric key
oluşturulurken belirtilen password verilmektedir.
Fonksiyonda kullanılan parametreler
kısaca açıklayalım:
Key_ID :
int tipinden
asymmetric keyin idsidir. ASYMKEY_ID() fonksiyonu ile bu id elde edilebilir.
Plain_Text:
Encrypt
edilecek veridir. Bu veri sadece nvarchar, char, varchar, binary, varbinary
veya nchar tiplerinden birisi olabilir.
Ciphertext:
Asymmetric key
ile encrypt edilmiş veridir.
Asym_Key_Password:
Asymmetric
key oluşturulurken kullanılan password dur.
Bir önceki bölümde yaptığımız gibi burada da değişkenler
üzerinden her iki fonksiyonu da kullanarak metni encrypt ve decrypt edelim
3- Symmetric Keys
SQL Server 2012 üzerinde en hızlı
encryption metotlarından birisidir. Verilerin encrypt edilmesi ve decrypt
edilmesi için tek bir key kullanılır. Çalışma şeklini aşağıdaki gibi resmedebiliriz.
Yukarıda da belirttiğim gibi asymmetric
key ile symmetric keyin karşılaştırılmasının yapıldığı şu makaleye bir göz
atmak isteyebilirsiniz.
Symmetric key mekanizmasının da korunması
gerekmektedir. Bunun için Password, Certificate, Asymmetric Key veya başka bir
Symmetric Key kullanılabilir. Symmetric keyin encrypt edilmesi için
kullanılabilecek ifadeleri yorum satırı olarak aşağıda belirttim.
Aytıntılı bilgilere msdn’den erişebilmek
için şu linki kullanabilirsiniz.
CREATE SYMMETRIC KEY symAnahtarim
WITH ALGORITHM = TRIPLE_DES
--ENCRYPTION BY ASYMMETRIC KEY
asymmAnahtarim
--ENCRYPTION BY SYMMETRIC KEY symAnahtarim0
---(önce aktif edilmeli)
--ENCRYPTION BY CERTIFICATE sertifikam
ENCRYPTION BY
PASSWORD='pass@word1'
Symmetric key oluştururken çeşitli
encryption algoritmaları kullanılabilir. Symmetric keyler kullanılmadan önce
mutlaka OPEN SYMMETRIC KEY ifadesi
ile aktif edilmelidir. Session sonlandığında bu symmetric key kapanacaktır.
İstenirse CLOSE SYMMETRIC KEY ifadesi kullanılarak session bitmeden de symmetric
key kapatılabilir.
Verilerin encrypt edilmesi için
kullanılan ENCRYPTBYKEY fonksiyonu
minimum 2 parametre decrypt edilmesi için kullanılan DECRYPTBYKEY fonksiyonu minimum 1 parametre ile
çalıştırılabilmektedir.
Parametreleri aşağıdaki gibi özetleyebiliriz:
Key_guid:
Symmetric
keyin uniqueidentifier tipinden GUID çıktısı. KEY_GUID() fonksiyonu ile elde
edilebilir.
Clear_text:
Encrypt
edilecek veridir. Bu veri sadece nvarchar, char, varchar, binary, varbinary
veya nchar tiplerinden birisi olabilir.
Ciphertext:
Symmetric key
ile encrypt edilmiş veridir.
Benzer bir çalışma ile bu yöntemi
örneklendirelim.
4- Certificates
Certificates dijital olarak
imzalanmış güvenlik nesneleridir. İnsanların, cihazların veya organizasyonların
tanınması için haklarında çeşitli bilgiler ve private key ile
ilişkilendirilecek public key içerir. Bu sayede endpointlere güvenli
bağlantı(secure connection) ile erişim sağlanabilmektedir. Database
Mirroring’te, veri ve connection şifrelemede veya paket gibi nesnelerin imza
altına alınmasında kullanılabilir.
Certificate aşağıdaki ifade ile
oluşturulabilir.
CREATE CERTIFICATE Sertifikam
ENCRYPTION BY
PASSWORD ='pass@word1'
WITH
SUBJECT='Sertifika konusu',
START_DATE='01/01/2013',
EXPIRY_DATE='01/01/2020'
Burada kullanılan ENCRYPTION BY PASSWORD ifadesi private
keyi encrypt etmek için kullanılmaktadır. Belirtilmezse varsayılan olarak Database Master Key geçerli olmaktadır.
Burada belirtilen şifre SQL’in kurulu olduğu makinedeki Windows Password Policy
gereksinimlerine uygun olmalıdır(büyük,küçük harfler,karakterler vs.). İfadeden de anlaşılacağı üzere bir tarih
aralığı belirtilerek sertifikanın geçerlilik süresi belirlenebilir. Ayrıntılı
bilgi için msdn’e göz atmak isteyebilirsiniz.
Oluşturduğumuz bu Certificate
üzerinde çalıştığımız veri tabanının Security/Certificates bölümünde yer
almaktadır.
Veri şifrelemek için
kullanabileceğimiz ENCRYPTBYCERT
fonksiyonu 2 parametre DECRYPTBYCERT
fonksiyonu ise 3 parametre almaktadır. Bu parametreleri şu şekilde
açıklayabiliriz:
Certificate_id:
Sertifikaya
ait int tipinden bir iddir. Bu değer Cert_ID() fonksiyonu ile elde edilebilir.
Clear_text:
Encrypt
edilecek veri. Bu veri sadece nvarchar, char, varchar, binary, varbinary veya
nchar tiplerinden birisi olabilir.
Cipher_text:
Certificates
ile encrypt edilmiş verdir.
Cert_password:
Sertifika
oluşturulurken belirtilen password.
Öncekilere benzer bir çalışma ile
bu yöntemi şöyle örneklendirebiliriz.
Asymmetric key ve Symmetric keyi
SQL Server dışında tutmaya yarayan ve sadece Enterprise editionda
kullanılabilir olan Extensible Key
Management(EKM) modülünü bilinçli olarak kapsam dışında bıraktım. SSMS
üzerinden "Server/Facet/Sql Server
Config" yoluyla aktif edilen EKM, encryption key üretmek ve tutmak
için kullanılmaktadır.
Yukarıda oluşturduğumuz nesneler ilgili
veri tabanı üzerinde çalıştırılan DROP komutu ile serverdan kaldırılabilir.
DROP SYMMETRIC
KEY ad
DROP ASYMMETRIC KEY ad
DROP CERTIFICATE ad
Bu bölümde Column-Level Encryption
kapsamındaki 4 mekanizmadan geriye kalan 3’ünün neler olduğuna ve nasıl
kullanıldığına bir göz attık.
Bir sonraki bölümde bu
mekanizmaları karma bir şekilde kullanarak, bir tablodaki metin bazlı kolonları
şifreleyip çözeceğiz. Böylece sıfırdan alarak gerçek hayatta pratiği olan bir
örnek yapmış olacağız.
Faydalı olması dileğiyle,