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、RC4、RC4_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