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