DBMS_OBFUSCATION_TOOLKIT
を使用すると、データ暗号化規格(DES)またはTriple-DESアルゴリズムを使用して、アプリケーション内でデータを暗号化できます。
この章では、次の項目について説明します。
概要
セキュリティ・モデル
使用上の注意
データ暗号化規格(DES)は、米国規格協会(ANSI)ではデータ暗号化アルゴリズム(DEA)、国際標準化機構(ISO)ではDEA-1とも呼ばれ、20年以上にわたり世界的な暗号化規格の地位を保っています。銀行業界では、民間の金融機関同士のトランザクションや、金融機関と個人とのトランザクションにDESベースの規格も採用しています。DESは最終的に新しいAdvanced Encryption Standard(AES)に置き換えられることになります。
DESは対称鍵暗号です。つまり、データの暗号化と復合化で同じ鍵が使用されます。データの暗号化は64ビットのブロックで、56ビットのキーを使用して行われます。DESアルゴリズムでは、提供される64ビット・キーのうち8ビットは無視されます。ただし、ユーザーは64ビット・キーをDESアルゴリズムに渡す必要があります。
Triple-DES(3DES)はDESよりもさらに強力な暗号です。生成された暗号文(暗号化データ)は、総当たり探索(2**56の試行のかわりに2**112または2**168を試行)を使用しても、より解読されにくくなっています。また、一定のタイプの暗号分析に対してもDESほど弱くありません。
このパッケージはSYS
スキーマにインストールされます。必要に応じて、既存のユーザーおよびロールに、パッケージ・アクセス権限を付与できます。このパッケージではPUBLIC
ロールへのアクセス権も付与されるため、明示的な付与は不要です。
キー管理(暗号化キーの生成および同キーの安全な格納を含む)は、暗号化の重要な要素の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ファイルに対するアクセス権限(暗号化データを復号化するために必要)を持っているか、暗号化データが格納されている表に正当なユーザーとしてアクセスする権限を取得する必要があります。
ユーザーにキーを管理させる場合は、Oracle Advanced Securityなどのネットワーク暗号化を使用して、クライアントからサーバーにキーが簡単に渡されないようにすることが非常に重要です。ユーザーがキーを忘れると、データはリカバリ不能になります。
表82-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;
パラメータ
表82-2 DES3DECRYPTプロシージャのパラメータ(RAWデータ用)
パラメータ | 説明 |
---|---|
|
復号化するデータ。 |
|
復号化キー。 |
|
復号化されたデータ。 |
|
0(デフォルト)の場合はTwoKeyModeが使用されます。 1の場合はThreeKeyModeが使用されます。 |
|
初期化ベクター。 |
|
復号化する文字列。 |
|
復号化キー文字列。 |
|
復号化された文字列。 |
|
初期化ベクター。 |
使用上の注意
DES3DECRYPT
プロシージャに渡された入力データまたはキーに値が含まれていない場合は、エラー「ORA-28231: dbms_obfuscation_toolkitにデータが渡されていません。」が発生します。
DES3DECRYPT
プロシージャに渡された入力データが8バイトの倍数でない場合は、エラー「ORA-28232: dbms_obfuscation_toolkitのデータの長さが不正です。」が発生します。 ORA-28233
は、DES3DECRYPT
ファンクションには適用されません。
キーの長さが指定されていないか、7バイト以下である場合は、エラー「ORA-28234: キーの長さが短かすぎます。」が発生します。8バイトより長いキーを使用した場合、余分なバイトは無視されます。したがって、9バイトのキーを指定しても例外は発生しません。
which
パラメータに不適切な値を指定すると、「ORA-28236: Triple-DESモードが無効です。」が発生します。有効な値は、0(TwoKeyMode
)および1(ThreeKeyMode
)のみです。
制限事項
2キー実装の場合は128ビットの単一キー(使用されるのは112ビットのみ)、3キー実装の場合は192ビットの単一キー(使用されるのは168ビット)を指定する必要があります。指定したキーは自動的に56ビットの長さに切り捨てられ、復号化が実行されます。このキーの長さは固定されていて変更できません。
注意: キーの長さの制限および複数パスによる暗号化の禁止は、暗号化製品の輸出を統括している米国の条項における要件です。 |
これらのサブプログラムは、入力データに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;
パラメータ
表82-3 DES3ENCRYPTプロシージャ/ファンクションのパラメータ
パラメータ | 説明 |
---|---|
|
暗号化するデータ。 |
|
暗号化キー。 |
|
暗号化されたデータ。 |
|
0(デフォルト)の場合は |
iv |
初期化ベクター。 |
|
暗号化する文字列。 |
|
暗号化キー文字列。 |
|
暗号化された文字列。 |
iv_string |
初期化ベクター。 |
使用上の注意
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が付加されます。入力データにIVを付加すると、暗号化されるデータ・ブロックの先頭に共通のヘッダー情報が追加されるのを防ぐため、データを復号化する情報が暗号解読者に提供される心配がありません。
PL/SQL DES3ENCRYPT
プロシージャに渡された入力データまたはキーに値が含まれていない場合は、エラー「ORA-28231: dbms_obfuscation_toolkitにデータが渡されていません。」が発生します。
DES3ENCRYPT
プロシージャに渡された入力データが8バイトの倍数でない場合は、エラー「ORA-28232: dbms_obfuscation_toolkitのデータの長さが不正です。」が発生します。
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では、戻されるキーが適切な長さになるようにモード(2キーまたは3キー)を指定します。
構文
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;
パラメータ
表82-4 DES3GETKEYプロシージャ/ファンクションのパラメータ
パラメータ | 説明 |
---|---|
|
0(デフォルト)の場合は |
|
長さが80文字以上での値。 |
|
暗号化キー。 |
|
長さが80文字以上での値。 |
|
暗号化キー。 |
これらのサブプログラムは、入力データの復号化フォームを生成します。
構文
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;
パラメータ
表82-5 DESDECRYPTプロシージャ/ファンクションのパラメータ
パラメータ | 説明 |
---|---|
|
復号化するデータ。 |
|
復号化キー。 |
|
復号化されたデータ。 |
|
復号化する文字列。 |
|
復号化キー文字列。 |
|
復号化された文字列。 |
使用上の注意
PL/SQL DESDECRYPT
プロシージャに渡された入力データまたはキーに値が含まれていない場合は、エラー「ORA-28231: dbms_obfuscation_toolkitにデータが渡されていません。」が発生します。
DESDECRYPT
プロシージャに渡された入力データが8バイトの倍数でない場合は、エラー「ORA-28232: dbms_obfuscation_toolkitのデータの長さが不正です。」が発生します。
キーの長さが指定されていないか、7バイト以下である場合は、エラー「ORA-28234: キーの長さが短かすぎます。」が発生します。8バイトより長いキーを使用した場合、余分なバイトは無視されます。したがって、9バイトのキーを指定しても例外は発生しません。
注意: ORA-28233 は、DESDECRYPT ファンクションには適用されません。 |
制限事項
暗号化用のDESキーの長さは64ビット(この内56ビットが使用される)に固定されています。このキーの長さは変更できません。
注意: キーの長さの制限は、暗号化製品の輸出を統括している米国の条項における要件です。 |
これらのサブプログラムは、入力データの暗号化フォームを生成します。
構文
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;
パラメータ
表82-6 DESENCRYPTプロシージャ/ファンクションのパラメータ
パラメータ | 説明 |
---|---|
|
暗号化するデータ。 |
|
暗号化キー。 |
|
暗号化されたデータ。 |
|
暗号化する文字列。 |
|
暗号化キー文字列。 |
|
暗号化された文字列。 |
使用上の注意
DESアルゴリズムでは、56ビットのキーを使用して、64ビットのブロックでデータの暗号化が行われます。このアルゴリズムでは、提供されたキーの8ビットは破棄されます(このマニュアルでは、キー内のどの部分のビットが破棄されるのかは説明しません)。ただし、DESアルゴリズムを使用する場合は、64ビットのキーを入力しないと、エラーが発生します。
PL/SQL DESENCRYPTプロシージャに渡された入力データまたはキーに値が含まれていない場合は、エラー「ORA-28231: dbms_obfuscation_toolkitにデータが渡されていません。」が発生します。
DESENCRYPT
プロシージャに渡された入力データが8バイトの倍数でない場合は、エラー「ORA-28232: dbms_obfuscation_toolkitのデータの長さが不正です。」が発生します。
DESENCRYPT
プロシージャを使用してデータを二重暗号化しようとすると、エラー「ORA-28233: 二重暗号化はサポートされません。」が発生します。
キーの長さが指定されていないか、7バイト以下である場合は、エラー「ORA-28234: キーの長さが短かすぎます。」が発生します。8バイトより長いキーを使用した場合、余分なバイトは無視されます。したがって、9バイトのキーを指定しても例外は発生しません。
制限事項
DESENCRYPT
プロシージャには次の制限事項があります。
暗号化用のDESキーの長さは56ビットに固定されています。このキーの長さは変更できません。
複数のパスによる暗号化は実行できません。つまり、DESENCRYPTプロシージャを2回コールして、すでに暗号化されているデータを再度暗号化することはできません。
注意: キーの長さの制限および複数パスによる暗号化の禁止は、暗号化製品の輸出を統括している米国の条項における要件です。 |
これらのサブプログラムは、指定された乱数値を使用して暗号化キーを生成します。
構文
DBMS_OBFUSCATION_TOOLKIT.DESGetKey( seed IN RAW, key OUT RAW); DBMS_OBFUSCATION_TOOLKIT.DESGetKey( seed_string IN VARCHAR2, key OUT VARCHAR2); DBMS_OBFUSCATION_TOOLKIT.DESGetKey( seed IN RAW) RETURN RAW; DBMS_OBFUSCATION_TOOLKIT.DESGetKey( seed_string IN VARCHAR2) RETURN VARCHAR2;
パラメータ
表82-7 DESGETKEYプロシージャ/ファンクションのパラメータ
パラメータ | 説明 |
---|---|
|
長さが80文字以上での値。 |
|
暗号化キー。 |
|
長さが80文字以上での値。 |
|
暗号化キー。 |
これらのサブプログラムは、データの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;
パラメータ