Microsoft SQL Veritabanı sunucusu (MSSQLSERVER) veri kriptolama ve veri dosyası kriptolama
Bölüm 1
SQLServer 2005 ile birlikte hassas verilerimizi sql sunucuda tutabilmemiz için gerekli kriptolama mekanizmaları gelmeye başladı. Sql2005 ile birlikte gelen MASTER KEY, SYMMETRIC KEY , HASHBYTES , ENCRYPTBYPASSPHRASE DECRYPTBYPASSPHRASE, ENCRYPTBYKEY, DECRYPTBYKEY gibi ifadeler bizim verilerimizi kriptolu bir şekilde saklamamız için gerekli imkanları verdi. Ancak mdf ve ldf dosyalarımızın taşınıp kolayca başka bir sunucuda attach edilebilmesi, backup dosyalarımızın yine başka sunuculara kolayca restore edilebilmesi yinede çok güvenli olmadığımızın göstergesi idi.
SQL2008 ile birlikte transparent veri kriptolama (TDE) geldi. Böylece biz sql instance’ında verilerimizi kriptolamasak bile. Gerekli ayarlamaları yaptıktan sonra veri dosyalarımızı (mdf,ldf) ve yedekleme dosyalarımız (backup) artık kriptolu bir şekilde diskte tutulabilmekyiz. Böylece bu dosyalarımızı alıp giden birisi sertifikamız ve şifresini bilmediği sürece dosyalarımızı atach veya restore ile kendi sistemine takıp kullanamayacaktır.
Şimdi bu bahsettiğimiz kriptolama yöntemlerini tek tek demolar üzerinden inceleyelim.
1- Symmetric key ile veri kriptolama: (sql2005 ve Express verisyonu ve sql2008 de mevcut)
Anahtar ifadeler :
MASTER KEY,CERTIFICATE,SYMMETRIC KEY,encryptbykey,decryptbykey
-- veritabanı oluştur
Create Database EticaretDB
Go
use EticaretDB
-- Cok hassas verilerin tutulacagi tabloyu olustur
Create Table tblKrediKarti
(
Id INT Primary Key IDENTITY,
KartNo VARBINARY(256)
)
-- bir master key oluşturalım, sır olarak saklamanız gereken şifresi ile !
CREATE MASTER KEY ENCRYPTION BY PASSWORD = 'MK_12345'
-- Bir sertifika oluşturalım
CREATE CERTIFICATE [Sertifika1] With Subject = 'Hassas Bilgi Kriptolama Sertifikası'
-- sonrada bu sertifika ile kriptolanan bir simetrik anahtar oluşturalmı, 3DES algoritması kullanılıyor.
CREATE SYMMETRIC KEY [Anahtar1] WITH ALGORITHM = Triple_Des ENCRYPTION BY CERTIFICATE [Sertifika1]
-- veritabanımızda kayıtlı simetrik anahtarları listeleyelim , az önce oluşturduğumuzda listede görünecektir.
select * from sys.symmetric_keys
Ayrıca SQL management studio arayüzünden security kısmından sertifika ve anahtar görüntülenebilir.
-- oluşturduğumuz simetrik anatarı sertifikayla çözerek açalım -- verileri select edip gösterirken bunu yapacağız...
OPEN SYMMETRIC KEY [Anahtar1] DECRYPTION BY CERTIFICATE [Sertifika1]
-- şimde gelelim bu sertifika ile kriptolanmış anahtarımızı kullanarak verilerimizi insert, update etmeye...
--- önce anahtarımızın guid'ini alalım , key_guid(<anahtar adı>) fonksiyonunu kullanacağız
-- , buradaki ismi yazılan anahtar yoksa null değer verir.
DECLARE @KeyGuid AS UNIQUEIDENTIFIER
SET @KeyGuid = key_guid('Anahtar1')
-- bakalım ne geliyor...
select @KeyGuid
-- aşağıdaki gibi simetrik keyleri listelediğimizde anahtarımıza ait guid'i burada da göreceğiz key_guid sütununda
select * from sys.symmetric_keys
--- yani istersek aynı işlemi aşağıdaki gibi de yapabiliriz...
select @KeyGuid =key_guid from sys.symmetric_keys where name='Anahtar1'
-- verilerimizi yazarken encryptbykey(@KeyGuid,<veri>) şeklinde kriptolayıp yazıyoruz...
--- kriptolu veriyi varbinary tipinde tanımlı sütunlara yazıyoruz.
-- key açık değilse verilerin değeri null olur o yüzden önce açık değilse anahatarı açmak lazım
-- OPEN SYMMETRIC KEY [Anahtar1] DECRYPTION BY CERTIFICATE [Sertifika1]
IF( @KeyGuid is not null )
BEGIN
INSERT INTO [tblKrediKarti] VALUES (encryptbykey( @KeyGuid, N'1234-5678-9012-3456'))
INSERT INTO [tblKrediKarti] VALUES (encryptbykey( @KeyGuid, N'5678-0234-2468-1357'))
END
ELSE
BEGIN
select 'key guid hatalı' as hatamesajı
END
-- kriptolama işimiz bitti, şimdi de anahtarımızı kapatalım
CLOSE SYMMETRIC KEY [anahtar1]
-- şimdi bi select çekelim bakalım ne göreceğiz tabloda
select * from tblKrediKarti
--anahtarı açmadan deneyelim veriyi çözmeyi (de-kripto=decrypt)
SELECT Id, convert( NVARCHAR(100), decryptbykey( KartNo )) as 'KK No' FROM tblKrediKarti
---- anahtarı aç
-- bu şifreyi ezberlemelisin..! db'yi başka yere taşırsan da lazım olacak..
--- eğer master key açık değilse açmak için :
--OPEN MASTER KEY DECRYPTION BY PASSWORD = 'MK_12345'
open SYmMETRIC KEY anahtar1 DEcryptION by CERTIFICATE sertifika1
SELECT Id, convert( NVARCHAR(100), decryptbykey( KartNo )) as 'KK No' FROM tblKrediKarti
close symmetric key anahtar1
close master key
/*
özetle; simetrik anahtar ile kriptolanmış bir veriyi sorgulamak için
1- master key kapalı ise aç --gizli şifre ..
2- simetrik keyi sertifika ile de-kripto et aç..
3- select cümlesinde kriptolu sütunu decryptbykey fonksiyonu ile görüntüle
4- simetrik anahtarı ve master anahtarı kapat...
*/
Devamı sonraki yazımızda ...
Hiç yorum yok:
Yorum Gönder