Always Encrypted のキー管理の概要Overview of key management for Always Encrypted

適用対象: yesSQL Server yesAzure SQL Database noAzure Synapse Analytics (SQL DW) noParallel Data Warehouse APPLIES TO: yesSQL Server yesAzure SQL Database noAzure Synapse Analytics (SQL DW) noParallel Data Warehouse

Always Encrypted は、2 種類の暗号化キーを使用します。1 つはデータを暗号化するキーと、もう 1 つはデータを暗号化するキーを暗号化するキーです。Always Encrypted uses two types of cryptographic keys to protect your data - one key to encrypt your data, and another key to encrypt the key that encrypts your data. 列暗号化キーはデータを暗号化し、列マスター キーは列暗号化キーを暗号化します。The column encryption key encrypts your data, the column master key encrypts the column encryption key. この記事では、これらの暗号化キーを管理するための詳細な概要を提供します。This article provides a detailed overview for managing these encryption keys.

Always Encrypted キーとキーの管理について説明するときは、実際の暗号化キーと、キーを 記述 するメタデータ オブジェクトとの違いを理解することが重要です。When discussing Always Encrypted keys and key management it is important to understand the distinction between the actual cryptographic keys, and the metadata objects that describe the keys. 実際の暗号化キーを指す 列暗号化キー列マスター キー という用語と、データベース内の Always Encrypted キーの 説明 を指す 列暗号化キーのメタデータ列マスター キーのメタデータ という用語を使用します。We use the terms column encryption key and column master key to refer to the actual cryptographic keys, and we use column encryption key metadata and column master key metadata to refer to the Always Encrypted key descriptions in the database.

  • 列暗号化キー は、データを暗号化するために使用される内容暗号化キーです。Column encryption keys are content-encryption keys used to encrypt data. 名前が示すように、列暗号化キーはデータベースの列内のデータを暗号化するために使用します。As the name implies, you use column encryption keys to encrypt data in database columns. 同じ列暗号化キーで 1 つ以上の列を暗号化することも、ご使用のアプリケーションの要件に応じて複数の列暗号化キーを使用することもできます。You can encrypt 1 or more columns with the same column encryption key, or you can use multiple column encryption keys depending on your application requirements. 列暗号化キーは自体が暗号化され、列暗号化キーの暗号化された値だけが (列暗号化キーのメタデータの一部として) データベースに格納されます。The column encryption keys are themselves encrypted, and only the encrypted values of the column encryption keys are stored in the database (as part of the column encryption key metadata). 列暗号化キーのメタデータは、 sys.column_encryption_keys (TRANSACT-SQL)sys.column_encryption_key_values (TRANSACT-SQL) カタログ ビューに格納されます。The column encryption key metadata is stored in the sys.column_encryption_keys (Transact-SQL) and sys.column_encryption_key_values (Transact-SQL) catalog views. AES-256 アルゴリズムで使用される列暗号化キーは 256 ビット長です。Column encryption keys used with the AES-256 algorithm are 256-bit long.

  • 列マスター キー は、列暗号化キーの暗号化に使用される保護キーです。Column master keys are key-protecting keys used to encrypt column encryption keys. 列マスター キーは、Windows 証明書ストア、Azure Key Vault、またはハードウェア セキュリティ モジュールなどの信頼できるキー ストアに格納する必要があります。Column master keys must be stored in a trusted key store, such as Windows Certificate Store, Azure Key Vault, or a hardware security module. データベースには、列マスター キーに関するメタデータ (キー ストアの種類と場所) のみが含まれます。The database only contains metadata about column master keys (the type of key store and location). 列マスター キーのメタデータは、 sys.column_master_keys (TRANSACT-SQL) カタログ ビューに格納されています。The column master key metadata is stored in the sys.column_master_keys (Transact-SQL) catalog view.

データベース システム内のキー メタデータには、プレーンテキストの列マスター キーまたはプレーンテキストの列暗号化キーは含まれていないことに注意してください。It is important to note that the key metadata in the database system does not contain plaintext column master keys or plaintext column encryption keys. データベースには、列マスター キーの種類と場所に関する情報と、列暗号化キーの暗号化された値のみが含まれます。The database only contains information about the type and location of column master keys, and encrypted values of column encryption keys. これは、プレーンテキストのキーはデータベース システムに決して公開されないので、データベース システムが侵害された場合でも、Always Encrypted を使用して保護されているデータの安全性が保証されることを意味します。This means that plaintext keys are never exposed to the database system ensuring that data protected using Always Encrypted is safe, even if the database system gets compromised. データベース システムがプレーンテキストのキーにアクセスできないようにするため、キー管理ツールは、データベースをホストしているコンピューターとは異なるコンピューターで必ず実行します。詳細については、後述の「 キー管理のセキュリティに関する考慮事項 」でご確認ください。To ensure the database system cannot gain access to the plaintext keys, be sure to run your key management tools on a different machine than the one hosting your database - review the Security Considerations for Key Management section below for details.

データベースには (Always Encrypted で保護された列内の) 暗号化されたデータだけが含まれ、プレーン テキストのキーにアクセスできないため、データを復号化することはできません。Because the database only contains encrypted data (in Always Encrypted protected columns), and cannot access the plaintext keys, it cannot decrypt the data. つまり、Always Encrypted 列に対してクエリを実行しても、暗号化された値が返されるだけなので、保護されたデータを暗号化または復号化する必要があるクライアント アプリケーションは、列マスター キーと関連する列暗号化キーにアクセスできる必要があります。This means that querying Always Encrypted columns will simply return encrypted values, so client applications that need to encrypt or decrypt protected data must be able to access the column master key, and related column encryption keys. 詳しくは、「Always Encrypted を使用したアプリケーションの開発」をご覧ください。For details, see Develop Applications using Always Encrypted.

キー管理タスクKey Management Tasks

キー管理のプロセスは、次の高度なタスクに分類できます。The process of managing keys can be divided into the following high-level tasks:

  • キーのプロビジョニング - 信頼できるキー ストア (たとえば、Windows 証明書ストア、Azure Key Vault、またはハードウェア セキュリティ モジュール) に物理キーを作成し、列マスター キーで列暗号化キーを暗号化し、両方の種類のメタデータをデータベースに作成します。Key provisioning - Creating the physical keys in a trusted key store (for example, in the Windows Certificate Store, Azure Key Vault, or a hardware security module), encrypting column encryption keys with column master keys, and creating metadata for both types of keys in the database.

  • キーの交換 -既存のキーを定期的に新しいキーに交換します。Key rotation - Periodically replacing an existing key with a new key. キーが侵害された場合や、暗号化キーを定期的に交換することを定めた組織のポリシーまたはコンプライアンス規定に準拠するために、キーを交換する必要があります。You may need to rotate a key if the key has been compromised, or in order to comply with your organization's policies or compliance regulations that mandate cryptographic keys must be rotated.

キー管理の役割Key Management Roles

Always Encrypted キーを管理するユーザーには、セキュリティ管理者とデータベース管理者 (DBA) の 2 つの異なる役割があります。There are two distinct roles of users who manage Always Encrypted keys; Security Administrators and Database Administrators (DBAs):

  • セキュリティ管理者 – 列暗号化キーと列マスター キーを生成し、列マスター キーを含むキー ストアを管理します。Security Administrator - generates column encryption keys and column master keys and manages key stores containing the column master keys. これらのタスクを実行するには、セキュリティ管理者がキーとキー ストアにアクセスできる必要がありますが、データベースへのアクセスは必要ありません。To perform these tasks, a Security Administrator needs to be able to access the keys and the key store, but does not need access to the database.
  • DBA - データベース内のキーに関するメタデータを管理します。DBA - manages metadata about the keys in the database. キー管理タスクを実行するには、DBA がデータベース内のキー メタデータを管理できる必要がありますが、キーまたは列マスター キーを保持しているキー ストアにアクセスする必要はありません。To perform key management tasks, a DBA needs to be able to manage key metadata in the database, but does not need access to the keys or the key store holding the column master keys.

上記の役割を考慮すると、Always Encrypted のキー管理タスクを実行するには、 役割の分離を使用する場合と 役割の分離を使用しない場合の 2 つの異なる方法があります。Considering the above roles, there are two different ways to perform key management tasks for Always Encrypted; with role separation, and without role separation. 組織のニーズに応じて、要件に最適なキー管理プロセスを選択できます。Depending on the needs of your organization you can select the key management process that best suits your requirements.

役割の分離を使用したキー管理Managing Keys with Role Separation

役割の分離を使用して Always Encrypted キーを管理する場合、組織内の別々の人がセキュリティ管理者の役割と DBA の役割を担当します。When Always Encrypted keys are managed with role separation, different people in an organization assume the Security Administrator and DBA roles. 役割の分離を使用したキー管理プロセスには、キーまたは実際のキーを保持するキー ストアへのアクセス権はありません。また、セキュリティ管理者には機密データを含むデータベースへのアクセス権はありません。A key management process with role separation ensures DBAs have no access to the keys or key stores holding the actual keys, and Security Administrators have no access to the database containing sensitive data. 組織内の DBA が機密データにアクセスできないようにすることが目的の場合は、役割の分離を使用してキーを管理することをお勧めします。Managing keys with role separation is recommended if your goal is to ensure DBAs in your organization cannot access sensitive data.

注: セキュリティ管理者はプレーンテキストのキーを生成して使用するため、データベース システムをホストしているのと同じコンピューター上、または DBA やその他の敵対する可能性のある人物がアクセスできるコンピューター上でタスクを決して実行しないようにする必要があります。Note: Security Administrators generate and work with the plaintext keys, so they should never perform their tasks on the same computers hosting a database system, or computers that can be accessed by DBAs or anyone else who might be potential adversaries.

役割の分離を使用しないキー管理Managing Keys without Role Separation

役割の分離を使用せずに Always Encrypted キーを管理する場合、1 人でセキュリティ管理者の役割と DBA の役割の両方を担当することができます。これは、その人がキー/キー ストアとキーのメタデータの両方にアクセスして管理できる必要があることを意味します。When Always Encrypted keys are managed without role separation, a single person can assume both Security Administrator and DBA roles, which implies that person needs to be able to access and manage both the keys/key stores and the key metadata. DevOps モデルを使用している組織、またはデータベースがクラウドでホストされていて、(オンプレミスの DBA ではなく) クラウドの管理者の機密データへのアクセスを制限することが主な目的の場合は、役割の分離を使用せずにキーを管理することをお勧めします。Managing keys without role separation can be recommended for organizations using the DevOps model, or if the database is hosted in the cloud and the primary goal is to restrict cloud administrators (but not on-premises DBAs), from accessing sensitive data.

Always Encrypted キーを管理するためのツールTools for Managing Always Encrypted Keys

Always Encrypted キーは、 SQL Server Management Studio (SSMS)PowerShellを使用して管理できます。Always Encrypted keys can be managed using SQL Server Management Studio (SSMS) and PowerShell:

キー管理でのセキュリティに関する考慮事項Security Considerations for Key Management

Always Encrypted の主な目的は、データベース システムまたはそのホスティング環境が侵害された場合でも、データベースに格納されている機密データの安全を保証することです。The primary objective of Always Encrypted is to ensure sensitive data stored in a database is safe, even if the database system or its hosting environment gets compromised. Always Encrypted が機密データの漏えい防止に役立つ、セキュリティ攻撃の例を次に示します。Examples of security attacks where Always Encrypted can help prevent sensitive data leaks include:

  • 高い特権を持つ悪意のあるデータベース ユーザー (DBA など)が、機密性の高いデータ列に対してクエリを実行する。A malicious high-privilege database user, such as a DBA, querying sensitive data columns.
  • SQL Server インスタンスをホストするコンピューターの悪意のある管理者が、SQL Server プロセスのメモリ、または SQL Server プロセスのダンプ ファイルをスキャンする。A rogue administrator of a computer hosting a SQL Server instance, scanning memory of a SQL Server process, or SQL Server process dump files.
  • 悪意のあるデータ センター オペレーターが、顧客データベースにクエリを実行する、SQL Server のダンプ ファイルを調べる、またはクラウド内の顧客データをホストするコンピューターのメモリを調べる。A malicious data center operator querying a customer database, examining SQL Server dump files, or examining the memory of a computer hosting customer data in the cloud.
  • データベースをホストしているコンピューター上でマルウェアが実行されている。Malware running on a computer hosting the database.

この種の攻撃を防ぐうえで Always Encrypted を効果的にするには、キー管理プロセスで、列マスター キーと列暗号化キー、および列マスター キーを含むキー ストアの資格情報が、潜在的な攻撃者に漏れることがないようにしなければなりません。To ensure Always Encrypted is effective in preventing these types of attacks, your key management process must ensure the column master keys and column encryption keys, as well as credentials to a key store containing the column master keys, are never revealed to a potential attacker. 従うべきいくつかのガイドラインを以下に示します。Here are a few guidelines, you should follow:

  • 列マスター キーまたは暗号化キーをデータベースをホストするコンピューター上で生成しないでください。Never generate column master keys or column encryption keys on a computer hosting your database. 代わりに、別のコンピューター (キー管理専用またはキーへのアクセスを必要とするアプリケーションをホストしているコンピューターのいずれか) でキーを生成します。Instead generate the keys on a separate computer, which is either dedicated for key management, or is a machine hosting applications that will need access to the keys anyway. つまり、攻撃者がプロビジョニングや Always Encrypted キーの維持に使用しているコンピューターにアクセスすると、ツールのメモリにキーが短時間表示されるだけでも、攻撃者がキーを取得できる可能性があるため、キーを生成するために使用したツールをデータベースをホストしているコンピューター上で決して実行しないでくださいThis means that you should never run tools used to generate the keys on the computer hosting your database because if an attacker accesses a computer used to provision or maintain your Always Encrypted keys, the attacker can potentially get your keys, even if the keys only appear in the tool's memory for a short time.
  • キー管理プロセスで誤って列マスター キーや列暗号化キーを公開しないようにするには、キー管理プロセスを定義して実装する前に、潜在的な敵対者およびセキュリティの脅威を識別することが重要です。To ensure your key management process does not inadvertently reveal column master keys or column encryption keys, it is critical to identify potential adversaries and security threats before defining and implementing a key management process. たとえば、DBA が機密データにアクセスできないようにすることが目的の場合は、DBA がキーの生成を担当することはできません。For example, if your goal is to ensure DBAs have no access to sensitive data, then a DBA cannot be responsible for generating the keys. ただし、メタデータにはプレーンテキストのキーは含まれていないため、DBA はデータベース内のキーのメタデータを管理することは できますA DBA, however, can manage key metadata in the database, as the metadata does not contain the plaintext keys.

Next StepsNext Steps

参照See Also