Makale Özeti

Sql Server 2005 veri güvenliğini sağlamak açısından oldukça fazla ek güvenlik önlemleri ile beraber çıktı. Bu güvenlik önlemlerinin en önemlilerinden biri ise veritabanındaki verilerin sertifikalar ve anahtarlar sayesinde şifrelenmesi ve şifrelerin çözülmesidir.

Makale

Sql Server 2005 veri güvenliğini sağlamak açısından oldukça fazla ek güvenlik önlemleri ile beraber çıktı. Bu güvenlik önlemlerinin en önemlilerinden biri ise veritabanındaki verilerin sertifikalar ve anahtarlar sayesinde şifrelenmesi ve şifrelerin çözülmesidir.

Sql Server 2005’teki veri güvenliği şifrelemeye dayanmaktadır. Şifreleme mekanizması yukarıdaki grafikte gösterildiği üzere hiyerarşik olarak yapılmaktadır. Şifrelemenin temelinde ise sertifikalar ve anahtarlar bulunmaktadır. Sertifikalar Sql Server 2005 tarafından oluşturulabileceği gibi ticari amaçlı kullanılan x.509 sertifikaları veya Windows 2003 Server CA tarafından verilen sertifikalar olabilir. Sertifikaların haricinde iki tip anahtar kullanılır. Bu anahtarlar symmetric ve asymmetric olarak adlandırılmaktadır.

Asymmetric anahtarlar public key’e karşılık gelen private key’i barındırırlar. Genellikle symmetric key’i şifrelemek için kullanılır

Symmetric key ise tek bir anahtardır ve verileri şifreleyip, şifre çözmeyi sağlar. Hızlı işlem yapar.

Sql Server ile gelen şifreleme mekanizmasının kullanımı oldukça kolaydır. Veri şifrelemesi için örnek bir database oluşturup verilerimizi şifrelemeye başlıyoruz:

-- Veritabani olustur

Create Database VeriSifrelemeDemo

Go

use VeriSifrelemeDemo

--Db Kullanisini ve girisi olustur

Create Login [VeriSifrelemeDbKullaniciGiris] With Password = 'Sifre#123'

Create User [VeriSifrelemeDbKullanici] For Login [VeriSifrelemeDbKullaniciGiris]

G0

-- Cok onemli verilerin tutulacagi tabloyu olustur

Create Table KrediKartBilgileri

(

      KartId INT Primary Key IDENTITY,

      KartNo VARBINARY(256)   

)

Şifreleme işlemini yapabilmek için yukarıdaki grafikte görüldüğü üzere master key’e ihtiyaç duyulmaktadır. Bu oluşturulan Master Key amacı bir sonraki adımda oluşturulacak olan sertifikanın veya asimetrik private key’ini güvenli bir şekilde veritabanında muhafaza etmektir.Oluşturulduktan sonra Triple Des algoritması ile şifrelenir. Görüntülemek için sys.symmetric_keys view’inden yararlanılır.

-- DB icin master key belirlenmesi gerekiyor.

-- Bu Master Key Sql Server Password Policy'e uygun olmasi gerekiyor

CREATE MASTER KEY ENCRYPTION BY PASSWORD = 'MasterKey#123'

Master key oluşturduktan sonra sıra sertifikamıza geldi. Mevcut bir sertifikamız olmadığı için sertifika oluşturma işlemini Sql Server 2005’e bırakıyoruz. Sertifika oluştururken sertifikaya subject bilgisi eklenmektedir. Bu subject bilgisi sertifikanın X509 standardı gereği metadata bilgisi için eklenmektedir. Biz sertifikamız için herhangi bir başlangıç tarihi ve bitiş tarihi belirtmiyoruz ama istenizse START_DATE ve EXPIRY_DATE belirtilebilir.

-- Sertifika olustur

CREATE CERTIFICATE [sertifikam] With Subject = 'Ozel Bilgi Sifreleme Sertifikasi'

Dikkat ettiyseniz yapılan işlem makalenin başında bulunan grafikteki hiyerarşik düzene göre yapılmaktadır. Önce Master Key oluşturulması, sonra sertifika oluşturulması ve şimdi sıra symmetric key oluşturmak.

-- Sifreleme Islemini yapacak olan Anahtari Uret.

CREATE SYMMETRIC KEY [anahtarim] WITH ALGORITHM = Triple_Des ENCRYPTION BY CERTIFICATE [sertifikam]

Oluşturulan anahtarda kullanılan şifreleme algoritması Triple_Des olarak belirtilmiştir ama bu algoritma haricinde DES , RC2 , RC4 , RC4_128 , DESX , AES_128 , AES_192 , AES_256 algoritmaları da kullanılabilir. Oluşturulan anahtarın bir adım önce oluşturulan sertifikayı kullanacağını belirledikten sonra veritabanımızın Security bölümünde oluşturulan anahtar ve sertifika görünmektedir.

 

Güvenlik altyapımızı hazırladık. Artık sıra verilerimizi tablolara eklerken şifreleyip eklemek ve verilerimizi çekerken şifreleri çözüp çekmekdir.

Verileri eklerken veya çekerken mutlaka ilk önce symmetric key açılmalıdır. Anahtarımızı açarken bu anahtarın verileri belirtilen sertifikadan çözüceğini belirtiyoruz:

-- synmmetric anahtarı kullanabilmek için ilk önce mevcut anahtarın açılması gerekiyor

OPEN SYMMETRIC KEY [anahtarim] DECRYPTION BY CERTIFICATE [sertifikam]

Anahtarımızı açtıktan sonra key_Guid() fonsikiyonundan yararlanmamız gerekiyor. Bu fonksiyon veritabanımızdan symmetric key GUID’ini bize verecek. Bize döndürülen bu GUID’i ise mevcut verilerimizi şifrelerken kullanacağımız encryptbykey methodunda kullanılacaktır.

-- Artık cok ozel bilgilerimizi tablolarimiza ekleyelim

DECLARE @KeyGuid AS UNIQUEIDENTIFIER

SET @KeyGuid = key_guid('Anahtarim')

IF( @KeyGuid is not null )

BEGIN

 INSERT INTO [KrediKartBilgileri] VALUES (encryptbykey( @KeyGuid, N'1234-1234-1234-1234'))

 INSERT INTO [KrediKartBilgileri] VALUES (encryptbykey( @KeyGuid, N'4546-5678-5678-5678'))

 --PRINT @KeyGuid

END

ELSE

BEGIN

 PRINT 'symmetric key GUID Hatalı'

END

Yukarıdaki kodda bulunan anahtar fonksiyonları inceleyelim :

Key_Guid() : Bu fonksiyon bir adet parametre alır ve aldığı parametre ise symmetric key adıdır. symmetric key GUID’ini döndürür. sys.key_encryptions view’inden bilgilerine ulaşılır.

Encryptbykey(): Bu fonksiyon ise verileri şifrelemeyi sağlar. İki parametre alır bunlardan ilki şifrelemede kullanılacak olan  symmetric anahtarın key_Guid değeri, ikincisi ise şifrelenecek veridir. VarBinary veri tipinden dönüş yapar.

İşlemimiz bittekten sonra anahtarımızı kapatıyoruz.

CLOSE SYMMETRIC KEY [anahtarim]

Veriler artık şifreli olarak tablomuzda duruyor. Mevcut halini listeleyecek olursak ;

-- Verilerin Mevcut Halini Görüntüle

Select * From KrediKartBilgileri

Şifreli verileri çözümleyebilmek için ise decryptbykey fonksiyonunu kullanacağız. Bu fonksiyon gelen verinin çözümlenmesini sağlar. VarBinary cinsinden veri alır ve VarBinary cinsinden dönüş yapar.

SELECT KartId,

       convert( NVARCHAR(100), decryptbykey( KartNo )) as 'Kredi Karti Numarasi'

FROM   KrediKartBilgileri

Burada dikkat ettiyseniz veriler Null olarak döndü. Bunun sebebi ise şifre çözme işleminden önce anahtarın açılmamasıdır.

OPEN SYMMETRIC KEY [anahtarim] DECRYPTION BY CERTIFICATE [sertifikam]

-- Verilerin Sifre Cozulmus Halini Goruntule

-- Sifre Cozulmus olarak Goruntulemek Icýn yine SYMMETRIC KEY'i acmaniz gerekir aksi halde null dönecektir.

SELECT KartId,

       convert( NVARCHAR(100), decryptbykey( KartNo )) as 'Kredi Karti Numarasi'

FROM   KrediKartBilgileri

CLOSE SYMMETRIC KEY [anahtarim]

Verileri şifreli tutmak için elinizde oldukça fazla alternatif mevcut. Sql Server 2005’te sertifika ve anahtar kullanmak bunlardan biridir.

 

Bir başka makalede görüşmek üzere

Okan Tekeli

okan.tekeli@bilgeadam.com

okan@okantekeli.com