SQL Server で対称キーでデータの暗号化(EncryptByKey)

SQL Server 2005 以降では、EncryptByKey 関数を利用して、対称キー(AES や 3DES、RC4)で暗号化することができます。これは次のように利用します。

-- テーブルの作成
CREATE TABLE テスト1
(  id int IDENTITY(1, 1)
  ,ClearText nvarchar(100) 
  ,EncryptData varbinary(max) ) 
go

-- 対称キーの作成 (パスワード指定、アルゴリズムは AES_128 を指定)
CREATE SYMMETRIC KEY Sym_Key1
 WITH ALGORITHM = AES_128
   ENCRYPTION BY PASSWORD = '<StrongPassword>'
go

-- 対称キーのオープン
OPEN SYMMETRIC KEY Sym_Key1
 DECRYPTION BY PASSWORD = '<StrongPassword>'
go

-- 対称キーの GUID を Key_GUID 関数で取得して、
-- EncryptByKey でデータを暗号化して INSERT
DECLARE @kGuid UNIQUEIDENTIFIER
SET @kGuid = Key_GUID('Sym_Key1')

INSERT INTO テスト1
 VALUES ( '平文', EncryptByKey(@kGuid, N'暗号化される?') )
go

-- 対称キーの CLOSE
CLOSE SYMMETRIC KEY Sym_Key1
go

-- 普通に SELECT すると暗号化されていることを確認できる
SELECT * FROM テスト1


-- 復号化
-- 対称キーの OPEN
OPEN SYMMETRIC KEY Sym_Key1
 DECRYPTION BY PASSWORD = '<StrongPassword>'

-- DecryptByKey で復号化
SELECT ID, ClearText
	  ,CONVERT( nvarchar, DecryptByKey(EncryptData) )
 FROM テスト1

-- 対称キーの CLOSE
CLOSE SYMMETRIC KEY Sym_Key1

対称キーのアルゴリズムで指定できるのは、次のとおりです。
DES、TRIPLE_DES、TRIPLE_DES_3KEY、RC2、RC4RC4_128、DESX、AES_128、AES_192、AES_256


対称キーの OPEN でパスワードを間違えた場合には、次のエラーが発生します。

メッセージ 15313、レベル 16、状態 1、行 1
キーは、指定された暗号化解除機能で対応できるように暗号化されていません。


EncryptByKey の詳細(ヘルプ)はこちら
http://msdn.microsoft.com/ja-jp/library/ms174361.aspx

DecryptByKey の詳細(ヘルプ)はこちら
http://technet.microsoft.com/ja-jp/library/ms181860.aspx

CREATE SYMMETRIC KEY の詳細(ヘルプ)はこちら
http://technet.microsoft.com/ja-jp/library/ms188357.aspx

OPEN SYMMETRIC KEY の詳細(ヘルプ)はこちら
http://msdn.microsoft.com/ja-jp/library/ms190499.aspx

暗号化アルゴリズムの選択の原則についてはこちら
http://msdn.microsoft.com/ja-jp/library/ms345262.aspx

SQL Server の暗号化階層はこちら
http://msdn.microsoft.com/ja-jp/library/ms189586.aspx