拡張キー管理 (EKM) について

SQL Server には、拡張キー管理 (EKM) を含むデータ暗号化機能が用意されています。暗号化とキーの生成には Microsoft Cryptographic API (MSCAPI) が使用されます。データとキーの暗号化のための暗号化キーは一時的なキー コンテナーに作成され、それらをデータベースに格納するには、まずプロバイダーからエクスポートする必要があります。この方法により、暗号化キー階層とキーのバックアップを含むキー管理を SQL Server で処理できるようになります。

法規制遵守の必要性やデータ プライバシーに対する関心の高まりを受けて、組織では、"多層防御" のソリューションを実現するための手段として暗号化が活用されるようになっています。このアプローチは多くの場合、データベースの暗号化管理ツールを使用するだけで実現できるものではありません。各ハードウェア ベンダーからは、ハードウェア セキュリティ モジュール (HSM) を使用して企業のキー管理の問題に対処する製品が提供されています。HSM デバイスでは、暗号化キーがハードウェア モジュールまたはソフトウェア モジュールに格納されます。この場合、暗号化キーが暗号化データと一緒に保管されないため、より安全なソリューションが実現されます。

多くのベンダーにより、キー管理と暗号化アクセラレーションの両方に対応する HSM が提供されています。HSM デバイスでは、アプリケーションと HSM の仲介として、サーバー プロセスとのハードウェア インターフェイスが使用されます。また、モジュール上に MSCAPI プロバイダー (ハードウェアの場合もあればソフトウェアの場合もあります) が実装されています。MSCAPI では、多くの場合、HSM でサポートされている機能の一部しかサポートされません。その他、HSM、キーの構成、およびキーへのアクセスのための管理ソフトウェアが用意されている場合もあります。

HSM の実装はベンダーによってさまざまです。したがって、SQL Server でそれらを使用するには、共通のインターフェイスが必要です。このインターフェイスを提供するのが MSCAPI ですが、HSM の機能の一部しかサポートされません。MSCAPI には、これ以外にも、対称キーをネイティブのまま永続化できない、セッション指向の通信がサポートされていないなどの制限があります。

SQL Server 2008 の拡張キー管理では、サードパーティの EKM/HSM ベンダーがそれぞれのモジュールを SQL Server に登録できます。登録すると、その EKM モジュールに格納されている暗号化キーを SQL Server ユーザーが使用できるようになります。これにより、それらのモジュールでサポートされている一括暗号化/暗号化解除などの高度な暗号化機能や、キー エージングやキー ローテーションなどのキー管理機能を SQL Server から利用できます。

EKM の構成

拡張キー管理は、SQL Server の Enterprise Edition、Developer Edition、および Evaluation Edition でのみ使用できます。

既定では、拡張キー管理は無効です。この機能を有効にするには、次のオプションと値を使用して sp_configure コマンドを実行します。

sp_configure 'show advanced', 1
GO
RECONFIGURE
GO
sp_configure 'EKM provider enabled', 1
GO
RECONFIGURE
GO

sp_configure 'show advanced', 1
GO
RECONFIGURE
GO
sp_configure 'EKM provider enabled', 1
GO
RECONFIGURE
GO
注意

上述のエディション (Enterprise Edition、Developer Edition、および Evaluation Edition) 以外のエディションでこのオプションを使用して sp_configure コマンドを実行すると、エラーが表示されます。

この機能を無効にするには、値を 0 に設定します。サーバー オプションの設定方法については、「sp_configure (Transact-SQL)」を参照してください。

EKM を使用する方法

SQL Server 2008 の拡張キー管理を使用すると、データベース ファイルを保護する暗号化キーを外部デバイス (スマート カード、USB デバイス、EKM/HSM モジュールなど) に格納できます。これにより、データベース管理者 (sysadmin グループのメンバーを除く) からのデータの保護も実現され、そのデータベース ユーザー以外はアクセスできない外部 EKM/HSM モジュール上の暗号化キーを使用してデータを暗号化できます。

拡張キー管理にはその他、次のような利点があります。

  • 追加の承認チェック (職務の分離の実現)。

  • ハードウェア ベースの暗号化/暗号化解除のパフォーマンスの向上。

  • 外部での暗号化キーの生成。

  • 外部での暗号化キーの格納 (データとキーの物理的な分離)。

  • 暗号化キーの取得。

  • 外部での暗号化キーの保持 (暗号化キーのローテーションの実現)。

  • 暗号化キーのより簡単な復元。

  • 暗号化キーの管理可能な配布。

  • 暗号化キーの安全な破棄。

拡張キー管理は、ユーザー名とパスワードの組み合わせに対して使用することも、EKM ドライバーで定義されたその他の方法に対して使用することもできます。

注記注意

トラブルシューティングの際には、EKM プロバイダーから取得した暗号化キーを Microsoft テクニカル サポートに提供する必要性や、問題を解決するためにベンダーのツールやプロセスにアクセスする必要性が生じる場合もあります。

EKM デバイスによる認証

EKM モジュールでは複数の種類の認証をサポートできますが、各プロバイダーが SQL Server に公開する認証の種類は 1 つだけです。したがって、モジュールで基本認証とその他の認証方法がサポートされている場合、公開されるのはいずれか一方だけで、両方は公開されません。

ユーザー名/パスワードを使用する EKM デバイス固有の基本認証

SQL Server では、ユーザー名/パスワードのペアを使用する基本認証をサポートしている EKM モジュールで、資格情報による透過的な認証を利用できます。資格情報の詳細については、「資格情報 (データベース エンジン)」を参照してください。

EKM プロバイダーに対して資格情報を作成し、それをログイン (Windows アカウントと SQL Server アカウントの両方) にマップすることにより、ログインごとに EKM モジュールにアクセスできます。資格情報の Identify フィールドにユーザー名を含め、secret フィールドに EKM モジュールに接続するためのパスワードを含めます。

ログインにマップされた EKM プロバイダーの資格情報がない場合は、SQL Server サービス アカウントにマップされた資格情報が使用されます。

それぞれが異なる EKM プロバイダーに対して使用される資格情報であれば、1 つのログインに複数の資格情報をマップできます。マップされた資格情報は、各ログインで各 EKM プロバイダーにつき 1 つだけ存在する必要があります。同じ資格情報を他のログインにマップすることはできます。

その他の種類の EKM デバイス固有の認証

Windows 認証やユーザー/パスワードの組み合わせの認証以外を使用する EKM モジュールに対しては、SQL Server とは別に認証を行う必要があります。

EKM デバイスによる暗号化および暗号化解除

対称キーと非対称キーを使用してデータを暗号化および暗号化解除するには、以下の関数と機能を使用できます。

関数または機能

参照

対称キー暗号化

CREATE SYMMETRIC KEY (Transact-SQL)

非対称キー暗号化

CREATE ASYMMETRIC KEY (Transact-SQL)

EncryptByKey(key_guid, 'cleartext', )

ENCRYPTBYKEY (Transact-SQL)

DecryptByKey(ciphertext, …)

DECRYPTBYKEY (Transact-SQL)

EncryptByAsmKey(key_guid, 'cleartext')

ENCRYPTBYASYMKEY (Transact-SQL)

DecryptByAsmKey(ciphertext)

DECRYPTBYASYMKEY (Transact-SQL)

EKM キーによるデータベース キーの暗号化

SQL Server では、EKM キーを使用してデータベースのその他のキーを暗号化できます。EKM デバイスで対称キーと非対称キーの両方を作成および使用できます。EKM 非対称キーを使用してネイティブ (EKM 以外) の対称キーを暗号化することができます。

次の例では、データベースの対称キーを作成し、それを EKM モジュールのキーを使用して暗号化しています。

CREATE SYMMETRIC KEY Key1
WITH ALGORITHM = AES_256
ENCRYPTION BY EKM_AKey1;
GO
--Open database key
OPEN SYMMETRIC KEY Key1
DECRYPTION BY EKM_AKey1

CREATE SYMMETRIC KEY Key1
WITH ALGORITHM = AES_256
ENCRYPTION BY EKM_AKey1;
GO
--Open database key
OPEN SYMMETRIC KEY Key1
DECRYPTION BY EKM_AKey1

SQL Server のデータベース キーとサーバー キーの詳細については、「SQL Server とデータベースの暗号化キー (データベース エンジン)」を参照してください。

注意

別の EKM キーを使用して EKM キーを暗号化することはできません。

関連項目

タスク

参照

概念