DBMS_OBFUSCATION_TOOLKIT
を使用すると、データ暗号化規格(DES)またはTriple-DESアルゴリズムを使用して、アプリケーション内でデータを暗号化できます。
注意: DBMS_OBFUSCATION_TOOLKIT の使用は推奨されていません。DBMS_CRYPTO はDBMS_OBFUSCATION_TOOLKIT に代わって使用される予定のパッケージであり、利便性と保守性が大幅に強化されているほか、新しいシステムと既存のシステムの両方に対応できるように広範なアルゴリズムがサポートされています。詳細は、第39章「DBMS_CRYPTO」を参照してください。 |
この章では、次の項目について説明します。
概要
セキュリティ・モデル
使用上の注意
データ暗号化規格(DES)は、米国規格協会(ANSI)ではデータ暗号化アルゴリズム(DEA)、国際標準化機構(ISO)ではDEA-1とも呼ばれ、20年以上にわたり世界的な暗号化規格の地位を保っています。銀行業界では、民間の金融機関同士のトランザクションや、金融機関と個人とのトランザクションにDESベースの規格も採用しています。DESは最終的に新しいAdvanced Encryption Standard(AES)に置き換えられることになります。
DESは対称鍵暗号で、すなわち、データの暗号化と復号化には同じ鍵が使用されます。DESでは、56ビットのキーを使用して、64ビットのブロックでデータの暗号化が行われます。DESアルゴリズムでは、入力される64ビットのキーのうち8ビットが無視されますが、アルゴリズムには64ビットのキーを入力する必要があります。
Triple-DES (3DES)はDESよりもさらに強力な暗号で、生成された暗号文(暗号化データ)は、総当たり探索(2**56の試行のかわりに2**112または2**168を試行)を使用しても、さらに解読されにくくなっています。Triple-DESは、DESほど、一部のタイプの暗号解読法に対して脆弱ではありません。
このパッケージはSYS
スキーマにインストールされます。必要に応じて、既存のユーザーおよびロールに、パッケージ・アクセス権限を付与できます。このパッケージではPUBLIC
ロールへのアクセス権も付与されるため、明示的な付与は不要です。
注意: MD5コールはOracle 11g リリース2 (11.2.0.4)では動作しません。 |
キー管理(暗号化キーの生成および同キーの安全な格納を含む)は、暗号化の重要な要素の1つです。キーの選択が適切でなかったり格納方法が誤っていると、悪意のあるユーザーによって暗号化が容易に破られます。暗号分析者は、総当たりキー探索(つまり、正しい復号化キーを見つけようとして、可能なすべてのキーを調べる)の攻撃を行うのではなく、通常はキーの選択やキーの格納方法の弱点を探します。
キー生成は暗号化の重要な要素です。通常、キーは乱数ジェネレータで自動的に生成されます。乱数生成が暗号面で安全であれば、キー生成の1つの形態として許容できます。ただし、乱数が暗号面で安全ではなく、しかも予測可能な要素があると、暗号化のセキュリティが容易に損なわれる可能性があります。
DBMS_OBFUSCATION_TOOLKIT
パッケージには暗号化キー用の乱数ジェネレータがありますが、暗号化キーを保守するメカニズムは用意されていません。アプリケーション開発者は、このパッケージで使用される暗号化キーの生成および格納が安全に行われるように注意する必要があります。また、DBMS_OBFUSCATION_TOOLKIT
による暗号化および復号化はクライアントではなくサーバーで行われます。したがって、クライアントとサーバー間で暗号化キーを渡すときは、ネットワーク暗号化機能を使用して、クライアントとサーバー間の接続を保護する必要があります。適切な保護対策を実施しないと、ネットワーク上で暗号化キーが不正傍受される可能性があります。Oracle Net用のネットワーク暗号化の構成および使用方法の詳細は、『Oracle Database Advanced Security管理者ガイド』を参照してください。
キー格納は暗号化の最も重要な要素の1つですが、同時に難しく、正しく管理することが困難な要素です。対称鍵で暗号化したデータをリカバリするには、その対称鍵が、データを復号化しようとしているアプリケーションまたはユーザーによってアクセス可能である必要があります。対称鍵は、パフォーマンスを大幅に劣化させずに、ユーザーが必要なときに暗号化データにアクセスできるように、取出しが簡単なものにする必要があります。また、暗号化データにアクセスしようとする未許可のユーザーによって容易にリカバリされないように、十分に安全である必要があります。
キーを管理するために、次の3つの方法を利用できます。
キーをデータベースに格納する
キーをオペレーティング・システムに格納する
ユーザーにキーを管理させる
DBAによる暗号化データへのアクセスからデータを保護しようとする場合、キーをデータベースに格納しても、必ずしも完全なセキュリティを保つことはできませんが(すべての権限を付与されたDBAは暗号化キーが含まれた表にアクセスできるためです)、一時的な傍受者やオペレーティング・システム上のデータベース・ファイルを危険にさらす人物に対してはセキュリティを実現できます。また、データベースにキーを格納して獲得するセキュリティは、完全でなくても非常に有効です。
たとえば、従業員の社会保障番号(表EMPの列の1つ)を暗号化するとします。その場合は、EMPの別の列に格納されているキーを使用して各従業員の社会保障番号を暗号化します。ただし、EMP表でSELECTアクセスを持つユーザーは、暗号化キーを取得し一致する社会保障番号を復号化できます。また、暗号化キーを別の表に格納し、パッケージを使用して、表どうしの主キーと外部キーの関係に基づき暗号化データ項目の正しいキーを取得する方法もあります。
DBMS_OBFUSCATION_TOOLKIT
パッケージと、そのパッケージに提供された暗号化キーを取り出すプロシージャの両方をエンベロープできます。また、暗号化キー自体をなんらかの方法(たとえば、EMP表の外部キーでXORするなど)で変換して、容易にリカバリできる形態では格納されないようにすることもできます。
PL/SQLのラップ・ユーティリティを使用して、暗号化を行うPL/SQLパッケージ内でコードを難読化することをお薦めします。キーの処理、暗号化ルーチンの呼出しなどを行うPL/SQLコードを参照することによって、暗号化が破られることを防止します。すなわちラップ・ユーティリティを使用して、PL/SQLパッケージ自体を難読化します。このスキームは、EMP
にSELECT
でアクセスするユーザーが、暗号化されていない重要データを読み取ること、DBAが暗号化キーを容易に取り出すこと、およびこれらを使用してEMP
表でデータを復号化することを防止するために十分に安全です。暗号化キーを定期的に変更することによって、またはさらに強度が高いキー格納アルゴリズムを使用することによって(たとえば、キー自体が暗号化されるようにするなど)、さらに安全性を高めることができます。
もう1つのオプションは、オペレーティング・システム上のフラット・ファイルにキーを格納することです。PL/SQLからはコールアウトが可能であるため、コールアウトを使用して暗号化キーを取り出すことができます。フラット・ファイルにキーを格納し、コールアウトを通じてキーを取り出す場合、暗号化データに対するセキュリティ・レベルは、オペレーティング・システム上のキー・ファイルに対する保護と同等のレベルにしかなりません。このため、オペレーティング・システムからキーを取り出すユーザーは、Oracle Databaseファイルに対するアクセス権限(暗号化データを復号化するために必要)を持っているか、暗号化データが格納されている表に正当なユーザーとしてアクセスする権限を取得する必要があります。
表96-1 DBMS_OBFUSCATIONパッケージのサブプログラム
サブプログラム | 説明 |
---|---|
|
入力データの復号化フォームを生成します。 |
|
入力データにTriple-DES暗号化アルゴリズムを適用して、入力データの暗号化フォームを生成します。 |
|
指定された乱数値を使用し、Triple-DESアルゴリズムに基づいて暗号化キーを生成します。 |
|
入力データの復号化フォームを生成します。 |
|
入力データの暗号化フォームを生成します。 |
|
指定された乱数値を使用して暗号化キーを生成します。 |
|
データのMD5ハッシュを生成します。 |
これらのサブプログラムは、入力データの復号化フォームを生成します。
このプロシージャで使用できる初期化ベクターについては、「DES3ENCRYPTプロシージャ/ファンクション」を参照してください。
構文
DBMS_OBFUSCATION_TOOLKIT.DES3DECRYPT( input IN RAW, key IN RAW, decrypted_data OUT RAW, which IN PLS_INTEGER DEFAULT TwoKeyMode iv IN RAW DEFAULT NULL); DBMS_OBFUSCATION_TOOLKIT.DES3DECRYPT( input_string IN VARCHAR2, key_string IN VARCHAR2, decrypted_string OUT VARCHAR2, which IN PLS_INTEGER DEFAULT TwoKeyMode iv_string IN VARCHAR2 DEFAUTL NULL); DBMS_OBFUSCATION_TOOLKIT.DES3DECRYPT( input IN RAW, key IN RAW, which IN PLS_INTEGER DEFAULT TwoKeyMode iv IN RAW DEFAULT NULL) RETURN RAW; DBMS_OBFUSCATION_TOOLKIT.DES3DECRYPT( input_string IN VARCHAR2, key_string IN VARCHAR2, which IN PLS_INTEGER DEFAULT TwoKeyMode iv_string IN VARCHAR2 DEFAULT NULL) RETURN VARCHAR2;
使用上の注意
DES3DECRYPT
プロシージャに渡された入力データまたはキーに値が含まれていない場合は、このプロシージャによってエラー「ORA-28231: 難読化ツールキットへの入力が無効です」
が発生します。
DES3DECRYPT
プロシージャに渡された入力データが8バイトの倍数でない場合は、このプロシージャによって、エラー「ORA-28232: 難読化ツールキットへの入力サイズが無効です」
が発生します。ORA-28233
は、DES3DECRYPT
ファンクションには適用できません。
キーの長さが指定されていないか、7バイト以下である場合は、プロシージャによってエラー「ORA-28234: キーの長さが短かすぎます。」
が発生します。8バイトより長いキーを使用した場合、余分なバイトは無視されます。したがって、9バイトのキーを指定しても例外は発生しません。
WHICH
パラメータに不正な値が指定されている場合は、「ORA-28236: Triple-DESモードが無効です。」
が生成されます。有効な値は、0(TwoKeyMode
)および1(ThreeKeyMode
)のみです。
これらのサブプログラムは、入力データにTriple-DES(3DES)暗号化アルゴリズムを適用して、入力データの暗号化フォームを生成します。
Oracleが実装する3DESでは、外部暗号ブロック連鎖(CBC)モードによる2キーまたは3キーの実装がサポートされます。
構文
DBMS_OBFUSCATION_TOOLKIT.DES3Encrypt( input IN RAW, key IN RAW, encrypted_data OUT RAW, which IN PLS_INTEGER DEFAULT TwoKeyMode iv IN RAW DEFAULT NULL); DBMS_OBFUSCATION_TOOLKIT.DES3Encrypt( input_string IN VARCHAR2, key_string IN VARCHAR2, encrypted_string OUT VARCHAR2, which IN PLS_INTEGER DEFAULT TwoKeyMode iv_string IN VARCHAR2 DEFAULT NULL); DBMS_OBFUSCATION_TOOLKIT.DES3Encrypt( input IN RAW, key IN RAW, which IN PLS_INTEGER DEFAULT TwoKeyMode iv IN RAW DEFAULT NULL) RETURN RAW; DBMS_OBFUSCATION_TOOLKIT.DES3Encrypt( input_string IN VARCHAR2, key_string IN VARCHAR2, which IN PLS_INTEGER DEFAULT TwoKeyMode iv_string IN VARCHAR2 DEFAULT NULL) RETURN VARCHAR2;
使用上の注意
2キーを実装したOracleの3DESインタフェースを使用する場合は、DES3ENCRYPT
プロシージャに対する引数に、128ビットの単一キーを指定する必要があります。3キーを実装した場合は、192ビットの単一キーを指定する必要があります。提供されたキーは、2つの64ビットのキーに分割されます。DESの場合と同様に、3DESアルゴリズムでは、各導出キーの8ビットが送信されます。ただし、2キーの3DESを実装した場合は単一の128ビットのキーを、3キーの3DESを実装した場合は単一の192ビットのキーを提供しないとエラーが発生します。DES3ENCRYPT
プロシージャでは、デフォルトで2キーの実装が使用されます。
DES3ENCRYPT
プロシージャには、初期化ベクター(IV)を指定するオプションもあります。初期化ベクター(IV)は、暗号化対象のデータの前に付加されるランダムなデータ・ブロックです。IVには意味はありません。各メッセージを一意にするために存在しています。入力データにIVを付加すると、暗号化されるデータ・ブロックの先頭に共通のヘッダー情報が追加されるのを防ぐため、データを復号化する情報が暗号解読者に提供される心配がありません。
PL/SQL DES3ENCRYPT
プロシージャに渡された入力データまたはキーに値が含まれていない場合は、このプロシージャによってエラー「ORA-28231: 難読化ツールキットへの入力が無効です」
が発生します。
DES3ENCRYPT
プロシージャに渡された入力データが8バイトの倍数でない場合は、このプロシージャによって、エラー「ORA-28232: 難読化ツールキットへの入力サイズが無効です」
が発生します。
DES3ENCRYPT
プロシージャを使用してデータの二重暗号化を試行する場合、このプロシージャによってエラー「ORA-28233: 二重暗号化はサポートされません。」
が発生します。
キーの長さが指定されていないか、7バイト以下である場合は、プロシージャによってエラー「ORA-28234: キーの長さが短かすぎます。」
が発生します。8バイトより長いキーを使用した場合、余分なバイトは無視されます。したがって、9バイトのキーを指定しても例外は発生しません。
which
パラメータに不正な値が指定されている場合は、「ORA-28236: Triple-DESモードが無効です。」
が生成されます。有効な値は、0(TwoKeyMode
)および1(ThreeKeyMode
)のみです。
制限事項
DES3ENCRYPT
プロシージャには、2つの制限事項があります。.1つは、暗号化用のDESキーの長さが128ビット(2キーDES)または192ビット(3キーDES)に固定されていることであり、これらのキーの長さは変更できません。
もう1つは、3DESを使用して複数のパスによる暗号化を実行できないことです。(注意: 3DESアルゴリズム内部では、データが複数回暗号化されます。ただし、DES3ENCRYPT
ファンクションを複数回コールし、3DESアルゴリズムを通じて同じデータを暗号化することはできません。)
注意: キーの長さの制限および複数パスによる暗号化の禁止は、暗号化製品の輸出を統括している米国の条項における要件です。 |
これらのサブプログラムは、指定された乱数値を使用して暗号化キーを生成します。Triple-DESでは、戻されるキーが適切な長さになるようにモードを指定します。
構文
DBMS_OBFUSCATION_TOOLKIT.DES3GetKey( which IN PLS_INTEGER DEFAULT TwoKeyMode, seed IN RAW, key OUT RAW); DBMS_OBFUSCATION_TOOLKIT.DES3GetKey( which IN PLS_INTEGER DEFAULT TwoKeyMode, seed_string IN VARCHAR2, key OUT VARCHAR2); DBMS_OBFUSCATION_TOOLKIT.DES3GetKey( which IN PLS_INTEGER DEFAULT TwoKeyMode, seed IN RAW) RETURN RAW; DBMS_OBFUSCATION_TOOLKIT.DES3GetKey( which IN PLS_INTEGER DEFAULT TwoKeyMode, seed_string IN VARCHAR2) RETURN VARCHAR2;
これらのサブプログラムは、入力データの復号化フォームを生成します。
構文
DBMS_OBFUSCATION_TOOLKIT.DESDecrypt( input IN RAW, key IN RAW, decrypted_data OUT RAW); DBMS_OBFUSCATION_TOOLKIT.DESDecrypt( input_string IN VARCHAR2, key_string IN VARCHAR2, decrypted_string OUT VARCHAR2); DBMS_OBFUSCATION_TOOLKIT.DESDecrypt( input IN RAW, key IN RAW) RETURN RAW; DBMS_OBFUSCATION_TOOLKIT.DESDecrypt( input_string IN VARCHAR2, key_string IN VARCHAR2) RETURN VARCHAR2;
使用上の注意
PL/SQL DESDECRYPT
ファンクションに渡された入力データまたはキーに値が含まれていない場合は、Oracleによって「ORAエラー28231: 難読化ツールキットへの入力が無効です」
が発生します。
DESDECRYPT
ファンクションに渡された入力データが8バイトの倍数でない場合は、Oracleによって「ORAエラー28232: 難読化ツールキットへの入力サイズが無効です」
が発生します。
キーの長さが指定されていないか、7バイト以下である場合は、プロシージャによってエラー「ORA-28234: キーの長さが短かすぎます。」
が発生します。8バイトより長いキーを使用した場合、余分なバイトは無視されます。したがって、9バイトのキーを指定しても例外は発生しません。
注意: ORA-28233 は、DESDECRYPT ファンクションには適用されません。 |
これらのサブプログラムは、入力データの暗号化フォームを生成します。
構文
DBMS_OBFUSCATION_TOOLKIT.DESEncrypt( input IN RAW, key IN RAW, encrypted_data OUT RAW); DBMS_OBFUSCATION_TOOLKIT.DESEncrypt( input_string IN VARCHAR2, key_string IN VARCHAR2, encrypted_string OUT VARCHAR2); DBMS_OBFUSCATION_TOOLKIT.DESEncrypt( input IN RAW, key IN RAW) RETURN RAW; DBMS_OBFUSCATION_TOOLKIT.DESEncrypt( input_string IN VARCHAR2, key_string IN VARCHAR2) RETURN VARCHAR2;
使用上の注意
DESアルゴリズムでは、56ビットのキーを使用して、64ビットのブロックでデータの暗号化が行われます。このアルゴリズムでは、提供されたキーの8ビットは破棄されます(このマニュアルでは、キー内のどの部分のビットが破棄されるのかは説明しません)。ただし、そのアルゴリズムを使用する場合は、64ビットのキーを入力しないと、エラーが発生します。
PL/SQL DESENCRYPTプロシージャに渡された入力データまたはキーに値が含まれていない場合は、エラー「ORA-28231: 難読化ツールキットへの入力が無効です」が発生します。
DESENCRYPT
プロシージャに渡された入力データが8バイトの倍数でない場合は、このプロシージャによって、エラー「ORA-28232: 難読化ツールキットへの入力サイズが無効です」
が発生します。
DESENCRYPT
プロシージャを使用してデータの二重暗号化を試行する場合、このプロシージャによってエラー「ORA-28233: 二重暗号化はサポートされません。」
が発生します。
キーの長さが指定されていないか、7バイト以下である場合は、プロシージャによってエラー「ORA-28234: キーの長さが短かすぎます。」
が発生します。8バイトより長いキーを使用した場合、余分なバイトは無視されます。したがって、9バイトのキーを指定しても例外は発生しません。
これらのサブプログラムは、指定された乱数値を使用して暗号化キーを生成します。
これらのサブプログラムは、データのMD5ハッシュを生成します。MD5アルゴリズムでは、入力データから128ビットの暗号メッセージ・ダイジェスト(MD5ハッシュ)を生成することによって、データの整合性を保証します。
構文
DBMS_OBFUSCATION_TOOLKIT.MD5( input IN RAW, checksum OUT raw_checksum); DBMS_OBFUSCATION_TOOLKIT.MD5( input_string IN VARCHAR2, checksum_string OUT varchar2_checksum); DBMS_OBFUSCATION_TOOLKIT.MD5( input IN RAW) RETURN raw_checksum; DBMS_OBFUSCATION_TOOLKIT.MD5( input_string IN VARCHAR2) RETURN varchar2_checksum;