38 DBMS_CRYPTO

DBMS_CRYPTOは格納されたデータの暗号化と復号化のためのインタフェースを提供するパッケージであり、ネットワーク通信を実行するPL/SQLプログラムとともに使用できます。このパッケージでは、Advanced Encryption Standard (AES)暗号化アルゴリズムなど、業界標準の複数の暗号化/ハッシュ・アルゴリズムがサポートされます。AESは、米国標準技術局(National Institute of Standards and Technology: NIST)により、Data Encryption Standard (DES)にかわるアルゴリズムとして承認されています。

参照:

このパッケージの使用方法および一般的なデータ暗号化の詳細は、『Oracle Databaseセキュリティ・ガイド』を参照してください。

この章のトピックは、次のとおりです:

38.1 DBMS_CRYPTOの概要

DBMS_CRYPTOパッケージには、暗号化に関する基本的なファンクションとプロシージャが収録されています。このパッケージを正しく安全に使用するためには、セキュリティに関する一般的なレベルの知識と経験が必要です。

DBMS_CRYPTOパッケージでは、イメージやサウンドを含むRAWやラージ・オブジェクト(LOB)などのOracle汎用データ・タイプに対する暗号化および復号化が可能になります。特に、BLOBおよびCLOBをサポートします。さらに、様々なデータベース・キャラクタ・セット間でデータを暗号化するためのグローバリゼーション・サポートも提供します。

次の暗号化アルゴリズムがサポートされています。

  • データ暗号化規格(DES)、トリプルDES(3DES、2キーおよび3キー)

  • Advanced Encryption Standard(AES)

  • 暗号化ハッシュとして、MD5、MD4、SHA-1、SHA-2

  • Message Authentication Code(MAC)として、MD5、SHA-1、SHA-2

DBMS_CRYPTOではブロック暗号修飾子も提供されています。また、PKCS(公開鍵暗号規格)#5などの複数のパディング・オプション、暗号ブロック連鎖(CBC)などの4種類のブロック暗号連鎖モードを選択できます。

表38-1に、DBMS_CRYPTOパッケージの機能の概要を示します。

表38-1 DBMS_CRYPTOの機能

パッケージの機能 DBMS_CRYPTO

暗号化アルゴリズム

DES、3DES、AES、RC4、3DES_2KEY

パディング方式

PKCS5、0 (ゼロ)

ブロック暗号連鎖モード

CBC、CFB、ECB、OFB

暗号化ハッシュ・アルゴリズム

MD5、SHA-1、SHA-2(SHA-256、SHA-384、SHA-512)、MD4

鍵ハッシュ(MAC)・アルゴリズム

HMAC_MD5、HMAC_SH1、HMAC_SH256、HMAC_SH384、HMAC_SH512

暗号化擬似乱数ジェネレータ

RAWNUMBERBINARY_INTEGER

データベース・タイプ

RAWCLOBBLOB

DBMS_CRYPTODBMS_OBFUSCATION_TOOLKITに代わって使用されるパッケージであり、利便性が大幅に強化されているほか、新しいシステムと既存のシステムの両方に対応できるように広範なアルゴリズムがサポートされています。具体的には、3DES_2KEYおよびMD4が下位互換性を維持する目的で提供されています。これらのアルゴリズムでは、3DES、AES、MD5、SHA-1、SHA-2と同等のセキュリティが提供されないため、使用しないことをお薦めします。

38.2 DBMS_CRYPTOのセキュリティ・モデル

Oracle Databaseでは、このパッケージがSYSスキーマにインストールされます。必要に応じて、既存のユーザーおよびロールに、パッケージ・アクセス権限を付与できます。

38.3 DBMS_CRYPTOデータ・タイプ

DBMS_CRYPTOサブプログラムのパラメータには、次のデータ・タイプが使用されます。

表38-2 DBMS_CRYPTOデータ・タイプ

タイプ 説明

BLOB

ソースまたは宛先のバイナリLOB。

CLOB

ソースまたは宛先の文字LOB(NCLOBを除く)。

PLS_INTEGER

暗号化アルゴリズムのタイプを指定します(データ・タイプがBLOB、CLOB、RAWである場合に使用されます)。

RAW

ソースまたは宛先のRAWバッファ。

38.4 DBMS_CRYPTOのアルゴリズム

DBMS_CRYPTOパッケージには、事前定義された暗号化アルゴリズム、修飾子および暗号スイートが含まれています。

これらを、次の表に示します。

表38-3 DBMS_CRYPTO暗号化ハッシュ・アルゴリズム

名前 説明

HASH_MD4

128ビットのハッシュ(入力メッセージのメッセージ・ダイジェスト)を作成します。

HASH_MD5

MD4と同様に128ビットのハッシュを作成しますが、MD4よりも複雑です。

HASH_SH1

Secure Hash Algorithm(SHA-1)。160ビットのハッシュを作成します。

HASH_SH256

SHA-2。256ビットのハッシュを作成します。

HASH_SH384

SHA-2。384ビットのハッシュを作成します。

HASH_SH512

SHA-2。512ビットのハッシュを作成します。

表38-4 DBMS_CRYPTO MAC(Message Authentication Code)アルゴリズム

名前 説明

HMAC_MD51

MD5ハッシュ関数と同じですが、ハッシュ値を確認するときに秘密鍵が必要となります。

HMAC_SH1脚注 1

SHAハッシュ関数と同じですが、ハッシュ値を確認するときに秘密鍵が必要となります。

HMAC_SH256

SHA-2の256ビットのハッシュ関数と同じですが、ハッシュ値を確認するときに秘密鍵が必要となります。

HMAC_SH384

SHA-2の384ビットのハッシュ関数と同じですが、ハッシュ値を確認するときに秘密鍵が必要となります。

HMAC_SH512

SHA-2の512ビットのハッシュ関数と同じですが、ハッシュ値を確認するときに秘密鍵が必要となります。

脚注1

IETF RFC 2104標準に準拠します。

表38-5 DBMS_CRYPTO暗号化アルゴリズム

名前 説明

ENCRYPT_DES

データ暗号化規格。ブロック暗号。長さが56ビットのキーを使用します。

ENCRYPT_3DES_2KEY

データ暗号化規格。ブロック暗号。2つのキーを使用して1つのブロックを3回処理します。有効長が112ビットのキーを使用します。

ENCRYPT_3DES

データ暗号化規格。ブロック暗号。1つのブロックを3回処理します。

ENCRYPT_AES128

Advanced Encryption Standard。ブロック暗号。長さが128ビットのキーを使用します。

ENCRYPT_AES192

Advanced Encryption Standard。ブロック暗号。長さが192ビットのキーを使用します。

ENCRYPT_AES256

Advanced Encryption Standard。ブロック暗号。長さが256ビットのキーを使用します。

ENCRYPT_RC4

ストリーム暗号。個々のセッション単位でランダムに生成される秘密鍵を使用します。

表38-6 DBMS_CRYPTOブロック暗号スイート

名前 説明

DES_CBC_PKCS5

ENCRYPT_DES脚注2 + CHAIN_CBC脚注3 + PAD_PKCS5脚注4

DES3_CBC_PKCS5

ENCRYPT_3DES脚注2 + CHAIN_CBC脚注3 + PAD_PKCS5脚注4

脚注2

表38-5を参照してください。

脚注3

表38-7を参照してください。

脚注4

表38-8を参照してください。

表38-7 DBMS_CRYPTOブロック暗号連鎖の修飾子

名前 説明

CHAIN_ECB

Electronic Codebook。個々のプレーン・テキストブロックを別々に暗号化します。

CHAIN_CBC

暗号ブロック連鎖。直前の暗号文ブロックでプレーン・テキストをXOR演算してから暗号化します。

CHAIN_CFB

Cipher-Feedback。ブロック・サイズより小さいデータ単位を暗号化できるようにします。

CHAIN_OFB

Output-Feedback。ブロック暗号を同期ストリーム暗号として実行できるようにします。CFBと似ていますが、直前の出力ブロックのうちnビットがデータ・キューの右端の位置に移動されて、暗号化を待機する点が異なります。

表38-8 DBMS_CRYPTOブロック暗号パディングの修飾子

名前 説明

PAD_PKCS5

PKCS #5(パスワードに基づく暗号化規格)に準拠するパディングを提供します。

PAD_NONE

パディングを実行しないオプションを提供します。コール元はブロック・サイズが正しいことを確認する必要があり、ブロック・サイズが不適切であると、エラーが戻されます。

PAD_ZERO

0(ゼロ)からなるパディングを提供します。

38.5 DBMS_CRYPTOの制限事項

DBMS_CRYPTOパッケージでは、VARCHAR2データ・タイプは直接的にサポートされません。VARCHAR2タイプのデータに対して暗号化操作を実行する場合は、そのデータを事前に汎用的なデータベース・キャラクタ・セットであるAL32UTF8に変換した後、RAWデータ・タイプに変換する必要があります。これらの変換が完了すると、DBMS_CRYPTOパッケージによる暗号化操作が可能になります。

参照:

データ・タイプの変換ルールについては、「DBMS_CRYPTOの使用上の注意」を参照してください。

38.6 DBMS_CRYPTOの例外

次の表に、DBMS_CRYPTOで定義された例外を示します。

表38-9 DBMS_CRYPTOの例外

例外 コード 説明

CipherSuiteInvalid

28827

指定した暗号スイートが定義されていません。

CipherSuiteNull

28829

使用する暗号スイートが指定されていません。

KeyNull

28239

暗号化キーが指定されていないか、暗号化キーにNULL値が含まれています。

KeyBadSize

28234

DESキー: 指定されたキー長が短かすぎます。DESキーの長さは少なくとも8バイト(64ビット)にしてください。

AESキー: 指定されたキー長はサポートされていません。AESキーの長さは、128ビット、192ビット、256ビットのいずれかにしてください。

DoubleEncryption

28233

ソース・データは以前に暗号化されています。

38.7 DBMS_CRYPTOの使用上の注意

この項では、複数のDBMS_CRYPTOの使用上の注意について説明します。

  • 暗号化/復号化のプロシージャとファンクションの使い分け

  • HASHファンクションとMACファンクションの使い分け

  • 暗号化キーの作成と保守に関する注意事項

  • 変換ルール

暗号化/復号化のプロシージャとファンクションの使い分け

このパッケージでは、暗号化(ENCRYPT)と復号化(DECRYPT)の機能がプロシージャおよびファンクションの両方の形式で提供されています。これらのプロシージャは、LOBデータ・タイプ(CLOBタイプとBLOBタイプを対象としてオーバーロードされたデータ・タイプ)の暗号化と復号化に使用します。一方、ENCRYPTファンクションとDECRYPTファンクションは、RAWデータ・タイプの暗号化と復号化に使用します。VARCHAR2タイプのデータについては、DBMS_CRYPTOパッケージのファンクションを使用して暗号化操作を実行する前に、RAWデータ・タイプに変換する必要があります。

HASHファンクションとMACファンクションの使い分け

このパッケージには、HASHファンクションおよびMACファンクションという2種類の異なる一方向ハッシュ関数が用意されています。ハッシュ関数は任意の長さの入力メッセージを処理して、固定長のハッシュ値を戻します。一方向ハッシュ関数は片方向のみに動作します。入力メッセージからハッシュ値を計算するのは簡単ですが、特定のハッシュ値から入力メッセージを生成するのはきわめて困難です。ハッシュ値の安全性を維持するには、ハッシュ値の長さを少なくとも128ビットにする必要があります。

ハッシュ値を使用すると、データが変更されたかどうかを確認することができます。たとえば、ユーザーがデータを保存する前に、保存対象のデータに対してDBMS_CRYPTO.HASHを実行し、ハッシュ値を作成したと想定します。保存したデータを戻すときは、同じアルゴリズムを指定し、保存済データに対してハッシュ関数を再実行します。2回目のハッシュ値が最初のハッシュ値と同じであれば、データは変更されていません。ハッシュ値は「データの指紋」のようなものであり、データの整合性を保証するために使用されます。

DBMS_CRYPTOHASHファンクションは一方向ハッシュ関数であり、RAWまたはLOBデータのいずれかからハッシュ値を生成するために使用できます。MACファンクションも一方向ハッシュ関数ですが、秘密鍵の機能が追加されています。このファンクションはDBMS_CRYPTO.HASHファンクションと同様に機能しますが、秘密鍵を持つユーザーのみがハッシュ値を確認できます。

MACを使用すると、複数のユーザー間でファイルを認証できます。また、1人のユーザーがそれらを使用して、自分のファイルがウィルスなどによって変更されたかどうかを調べることもできます。自分のファイルのMACを計算して、そのMAC値を表に保存できます。MACファンクションを使用しなければ、ウィルスが新しいハッシュ値を計算して、表内の既存のハッシュ値を置き換えてしまう可能性があります。MACを使用している場合、秘密鍵を知らないユーザーは、ハッシュ値の読取りや書換えを実行できません。

暗号化キーの作成と保守に関する注意事項

DBMS_CRYPTOパッケージには暗号化キー用の乱数ジェネレータがありますが、暗号化キーを保守するメカニズムは用意されていません。アプリケーションを開発するときには、このパッケージで使用される暗号化キーを安全に作成して保存するように注意する必要があります。また、DBMS_CRYPTOパッケージによる暗号化操作と復号化操作はクライアント上ではなくサーバー上で実行されることに注意してください。したがって、クライアントとサーバー間で暗号化キーを転送するときは、ネットワーク暗号化機能を使用して、クライアントとサーバー間の接続を保護する必要があります。適切な保護対策を実施しないと、ネットワーク上で暗号化キーが不正傍受される可能性があります。

DBMS_CRYPTOには独自にキーを作成する機能はありませんが、キーの作成時に使用できるツールが用意されています。たとえば、RANDOMBYTESファンクションを使用すると、キー用の乱数ジェネレータを生成できます。

DES用の暗号化キーを作成するときには、特定のキー値が弱点キーまたは準弱点キーとみなされることに注意してください。アルゴリズムのパターンと暗号化キーの初期値のパターンを組み合せることで、暗号分析に対して脆弱な暗号文が生成される場合、その暗号化キーは弱点キーまたは準弱点キーとみなされます。脆弱な暗号文が生成されないようにするためには、弱点キーまたは準弱点キーであることが判明しているDESキーを事前に除外する必要があります。弱点キーまたは準弱点キーの一覧は、複数のパブリック・インターネット・サイトで参照できます。

参照:

変換ルール

  • VARCHAR2RAWに変換するには、UTL_I18N.STRING_TO_RAWファンクションを使用して次の手順を実行します。

    1. 現行のデータベース・キャラクタ・セット内のVARCHAR2をAL32UTF8データベース・キャラクタ・セット内のVARCHAR2に変換します。

    2. AL32UTF8データベース・キャラクタ・セット内のVARCHAR2RAWに変換します。

    次に構文の例を示します。

    UTL_I18N.STRING_TO_RAW (string, 'AL32UTF8');
    
  • RAWVARCHAR2に変換するには、UTL_I18N.RAW_TO_CHARファンクションを使用して次の手順を実行します。

    1. RAWをAL32UTF8データベース・キャラクタ・セット内のVARCHAR2に変換します。

    2. AL32UTF8データベース・キャラクタ・セット内のVARCHAR2を目的のデータベース・キャラクタ・セット内のVARCHAR2に変換します。

    次に構文の例を示します。

    UTL_I18N.RAW_TO_CHAR (data, 'AL32UTF8');

    参照:

    PL/SQLパッケージUTL_I18Nの使用方法の詳細は、「UTL_I18N」を参照してください。

  • RAWタイプの暗号化データをデータベース内のVARCHAR2タイプの列に保存する場合は、RAWTOHEXファンクションまたはUTL_ENCODE.BASE64_ENCODEファンクションを使用して、VARCHAR2タイプの列に適したサイズにデータを変換してください。これらのファンクションは、データのサイズをそれぞれ2倍または4/3倍に変更します。

38.8 DBMS_CRYPTOの例

次に、暗号ブロック連鎖およびPKCS#5準拠のパディングを使用した256ビットのAESアルゴリズムを使用して、事前定義済のinput_stringを暗号化および復号化するPL/SQLブロックを示します。

DECLARE
   input_string       VARCHAR2 (200) :=  'Secret Message';
   output_string      VARCHAR2 (200);
   encrypted_raw      RAW (2000);             -- stores encrypted binary text
   decrypted_raw      RAW (2000);             -- stores decrypted binary text
   num_key_bytes      NUMBER := 256/8;        -- key length 256 bits (32 bytes)
   key_bytes_raw      RAW (32);               -- stores 256-bit encryption key
   encryption_type    PLS_INTEGER :=          -- total encryption type

                            DBMS_CRYPTO.ENCRYPT_AES256
                          + DBMS_CRYPTO.CHAIN_CBC
                          + DBMS_CRYPTO.PAD_PKCS5;

   iv_raw             RAW (16);

BEGIN
   DBMS_OUTPUT.PUT_LINE ( 'Original string: ' || input_string);
   key_bytes_raw := DBMS_CRYPTO.RANDOMBYTES (num_key_bytes);
   iv_raw        := DBMS_CRYPTO.RANDOMBYTES (16);
   encrypted_raw := DBMS_CRYPTO.ENCRYPT
      (
         src => UTL_I18N.STRING_TO_RAW (input_string,  'AL32UTF8'),
         typ => encryption_type,
         key => key_bytes_raw,
         iv  => iv_raw
      );

    -- The encrypted value "encrypted_raw" can be used here

    decrypted_raw := DBMS_CRYPTO.DECRYPT
      (
         src => encrypted_raw,
         typ => encryption_type,
         key => key_bytes_raw,
         iv  => iv_raw
      );

   output_string := UTL_I18N.RAW_TO_CHAR (decrypted_raw, 'AL32UTF8');

   DBMS_OUTPUT.PUT_LINE ('Decrypted string: ' || output_string); 
END;

38.9 DBMS_CRYPTOサブプログラムの要約

この表は、DBMS_CRYPTOサブプログラムをアルファベット順に示し、簡単に説明しています。

表38-10 DBMS_CRYPTOパッケージのサブプログラム

サブプログラム 説明

DECRYPTファンクション

ユーザーが指定するキーとオプションのIV(初期化ベクター)に基づき、ストリーム暗号またはブロック暗号を使用してRAWデータを復号化します。

DECRYPTプロシージャ

ユーザーが指定するキーとオプションのIVに基づき、ストリーム暗号またはブロック暗号を使用してLOBデータを復号化します。

ENCRYPTファンクション

ユーザーが指定するキーとオプションのIVに基づき、ストリーム暗号またはブロック暗号を使用してRAWデータを暗号化します。

ENCRYPTプロシージャ

ユーザーが指定するキーとオプションのIVに基づき、ストリーム暗号またはブロック暗号を使用してLOBデータを暗号化します。

HASHファンクション

サポートされる暗号化ハッシュ・アルゴリズム(MD4、MD5、SHA-1、SHA-2)の1つをデータに適用します。

MACファンクション

Message Authentication Codeアルゴリズム(MD5、SHA-1、SHA-2)をデータに適用し、キーを使用してメッセージを保護します。

RANDOMBYTESファンクション

暗号的に安全な擬似乱数バイト列を含むRAWデータ値を戻します。暗号化キー用の乱数ジェネレータとして使用できます。

RANDOMINTEGERファンクション

BINARY_INTEGERデータ・タイプの乱数を戻します。

RANDOMNUMBERファンクション

NUMBERデータ・タイプの128ビット整数を戻します。

38.9.1 DECRYPTファンクション

このファンクションは、ユーザーが指定するキーとオプションのIV(初期化ベクター)に基づき、ストリーム暗号またはブロック暗号を使用してRAWデータを復号化します。

構文

DBMS_CRYPTO.DECRYPT(
   src IN RAW,
   typ IN PLS_INTEGER,
   key IN RAW,
   iv  IN RAW DEFAULT NULL)
 RETURN RAW;

プラグマ

pragma restrict_references(decrypt,WNDS,RNDS,WNPS,RNPS);

パラメータ

表38-11 DECRYPTファンクションのパラメータ

パラメータ名 説明

src

復号化するRAWデータ。

typ

使用する暗号の種類(ストリーム暗号またはブロック暗号)および修飾子。

key

復号化に使用するキー。

iv

ブロック暗号で使用するオプションの初期化ベクター。デフォルトはNULLです。

使用上の注意

  • 元のプレーン・テキストデータを復元するには、そのデータを暗号化したときと同じ暗号、修飾子、キー、IVを指定して、DECRYPTをコールする必要があります。

    参照:

    このパッケージで使用できる暗号と修飾子の詳細は、ENCRYPTファンクションの「使用上の注意」を参照してください。

  • VARCHAR2データをRAWに変換してから暗号化した場合は、UTL_I18Nパッケージを使用し、暗号化済のデータを適切なデータベース・キャラクタ・セットに再変換する必要があります。

    参照:

    VARCHAR2からRAWへの変換ルールの詳細は、「DBMS_CRYPTOの使用上の注意」を参照してください。

38.9.2 DECRYPTプロシージャ

これらのプロシージャは、ユーザーが指定するキーとオプションのIV(初期化ベクター)に基づき、ストリーム暗号またはブロック暗号を使用してLOBデータを復号化します。

構文

DBMS_CRYPTO.DECRYPT(
   dst IN OUT NOCOPY BLOB,
   src IN            BLOB,
   typ IN            PLS_INTEGER,
   key IN            RAW,
   iv  IN            RAW          DEFAULT NULL);

DBMS_CRYPT.DECRYPT(
   dst IN OUT NOCOPY CLOB         CHARACTER SET ANY_CS,
   src IN            BLOB,
   typ IN            PLS_INTEGER,
   key IN            RAW,
   iv  IN            RAW          DEFAULT NULL);

プラグマ

pragma restrict_references(decrypt,WNDS,RNDS,WNPS,RNPS);

パラメータ

表38-12 DECRYPTプロシージャのパラメータ

パラメータ名 説明

dst

出力データのLOBロケータ。出力のLOB <dst>の値は上書きされます。

src

入力データのLOBロケータ。

typ

使用する暗号の種類(ストリーム暗号またはブロック暗号)および修飾子。

key

復号化に使用するキー。

iv

ブロック暗号で使用するオプションの初期化ベクター。デフォルトはすべて0(ゼロ)です。

38.9.3 ENCRYPTファンクション

このファンクションは、ユーザーが指定するキーとオプションのIV(初期化ベクター)に基づき、ストリーム暗号またはブロック暗号を使用してRAWデータを暗号化します。

構文

DBMS_CRYPTO.ENCRYPT(
   src IN RAW,
   typ IN PLS_INTEGER,
   key IN RAW,
   iv  IN RAW          DEFAULT NULL)
 RETURN RAW;

プラグマ

pragma restrict_references(encrypt,WNDS,RNDS,WNPS,RNPS);

パラメータ

表38-13 ENCRYPTファンクションのパラメータ

パラメータ名 説明

src

暗号化するRAWデータ。

typ

使用する暗号の種類(ストリーム暗号またはブロック暗号)および修飾子。

key

データの暗号化に使用する暗号化キー。

iv

ブロック暗号で使用するオプションの初期化ベクター。デフォルトはNULLです。

使用上の注意

  • ブロック暗号は、連鎖モードまたはパディング種類に関する修飾子で修飾できます。連鎖モードとパディング種類に関する修飾子がブロック暗号に追加されて、暗号スイートは形成されます。最も一般的に使用される連鎖モードは暗号ブロック連鎖(CBC)であり、推奨のパディング種類はPKCS #5です。ブロック暗号連鎖およびブロック暗号パディングに関してこのパッケージで定義された修飾子定数の詳細は、表38-7および表38-8を参照してください。

  • 暗号化と復号化に使用する暗号スイートの内容がよくわかるように、パッケージ・レベルの独自の定数を定義できます。たとえば、DESと暗号ブロック連鎖モードを使用し、パディングを行わない暗号スイートを表すには、次のような定数を定義します。

    DES_CBC_NONE CONSTANT PLS_INTEGER := DBMS_CRYPTO.ENCRYPT_DES
                                         + DBMS_CRYPTO.CHAIN_CBC
                                         + DBMS_CRYPTO.PAD_NONE;
    

    このパッケージですでに定数として定義されているブロック暗号スイートは、表38-6を参照してください。

  • VARCHAR2データを暗号化する場合は、そのデータを最初にAL32UTF8キャラクタ・セットに変換する必要があります。

    参照:

    変換ルールについては、「DBMS_CRYPTOの使用上の注意」を参照してください。

  • 保存するデータを暗号化するときに、RC4などのストリーム暗号はお薦めしません。

38.9.4 ENCRYPTプロシージャ

これらのプロシージャは、ユーザーが指定するキーとオプションのIV(初期化ベクター)に基づき、ストリーム暗号またはブロック暗号を使用してLOBデータを暗号化します。

構文

DBMS_CRYPTO.ENCRYPT(
   dst IN OUT NOCOPY BLOB,
   src IN            BLOB,
   typ IN            PLS_INTEGER,
   key IN            RAW,
   iv  IN            RAW          DEFAULT NULL);

DBMS_CRYPTO.ENCRYPT(
   dst IN OUT NOCOPY BLOB,
   src IN            CLOB         CHARACTER SET ANY_CS,
   typ IN            PLS_INTEGER,
   key IN            RAW,
   iv  IN            RAW          DEFAULT NULL);

プラグマ

pragma restrict_references(encrypt,WNDS,RNDS,WNPS,RNPS);

パラメータ

表38-14 ENCRYPTプロシージャのパラメータ

パラメータ名 説明

dst

出力データのLOBロケータ。出力のLOB <dst>の値は上書きされます。

src

入力データのLOBロケータ。

typ

使用する暗号の種類(ストリーム暗号またはブロック暗号)および修飾子。

key

データの暗号化に使用する暗号化キー。

iv

ブロック暗号で使用するオプションの初期化ベクター。デフォルトはNULLです。

使用上の注意

ENCRYPTプロシージャの変換ルールの詳細は、「DBMS_DEBUGの使用上の注意」を参照してください。

38.9.5 HASHファンクション

一方向ハッシュ関数は、可変長の入力文字列(データ)をハッシュ値と呼ばれる固定長の(通常は入力文字列より小さい)出力文字列に変換します。ハッシュ値は、入力データの一意の識別子(指紋のようなもの)として使用できます。ハッシュ値を使用すると、データが変更されたかどうかを確認することができます。

一方向ハッシュ関数は、片方向のみに動作するハッシュ関数です。入力メッセージからハッシュ値を計算するのは簡単ですが、特定のハッシュ値からデータを生成するのは困難です。したがって、一方向ハッシュ関数はデータの整合性を保証するのに役立ちます。一方向ハッシュ関数の使用方法の詳細は、「DBMS_CRYPTOの使用上の注意」の「HASHファンクションとMACファンクションの使い分け」を参照してください。

HASHファンクションは、サポートされる暗号化ハッシュ・アルゴリズム(表38-3を参照)の1つをデータに適用します。

構文

DBMS_CRYPTO.Hash (
   src IN RAW,
   typ IN PLS_INTEGER)
 RETURN RAW;

DBMS_CRYPTO.Hash (
   src IN BLOB,
   typ IN PLS_INTEGER)
 RETURN RAW;

DBMS_CRYPTO.Hash (
   src IN CLOB CHARACTER SET ANY_CS,
   typ IN PLS_INTEGER)
 RETURN RAW;

プラグマ

pragma restrict_references(hash,WNDS,RNDS,WNPS,RNPS);

パラメータ

表38-15 HASHファンクションのパラメータ

パラメータ名 説明

src

ハッシュ値が計算されるソース・データ

typ

ソース・データに適用するハッシュ・アルゴリズム

使用上の注意

Secure Hash Algorithmアルゴリズムは、MD4やMD5よりも不当攻撃に対する抵抗力があるため、SHA-1(Secure Hash Algorithm)またはSHA-2を使用することをお薦めします。メッセージ・ダイジェスト・アルゴリズムを使用する必要がある場合、MD4よりもMD5のほうが強力なセキュリティ機能を提供します。

38.9.6 MACファンクション

このファンクションはMessage Authentication Code (MAC)アルゴリズムをデータに適用し、キーを使用してメッセージを保護します。

MACは、鍵依存の一方向ハッシュ関数です。MACファンクションはHASHファンクションで説明した一方向ハッシュ関数と同様の機能を持っていますが、秘密鍵の機能が追加されています。同じ秘密鍵を持つユーザーのみがハッシュ値を照合できます。MACファンクションの使用方法の詳細は、「DBMS_CRYPTOの使用上の注意」の「HASHファンクションとMACファンクションの使い分け」を参照してください。

このパッケージで定義されているMACアルゴリズムのリストは、表38-4を参照してください。

構文

DBMS_CRYPTO.MAC (
   src IN RAW,
   typ IN PLS_INTEGER,
   key IN RAW)
 RETURN RAW;

DBMS_CRYPTO.MAC (
   src IN BLOB,
   typ IN PLS_INTEGER
   key IN RAW)
 RETURN RAW;

DBMS_CRYPTO.MAC (
   src IN CLOB CHARACTER SET ANY_CS,
   typ IN PLS_INTEGER
   key IN RAW)
 RETURN RAW;

プラグマ

pragma restrict_references(mac,WNDS,RNDS,WNPS,RNPS);

パラメータ

表38-16 MACファンクションのパラメータ

パラメータ名 説明

src

MACアルゴリズムが適用されるソース・データ

typ

ソース・データに適用するMACアルゴリズム

key

MACアルゴリズムで使用するキー

38.9.7 RANDOMBYTESファンクション

このファンクションは、暗号的に安全な擬似乱数バイト列を含むRAW値を戻しますが、これは、暗号化キー用の乱数ジェネレータとして使用できます。

RANDOMBYTESファンクションは、RSA X9.31 PRNG (Pseudo-Random Number Generator)に基づいています。

構文

DBMS_CRYPTO.RANDOMBYTES (
   number_bytes IN POSITIVE)
 RETURN RAW;

プラグマ

pragma restrict_references(randombytes,WNDS,RNDS,WNPS,RNPS);

パラメータ

表38-17 RANDOMBYTESファンクションのパラメータ

パラメータ名 説明

number_bytes

生成する擬似乱数バイトのバイト数

使用上の注意

number_bytesの値がRAW変数の最大長を超えないように注意してください。

38.9.8 RANDOMINTEGERファンクション

このファンクションは、OracleのBINARY_INTEGERデータ・タイプで表現可能な範囲の整数を戻します。

構文

DBMS_CRYPTO.RANDOMINTEGER
 RETURN BINARY_INTEGER;

プラグマ

pragma restrict_references(randominteger,WNDS,RNDS,WNPS,RNPS);

38.9.9 RANDOMNUMBERファンクション

このファンクションは、OracleのNUMBERデータ・タイプで表現可能な範囲([0..2**128-1])の整数乱数を戻します。

構文

DBMS_CRYPTO.RANDOMNUMBER
 RETURN NUMBER;

プラグマ

pragma restrict_references(randomnumber,WNDS,RNDS,WNPS,RNPS);