PL/SQL による暗号化

PL/SQL には文字列の暗号化およびデータ(バイナリコード)を暗号化するためのパッケージが組み込まれている。

暗号化というと Oracle Advanced Security オプション(要 EE:エンタープライズ・エディションのさらにオプション機能)が有名なので、存在していても、もしかするとスタンダード・エディション(SE/SE One) で使ってはいけないものと思っている人が多いかもしれない。以下の暗号化ツールキットは SE 版でも使用可能である。

但し、Advanced Security と異なり AP サーバーなどの外部のサーバーから鍵を暗号化していないネットワークで送信しているとネットワークの経路からデータ+鍵が洩れる可能性がある。

DBMS_CRYPTO Oracle 10g

Oracle 10g からの DBMS_CRYPTO には 従来の DES、3DES に加え Advanced Encryption Standard(AES)、MD5、MD4、SHA-1 と追加オプションが用意されている。入力データ型として BLOB、CLOB もサポートされるようになった点も大きい。しかし、VARCHAR2 が直接サポートから外れた。DBMS_OBFUSCATION_TOOLKIT においては 2000 バイト超 32KB 以内(※) は VARCHAR2 を使用してデータベースに格納する必要があったが VARCHAR2 型にバイナリデータを格納して保存するのは TTC などにおいて問題が発生する。

(※) PL/SQL 上では RAW の最大長は 32KB であるが DB の場合 2000 バイト ⇒ PL/SQL データタイプ

DBMS_CRYPTO は PUBLIC ユーザーグループ に実行権限を与えていないため、個別に DBA から実行権限を付与する必要がある。

DBMS_OBFUSCATION_TOOLKIT (暗号化ツールキット 〜 Oracle 9i)

DBMS_OBFUSCATION_TOOLKIT は DES(Data Encryption Standard) および Triple-DES(3DES)を使用できる。 DES は 1977 年に作られたものでキーの短い暗号方式であるためコンテストではグリッド化したコンピュータや専用ハードウェアを使うと1日かからずに解かれてしまっているようです。(個人レベルで覗いてみようという行動に対しては効果的な対策であるといえる)

Triple-DES(3DES)は DES を 3つのキーで 3回 (デフォルトでは 2キー)
元のバイト列 ⇒ DES 暗号化(キー1)⇒ DES 復号化(キー2) ⇒ DES 暗号化(キー3) ⇒ 暗号化バイト列
の処理を行ったものであり、強度も問題ないとされているようであるが DES 自体にもパフォーマンス面に問題があるため、それを 3度繰り返す 3DES 処理は結構 CPU に負荷をかける。Oracle 10g 以後であれば DBMS_CRYPTO の AES (3DES の数倍高速で安全性も同程度以上:全体処理ではなく暗号化、復号化の CPU コスト)などを使用した方がよい。

DBMS_OBFUSCATION_TOOLKIT は PUBLIC ユーザーグループに実行権限が設定されているので特に作業は必要ない。

暗号化するプロシージャの不明瞭化

暗号化ツールキットを使用してデータを独自に再加工している ストアドプロシージャ のソースコードを閲覧可能な状態にしておくのは処理内容が漏れてしまうのであまり好ましくない。

PL/SQL のソースを難読化処理 をしておくとアルゴリズムをより強固に隠蔽化できるので場合によって使用すると良い。

但し、ソースコードを紛失すると元には戻せないのでセキュリティのしっかりした場所にバックアップしておくように注意する。

 


ライセンス

サイト統合にともない代替情報の URL は不明

日本オラクル
■ 日本オラクル 株式会社
■ オラクルマスター資格 (オラクルマスターとは
■ Oracle のライセンスがわからない…
Oracle Direct (ネットで聞いても最後はここで要確認)