本連載では、データベースセキュリティの「考え方」と「必要な対策」をおさらいし、Oracle Databaseを軸にした「具体的な実装方法」や「Tips」を紹介していきます。今回は、Oracle Databaseの透過的データ暗号化機能について紹介します。
Oracle Databaseでは、保存するデータの暗号化のために透過的データ暗号化(TDE:Transparent Data Encryption)機能を提供しています。
一番の特徴は、「透過的」という名前の通り、アプリケーションの書き換えを行わなくてもよいことです。暗号化/復号、暗号鍵の管理は全てユーザーやアプリケーションから透過的に行われます。透過的データ暗号化機能では、表の列単位および表領域単位の暗号化を提供していますが、ここでは一般的に利用されている表領域単位の暗号化を解説します。
この機能は、「表領域単位で暗号化を設定し、その表領域の中に格納される表や索引は自動的に暗号化されてディスクに保存される」というものです。外部ファイルへのポインタであるBFILE以外の全てのデータ型が利用可能で、暗号化前後でデータ量の変化もなく、特別な設計は不要です。
実際にデータが格納されるデータファイルだけではなく、REDOログやソートなどに利用される一時表領域も、データがディスクに書き込まれる際は暗号化されます。
暗号化/復号のタイミングはディスクI/O時ですので、メモリ(データベースバッファキャッシュ)上では暗号化されない状態です。データベースの一般的な処理では、よくアクセスするデータはメモリ上に常駐させるようなチューニングを行いますが、きちんとチューニングされたキャッシュヒット率の高いアプリケーションでは、暗号化/復号処理は実行されないのでオーバーヘッドは発生しません。また、アプリケーションで暗号化した後に格納する場合と異なり、索引も制限なく利用できるので、暗号化を行うことによる特別なチューニングは不要です。
「チューニングされたアプリケーションではオーバーヘッドはない」と書きましたが、ディスクI/Oが多いバッチ処理でも、暗号化/復号にIntelのAES-NIやSPARCの暗号化アクセラレータといったハードウェア機能を利用できるので、性能への影響を最小化できます。パフォーマンス・オーバーヘッドに関してはマニュアルに以下のような記載があります。
透過的データ暗号化の正確なパフォーマンス・テストの作成には、様々な変動要素が関係します。テスト環境、テスト・ケースまたはワークロード、計測メトリックまたは方法などにより、結果は変わります。オラクル社は、考えられる全てのシナリオに当てはまる、パフォーマンスオーバーヘッドの具体的なパーセンテージを保証することはできません。実際に、透過的データ暗号化の多くのお客様のパフォーマンス・テストでは1桁台前半のパーセンテージが示されますが、必ずそうなるわけではありません。オーバーヘッドがそれぞれ1パーセントおよび2パーセントである顧客事例が、Oracle Technology Networkの次のURLで公開されています。
(出典:「Advanced Securityガイド 」マニュアル、原文ママ)
また、データの圧縮機能であるAdvanced Compressionを利用することで、ディスクI/Oを減らし、パフォーマンスへの影響をさらに小さくすることができますが、これは暗号化しているかどうかにかかわらず性能を向上させる機能ですので、暗号化に特化したチューニングというわけではありません。基本的な索引の利用やキャッシュの増大など、ディスクI/Oを最小化するための一般的なデータベースのチューニングが、暗号化のパフォーマンス影響の最小化にもつながります。
暗号時に利用する暗号鍵には、実際にデータを暗号化している「表領域暗号鍵」と、その表領域暗号鍵を暗号化する「マスター鍵」の2種類があります。人手による管理が必要なのは、データベース当たり1つのマスター鍵のみです。マスター鍵はソフトウェアのキーストア(Oracle Wallet)、もしくは鍵管理専用アプライアンスであるHardware Security Module(HSM)により、データベースの外部で安全に管理できます。
各表領域は個別の表領域暗号鍵で暗号化されています。全てのデータが同じ鍵で暗号化されているのではなく、表領域ごとに異なる鍵で暗号化されています。表領域暗号鍵はマスター鍵で暗号化され、安全にデータベース内に格納されています。この2段階の鍵構造により、実際のデータはそれぞれの異なる鍵で暗号化しつつ、「鍵管理はマスター鍵1つだけ」という管理性に優れた仕組みを実現しています。
Copyright © ITmedia, Inc. All Rights Reserved.