※ 本記事は2017年12月13日に公開されたものです。
データベースで暗号化する機能として、Oracle DatabaseではAdvanced Security Optionで透過的データ暗号化(TDE:Transparent Data Encryption)を提供しています。
透過的データ暗号化はその名の通り、データベースがアプリケーションから透過的に自動的に暗号化して保存する機能です。アプリケーションからは透過的であるため、アプリケーションを書き換える必要はありません。アプリケーションの変更なくコンプライアンス要件などの格納データの暗号化を実現することができます。
透過的データ暗号化では、表の列単位(10gR2~)と表領域単位(11gR1~)の2つの暗号化機能を提供しています。ここでは性能への影響が少なく、多くのお客様が選択している表領域の暗号化機能を紹介します。表領域暗号化と列暗号化の違いは最後にまとめます。
表領域暗号化は、表領域全体を暗号化する機能でその表領域に保存された表、索引などのオブジェクトを自動的に暗号化することができます。また、暗号化の鍵管理もOracle Keystore(11gR2まではOracle Walletという名称)で安全に管理するための機能を提供しています。
表領域暗号化の特徴は以下の通りです。
- 表領域単位での暗号化
- 表領域内の表や索引といったオブジェクトは すべて暗号化される
- データブロックに対するI/Oで暗号化・復号
- REDOログ、UNDO表領域、アーカイブログも暗号化される
- SGAのバッファキャッシュ上は暗号化されていない
- 暗号化してもデータサイズは増加しない
- 表領域暗号鍵はデータファイルのヘッダーに格納
- 暗号列への索引に制限なし
- ほとんどすべてのオブジェクトが暗号化可能 (BFILEのみ不可)

透過的データ暗号化を利用する際にデータベース管理者が管理する暗号鍵は1つだけです。この鍵をマスター鍵と呼びます。マスター鍵はOracle Keystoreとしてファイルに保存するか、暗号処理と鍵管理専用デバイスであるHSM(Hardware Security Module)に格納することができます。実際にデータを暗号化している鍵は表領域暗号鍵でマスター鍵ではこの表領域暗号鍵を暗号化しています。暗号化された表領域ごとに異なる表領域暗号鍵が作成され、データベース内に保存されます。マスター鍵はOracle KeystoreもしくはHSMとしてデータベース外部に1つだけ独立して保持されつつ、実際にデータを暗号化するための鍵は表領域単位で複数あり、データベース内で自動的に管理されるという、管理性と安全性に優れた鍵管理方式になっています。

なお、列暗号と表領域暗号の違いは以下の通りです。

列暗号はSQL発行のタイミングで暗号化・復号処理がレコード単位で実施されるので表領域暗号化と比べて性能への影響が大きくなる傾向があり、最近では一般的に表領域暗号化が利用されています。
