透過的なデータ暗号化と Always Encrypted

執筆者: Xiaochen Wu (Senior Program Manager, Azure SQL Database)

このポストは、2018 年 9 月 4 日に投稿された Transparent data encryption or always encrypted? の翻訳です。

 

Azure SQL Database および SQL Server に最適な暗号化テクノロジを選択する

SQL Server および Azure SQL Database は、透過的なデータ暗号化 (TDE)Always Encrypted の 2 種類の暗号化テクノロジに対応しています。一般的な暗号化の目的は、さまざまなシナリオの不正アクセスからデータを守ることです。この 2 つのテクノロジは相互補完的な役割を持っています。今回の記事では、2 つの特長を比較しながら、自社に最適なテクノロジの選び方やサービスを組み合わせて多層的なセキュリティ アプローチを構築する方法などをご紹介します。

透過的なデータ暗号化 (TDE)

TDE は保存中のデータを保護するセキュリティ強化テクノロジです。データセンター内部でのデータ窃盗や、ディスク ドライブやバックアップ テープといった保護が不十分なハードウェアやメディアの処分時などに、生のデータ ファイルやバックアップ データへのオフライン アクセスを防止するのに効果的です。透過的なデータ暗号化 (TDE) 機能の紹介記事 (英語) では、攻撃者が盗んだデータベースからデータ、ログ ファイル、スナップショット、コピー ファイル、バックアップを復元するのを防ぐ方法や TDE のベスト プラクティスを紹介しています。

TDE の有効化は、データベース保存時にデータ暗号化を義務付けている法律、規制、各業界のセキュリティ ガイドラインなどの多くに準拠しています。SQL データベースのデータ保護要件が一切ない場合を除いては、TDE を有効化しておくことをお勧めします。TDE で保存中のデータを一定レベルで保護することはできますが、その他のリスクについては OS ファイル システムやハードウェアの階層で対応する必要があります。詳しくは Bitlocker のドキュメントをご覧ください。

TDE は、AES 暗号化アルゴリズムを使用してデータベース全体を暗号化します。この際、既存のアプリケーションを変更する必要はありません。また、入出力されるデータやログ ファイルをリアルタイムで暗号化および復号化することができます。データベースがメモリに読み込まれると、sysadmin や db_owner ロールを持つ SQL Server 管理者、またはクラウドの Azure SQL Database 管理者がデータにアクセスできるようになり、データベースのアクセス権限を持つすべてのロールやアプリケーションで使用することができます。もし、管理者がアクセスすべきでない機密データがデータベースに存在し、特定の列のデータをメモリ内でも暗号化しておく必要がある場合は、TDE と Always Encrypted を併用することを検討してください。

TDE では、サービス管理キーとユーザー管理キーの 2 種類の暗号化キーを使用できます。サービス管理キーでは、サーバーのマスター データベースに保存されている証明書が TDE プロテクターとなります。ユーザー管理キーでは、EKM モジュールや Azure Key Vault で保護されている非対称キーが TDE プロテクターです。Azure SQL Database で TDE と Bring Your Own Key (BYOK) を併用する場合、TDE プロテクターは常にキー コンテナー内に存在しますが、データを暗号化 (および復号化) するデータベース暗号化キー (DEK) を暗号化 (および復号化) する際に、Azure SQL Database がキー コンテナーにアクセスする必要があります。暗号化された DEK がキー コンテナーに送られて複合化されると、複合化された DEK はメモリ内に保存されます。その後、キー コンテナー内の TDE プロテクターが削除されるか、SQL Database へのアクセスが取り消されると、データベースが 24 時間以内にオフラインになり、DEK がメモリから削除されます。

Always Encrypted

Always Encrypted は、Azure SQL Database や SQL Server データベースに保存されている機密データを、データベース管理者 (sysadmin や db_owner ロールを持つ SQL Server 管理者など)、SQL Server インスタンスをホストするマシンの管理者、クラウドの Azure SQL Database の管理者のアクセスから保護する機能です。データベースに保存されているデータは、マシン全体がマルウェアに感染した場合でも保護されます。Always Encrypted では、クライアント側で暗号化を実行します。データがデータベースに送られる前に、アプリケーション内のデータベース ドライバーによって透過的に暗号化されます。また、クエリ結果として返された暗号化データも同様に復号化されます。

Always Encrypted では、クライアント側での暗号化処理に使用されるキーがデータベース エンジン (SQL Database や SQL Server) に開示されることはありません。以下の 2 種類のキーがあります。

  • 列暗号化キー: データベース内のデータの暗号化に使用されます。これは暗号化された状態でデータベース内に保存されます (プレーンテキストで保存されることはありません)。
  • 列マスター キー: 列暗号化キーの暗号化に使用されます。これは、Windows 証明書ストア、Azure Key Vault、ハードウェア セキュリティ モジュールなどの外部のキー ストアに保存されます。TDE とは異なり、Azure Key Vault に保存されているキーにアクセスできるのはクライアント アプリケーションのみで、データベースはアクセスできません。

Always Encrypted には、「使用中」のデータを保護できるという特長があります。つまり、演算処理や SQL Server のメモリ内での処理が実行されている間も、データを暗号化しておくことができます。そのため、SQL Server がメモリ スキャン攻撃を受けた場合やメモリ ダンプ ファイルからデータを抽出された場合にもデータは保護されます。

高いアクセス権限を持つユーザーがデータの内容を「知る必要がない」場合には、データを保護するためにデータ所有者 (閲覧可能) とデータ管理者 (アクセス権限なし) を区別することができます。これにより、機密データを安全にクラウドに保存したり、オンプレミス データベースの管理を第三者に委任したり、データベース管理者の機密事項取り扱い許可要件を緩和したりできるようになります。

TDE とは異なり、Always Encrypted はアプリケーションに対して完全に透過的ではありません。クライアント ドライバーはデータを透過的に暗号化または復号化できますが、要件や制限によってはアプリケーションの変更が必要となる場合があります。たとえば、Always Encrypted では暗号化されたデータベース列への操作が限定されてしまうため、特に機密性が高いデータを含む列のみに適用することをお勧めします。

クライアント側でデータを暗号化する Always Encrypted の大きな特長は、暗号化の対象列のデータは、保存中、通信中を含めていつでも保護されるという点です。ただし、使用中のデータを保護する必要がない場合は、保存中のデータに TDE、通信中のデータに TLS を使用することをお勧めします。実際には、Always Encrypted、TDE、TLS をすべて併用するのが望ましい場合もあります。

  • TDE は、最前線の保護機能として、データベースに保存されているデータをすべて暗号化します (一般的なコンプライアンス要件に対応)。
  • TLS は、データベースの通信トラフィックをすべて保護します。
  • Always Encrypted は、高いアクセス権限を持ったユーザーやマルウェアからデータベース環境内の機密性の高いデータを保護します。

以下は、TDE と Always Encrypted の機能を比較した表です。

Always Encrypted TDE
SQL Server のバージョン SQL Server 2016 以降、Azure SQL Database SQL Server 2008 以降、Azure SQL Database
SQL Server Enterprise Edition の要否 不要 (SQL Server 2016 SP1 以降で使用可能) 必要
Azure SQL Database 内で無料で使用可能
保存中のデータを保護
使用中のデータを保護 ×
SQL 管理者などの管理者からデータを保護 ×
クライアント側でのデータの暗号化/復号 ×
サーバー側でのデータの暗号化/復号 ×
列レベルでの暗号化 × (データベース全体を暗号化)
アプリケーションに対する透過性 部分的
暗号化オプション ×
暗号化キーの管理 ユーザー管理キー サービス管理キー/ユーザー管理キー
使用中のキーの保護 ×
ドライバーの要否 必要 不要

詳細情報