Always Encrypted のキー管理の概要

適用対象: はいSQL Server (サポートされているすべてのバージョン) はいAzure SQL データベース

Always Encrypted は、2 種類の暗号化キーを使用します。1 つはデータを暗号化するキーと、もう 1 つはデータを暗号化するキーを暗号化するキーです。 列暗号化キーはデータを暗号化し、列マスター キーは列暗号化キーを暗号化します。 この記事では、これらの暗号化キーを管理するための詳細な概要を提供します。

Always Encrypted キーとキーの管理について説明するときは、実際の暗号化キーと、キーを 記述 するメタデータ オブジェクトとの違いを理解することが重要です。 実際の暗号化キーを指す 列暗号化キー列マスター キー という用語と、データベース内の Always Encrypted キーの 説明 を指す 列暗号化キーのメタデータ列マスター キーのメタデータ という用語を使用します。

  • 列暗号化キー は、データを暗号化するために使用される内容暗号化キーです。 名前が示すように、列暗号化キーはデータベースの列内のデータを暗号化するために使用します。 同じ列暗号化キーで 1 つ以上の列を暗号化することも、ご使用のアプリケーションの要件に応じて複数の列暗号化キーを使用することもできます。 列暗号化キーは自体が暗号化され、列暗号化キーの暗号化された値だけが (列暗号化キーのメタデータの一部として) データベースに格納されます。 列暗号化キーのメタデータは、 sys.column_encryption_keys (TRANSACT-SQL)sys.column_encryption_key_values (TRANSACT-SQL) カタログ ビューに格納されます。 AES-256 アルゴリズムで使用される列暗号化キーは 256 ビット長です。

  • 列マスター キー は、列暗号化キーの暗号化に使用される保護キーです。 列マスター キーは、Windows 証明書ストア、Azure Key Vault、またはハードウェア セキュリティ モジュールなどの信頼できるキー ストアに格納する必要があります。 データベースには、列マスター キーに関するメタデータ (キー ストアの種類と場所) のみが含まれます。 列マスター キーのメタデータは、 sys.column_master_keys (TRANSACT-SQL) カタログ ビューに格納されています。

データベース システム内のキー メタデータには、プレーンテキストの列マスター キーまたはプレーンテキストの列暗号化キーは含まれていないことに注意してください。 データベースには、列マスター キーの種類と場所に関する情報と、列暗号化キーの暗号化された値のみが含まれます。 これは、プレーンテキストのキーはデータベース システムに決して公開されないので、データベース システムが侵害された場合でも、Always Encrypted を使用して保護されているデータの安全性が保証されることを意味します。 データベース システムがプレーンテキストのキーにアクセスできないようにするため、キー管理ツールは、データベースをホストしているコンピューターとは異なるコンピューターで必ず実行します。詳細については、後述の「 キー管理のセキュリティに関する考慮事項 」でご確認ください。

データベースには (Always Encrypted で保護された列内の) 暗号化されたデータだけが含まれ、プレーン テキストのキーにアクセスできないため、データを復号化することはできません。 つまり、Always Encrypted 列に対してクエリを実行しても、暗号化された値が返されるだけなので、保護されたデータを暗号化または復号化する必要があるクライアント アプリケーションは、列マスター キーと関連する列暗号化キーにアクセスできる必要があります。 詳しくは、「Always Encrypted を使用したアプリケーションの開発」をご覧ください。

キー管理タスク

キー管理のプロセスは、次の高度なタスクに分類できます。

  • キーのプロビジョニング - 信頼できるキー ストア (たとえば、Windows 証明書ストア、Azure Key Vault、またはハードウェア セキュリティ モジュール) に物理キーを作成し、列マスター キーで列暗号化キーを暗号化し、両方の種類のメタデータをデータベースに作成します。

  • キーの交換 -既存のキーを定期的に新しいキーに交換します。 キーが侵害された場合や、暗号化キーを定期的に交換することを定めた組織のポリシーまたはコンプライアンス規定に準拠するために、キーを交換する必要があります。

キー管理の役割

Always Encrypted キーを管理するユーザーには、セキュリティ管理者とデータベース管理者 (DBA) の 2 つの異なる役割があります。

  • セキュリティ管理者 – 列暗号化キーと列マスター キーを生成し、列マスター キーを含むキー ストアを管理します。 これらのタスクを実行するには、セキュリティ管理者がキーとキー ストアにアクセスできる必要がありますが、データベースへのアクセスは必要ありません。
  • DBA - データベース内のキーに関するメタデータを管理します。 キー管理タスクを実行するには、DBA がデータベース内のキー メタデータを管理できる必要がありますが、キーまたは列マスター キーを保持しているキー ストアにアクセスする必要はありません。

上記の役割を考慮すると、Always Encrypted のキー管理タスクを実行するには、 役割の分離を使用する 場合と 役割の分離を使用しない 場合の 2 つの異なる方法があります。 組織のニーズに応じて、要件に最適なキー管理プロセスを選択できます。

役割の分離を使用したキー管理

役割の分離を使用して Always Encrypted キーを管理する場合、組織内の別々の人がセキュリティ管理者の役割と DBA の役割を担当します。 役割の分離を使用したキー管理プロセスには、キーまたは実際のキーを保持するキー ストアへのアクセス権はありません。また、セキュリティ管理者には機密データを含むデータベースへのアクセス権はありません。 組織内の DBA が機密データにアクセスできないようにすることが目的の場合は、役割の分離を使用してキーを管理することをお勧めします。

注: セキュリティ管理者はプレーンテキストのキーを生成して使用するため、データベース システムをホストしているのと同じコンピューター上、または DBA やその他の敵対する可能性のある人物がアクセスできるコンピューター上でタスクを決して実行しないようにする必要があります。

役割の分離を使用しないキー管理

役割の分離を使用せずに Always Encrypted キーを管理する場合、1 人でセキュリティ管理者の役割と DBA の役割の両方を担当することができます。これは、その人がキー/キー ストアとキーのメタデータの両方にアクセスして管理できる必要があることを意味します。 DevOps モデルを使用している組織、またはデータベースがクラウドでホストされていて、(オンプレミスの DBA ではなく) クラウドの管理者の機密データへのアクセスを制限することが主な目的の場合は、役割の分離を使用せずにキーを管理することをお勧めします。

Always Encrypted キーを管理するためのツール

Always Encrypted キーは、 SQL Server Management Studio (SSMS)PowerShellを使用して管理できます。

キー管理でのセキュリティに関する考慮事項

Always Encrypted の主な目的は、データベース システムまたはそのホスティング環境が侵害された場合でも、データベースに格納されている機密データの安全を保証することです。 Always Encrypted が機密データの漏えい防止に役立つ、セキュリティ攻撃の例を次に示します。

  • 高い特権を持つ悪意のあるデータベース ユーザー (DBA など)が、機密性の高いデータ列に対してクエリを実行する。
  • SQL Server インスタンスをホストするコンピューターの悪意のある管理者が、SQL Server プロセスのメモリ、または SQL Server プロセスのダンプ ファイルをスキャンする。
  • 悪意のあるデータ センター オペレーターが、顧客データベースにクエリを実行する、SQL Server のダンプ ファイルを調べる、またはクラウド内の顧客データをホストするコンピューターのメモリを調べる。
  • データベースをホストしているコンピューター上でマルウェアが実行されている。

この種の攻撃を防ぐうえで Always Encrypted を効果的にするには、キー管理プロセスで、列マスター キーと列暗号化キー、および列マスター キーを含むキー ストアの資格情報が、潜在的な攻撃者に漏れることがないようにしなければなりません。 従うべきいくつかのガイドラインを以下に示します。

  • 列マスター キーまたは暗号化キーをデータベースをホストするコンピューター上で生成しないでください。 代わりに、別のコンピューター (キー管理専用またはキーへのアクセスを必要とするアプリケーションをホストしているコンピューターのいずれか) でキーを生成します。 つまり、攻撃者がプロビジョニングや Always Encrypted キーの維持に使用しているコンピューターにアクセスすると、ツールのメモリにキーが短時間表示されるだけでも、攻撃者がキーを取得できる可能性があるため、キーを生成するために使用したツールをデータベースをホストしているコンピューター上で決して実行しないでください
  • キー管理プロセスで誤って列マスター キーや列暗号化キーを公開しないようにするには、キー管理プロセスを定義して実装する前に、潜在的な敵対者およびセキュリティの脅威を識別することが重要です。 たとえば、DBA が機密データにアクセスできないようにすることが目的の場合は、DBA がキーの生成を担当することはできません。 ただし、メタデータにはプレーンテキストのキーは含まれていないため、DBA はデータベース内のキーのメタデータを管理することは できます

次の手順

参照