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

SQL Server 2005 以降では、EncryptByKey 関数を利用して、非対称キー(RSA 512bit/1024bit/2048bit)で暗号化することができます。これは次のように利用します。

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

-- 非対称キーの作成 (RSA_512 ビットを指定)
CREATE ASYMMETRIC KEY Asym_Key1
 WITH ALGORITHM = RSA_512
  ENCRYPTION BY PASSWORD = '<StrongPassword>'
go

-- 非対称キーの ID の取得 (AsymKey_ID 関数)
DECLARE @kID int
SET @kID = AsymKey_ID('Asym_Key1')

-- EncryptByKey でデータを暗号化して INSERT
INSERT INTO テスト1
 VALUES ( '平文', EncryptByAsymKey(@kID, N'暗号化される?') )
go

-- 暗号化されていることの確認
SELECT * FROM テスト1


-- 復号化
-- AsymKey_ID 関数で非対称キーの ID の取得
DECLARE @kID int
SET @kID = AsymKey_ID('Asym_Key1')

-- DecryptByAsymKey で復号化
SELECT ID, ClearText
	  ,CONVERT( nvarchar, DecryptByAsymKey(@kID, EncryptData, N'<StrongPassword>' ) )
 FROM テスト1
go

非対称キーのアルゴリズムで指定できるのは、RSA_512、RSA_1024、RSA_2048 の 3つです。


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

メッセージ 15466、レベル 16、状態 1、行 2
暗号化解除中にエラーが発生しました。


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

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

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

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

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