SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

EnterpriseZine(エンタープライズジン)編集部では、情報システム担当、セキュリティ担当の方々向けに、EnterpriseZine Day、Security Online Day、DataTechという、3つのイベントを開催しております。それぞれ編集部独自の切り口で、業界トレンドや最新事例を網羅。最新の動向を知ることができる場として、好評を得ています。

最新イベントはこちら!

Data Tech 2024

2024年11月21日(木)オンライン開催

EnterpriseZine(エンタープライズジン)編集部では、情報システム担当、セキュリティ担当の方々向けの講座「EnterpriseZine Academy」や、すべてのITパーソンに向けた「新エバンジェリスト養成講座」などの講座を企画しています。EnterpriseZine編集部ならではの切り口・企画・講師セレクトで、明日を担うIT人材の育成をミッションに展開しております。

お申し込み受付中!

EnterpriseZine(エンタープライズジン)

EnterpriseZine編集部が最旬ITトピックの深層に迫る。ここでしか読めない、エンタープライズITの最新トピックをお届けします。

『EnterpriseZine Press』

2024年秋号(EnterpriseZine Press 2024 Autumn)特集「生成AI時代に考える“真のDX人材育成”──『スキル策定』『実践』2つの観点で紐解く」

oracletechアーカイブス!

データベース・セキュリティの実装 第3回 データベースの暗号化とパフォーマンスの両立


ネットワークの暗号化

 ネットワークの暗号化は、9i以前からある最も早く実装された機能である。設定方法もsqlnet.oraファイルに追記するだけという非常に簡単な設定なので、既存環境にも導入がし易い。以下は、Oracle Net Managerを使用した設定の例だが、使用するのはこの暗号化のタグの画面のみである。

Oracle Net Manager
Oracle Net Manager

 クライアントごとに個々に設定もすることができるが、もっとも簡単かつ管理が楽になるのはサーバー側の設定で、暗号化タイプ「必要」、暗号化シード(※オプションなので入力の必要はなし)、使用可能なメソッド 「AES 128、192、256」のいずれかを選択した設定だ。この場合は接続するクライアントは必ず暗号化通信が求められる設定になるので、漏れなく暗号化をさせることができる。また、以下の2文をサーバー側のsqlnet.oraに直接追記しても良い。※Oracle Net Managerで暗号化シードが要求される場合は、直接sqlnet.oraに追記する

 SQLNET.ENCRYPTION_SERVER = required
 SQLNET.ENCRYPTION_TYPES_SERVER= (AES256)

 暗号化通信の設定はこれで完了だ。OTNにもチュートリアルがあるので参考にしてほしい。通信で使用する暗号鍵はセッション開始時に自動的に生成されるため、特に事前に暗号鍵を用意して管理する必要はない。また、通信の暗号化はパフォーマンスへの影響はない。わずかなこの設定だけで、従来通りにデータベースを使用することができ、かつ、暗号化通信を両立することができるのだ。

格納データの暗号化

 次に格納データの暗号化だが、Oracle Databaseの機能の歴史を紐解いていくと、PL/SQL暗号化ツールキットというストアドプログラムが9i以前から実装されている。古くは、DBMS_OBFUSCATION_TOOLKIT、10gからはDBMS_CRYPTOというパッケージが実装されており、このパッケージを明示的にコールしてアプリケーション側に暗号化、復号処理を実装する。ただ、このパッケージでの暗号化は大きな問題がある。一つは、パフォーマンス劣化が大きいという点、アプリケーション側の修正が必要となる点である。特にパフォーマンス劣化の影響は大きく、コンプライアンス上どうしても業務データを暗号化しなければならない等の要件の場合に限って使用されることが多く、格納データ自体の暗号化は普及していなかった。

 しかし、新たに10gR2から実装されたTransparent Data Encryption(TDE)は、上記の課題を大きく解決した機能である。

Transparent Data Encryption
Transparent Data Encryption

 このTDEの特徴は、暗号処理はすべてデータベース側で実行されるということだ。アプリケーションは従来通りのSQLをデータベースに実行し、データベース側で暗号/復号化処理を行ってアプリケーションへ送信する。アプリケーションのプログラムを修正する必要はない。また、パフォーマンスもデータベース側で暗号化に最適化されたアーキテクチャを実装することによって、飛躍的な向上を実現している。

 さらに11gR1からは、TDE 表領域暗号化という機能が実装された。

TDE表領域暗号化
TDE表領域暗号化

 この機能は、表領域自体を暗号化しておき、その中に入る表や索引、パッケージといったオブジェクトはすべて暗号化されるというものである。表領域は、最終的には物理的なデータファイルに属するわけだが、そのデータファイルそのものが暗号化されていると捉えて良い。物理的なOracleのファイルとしては、REDOログファイル、UNDO表領域やTEMP表領域のファイルがあるが、それらもすべて暗号化されている。暗号化/復号のタイミングだが、データファイルの場合、DBWR(データベース・ライター)がDiskへ書き込み、サーバープロセスがDiskから読み込みの際に行われる。

 また、表領域に格納したオブジェクトのサイズは変わらない(暗号化したとしても表のサイズは増加しない)、ほとんどすべてのデータ型 (BFILEのみ不可)含む表が暗号化可能といった制限の少ない柔軟な特徴を持っている。

 気になる表領域暗号化のパフォーマンスについてだが、暗号化なしを1とした処理時間で相対的に比較すると、表領域暗号化の場合で1.2程度の影響で抑えることができる。これは従来のパッケージでは、5~10といった数倍となる数値から見ても、飛躍的に性能向上しているのが分かる。

 これは、比較的にDisk I/Oが多く発生するバッチ処理のようなトランザクションの場合だが、キャッシュヒット率を高く保って運用されるOLTP処理の場合、Disk I/Oの比率が少なくなるので、パフォーマンスへの影響はより低く抑えることができることが分かっている。

 では、実際に表領域暗号化の設定だが、データが入っている既存のデータベースに表領域暗号化を使用する場合を仮定して説明する。手順としては以下となる。

  1.  Oracle Walletを作成し、マスターキーを格納
  2.  Oracle Walletをオープンする。(データベースの起動毎に1回)
  3.  CREATE TABLESPCE~で新規の暗号化表領域を作成
  4.  ALTER TABLE ~ MOVEで表を移動
  5.  既存の表領域を削除

1)Oracle Walletを作成し、マスターキーを格納
 sqlnet.oraにWalletを作成するロケーションを記述
 ENCRYPTION_WALLET_LOCATION = (SOURCE = (METHOD = FILE)
               (METHOD_DATA = (DIRECTORY = /home/home/wallet)))
 SQL*Plusから、SYSユーザーで以下のコマンドを実行してマスターキーを作成
 ※パスワードは任意
 SQL> ALTER SYSTEM SET ENCRYPTION KEY IDENTIFIED BY "password";

2)Oracle Walletをオープン
 ALTER SYSTEM SET ENCRYPTION WALLET OPEN IDENTIFIED BY "password";
 ※1)でマスターキー作成直後は不要。データベースが再起動した場合など、起動時には1回かならずオープンする

3)CREATE TABLESPCE~で新規の暗号化表領域を作成
 ENCRYPTION USINGで、暗号アルゴリズムを指定し(デフォルトはAES128)、ENCRYPTキーワードを追記する
 例)
 CREATE TABLESPACE SECURE_TBL
 DATAFILE '/u02/oradata/orcl/secure01.dbf' SIZE 100M
 ENCRYPTION USING 'AES256' DEFAULT STORAGE (ENCRYPT);

4)ALTER TABLE ~ MOVEで表を移動
 例)customers表を3)で作成した表領域に移動
 ALTER TABLE CUSTOMERS MOVE TABLESPACE SECURE_TBL;

5)既存の表領域を削除
 暗号化されていない既存の表領域を完全に削除する(shredコマンド等)

 手順としては以上となる。OTNに列と表領域暗号のチュートリアルがあるので参考にしてほしい。今回は、ディスクの空き容量があると仮定してALTER TABLE MOVEコマンドを使用したが、datapumpでデータを抜き出すという方法やSQL Loader等でデータを挿入する方法などいくつか考えられる。表領域暗号化は、既存の表領域を暗号化に変更することができないので、新規作成してデータロードする、そのロード時に暗号化されてデータが格納されるという流れになる。

 さて、ここまでは表領域暗号化の特徴や設定について紹介してきた。特に暗号化の性能への影響は表領域暗号化で大きく改善したといえる。しかし、さらにその影響を限りなくゼロにまで近づける衝撃的な機能が実装された。AES-NIである。次はこのAES-NIと表領域暗号化を組み合わせたゼロ・インパクトの暗号化を説明する。

次のページ
AES-NI (Advanced Encryption Standard New Instruction)

この記事は参考になりましたか?

  • Facebook
  • X
  • Pocket
  • note
oracletechアーカイブス!連載記事一覧

もっと読む

この記事の著者

oracletech.jp編集部(オラクルテックジェイピーヘンシュウブ)

oracletech.jpは、オラクル・データベースと関連製品をお使いいただいている皆様、開発に携わっているエンジニアの皆様、オラクル製品を販売いただいている皆様すべてにとって有益な情報源となることを目指しています。エンタープライズ系ITを中心に、製品情報や技術情報からテクノロジー・トレンド、キャンペーンやイベント/セミナー情報まで多岐にわたります。日本オラクルの社員だけでなく...

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

EnterpriseZine(エンタープライズジン)
https://enterprisezine.jp/article/detail/3538 2012/02/10 18:11

Job Board

AD

おすすめ

アクセスランキング

アクセスランキング

イベント

EnterpriseZine(エンタープライズジン)編集部では、情報システム担当、セキュリティ担当の方々向けに、EnterpriseZine Day、Security Online Day、DataTechという、3つのイベントを開催しております。それぞれ編集部独自の切り口で、業界トレンドや最新事例を網羅。最新の動向を知ることができる場として、好評を得ています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング