ヘッダーをスキップ
Oracle® Database PL/SQLパッケージおよびタイプ・リファレンス
11g リリース2(11.2)
B56262-06
  目次へ移動
目次
索引へ移動
索引

前
 
次
 

39 DBMS_CRYPTO

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


関連項目:

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

この章では、次の項目について説明します。


DBMS_CRYPTOサブプログラムの使用方法


概要

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

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

このパッケージでは、次の暗号化アルゴリズムがサポートされます。

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

  • Advanced Encryption Standard(AES)

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

  • Message Authentication Code(MAC)として、MD5およびSHA-1

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

表39-1に、DBMS_CRYPTOパッケージの機能と、PL/SQLのもう1つの暗号化パッケージであるDBMS_OBFUSCATION_TOOLKITの機能の比較を示します。

表39-1 DBMS_CRYPTOとDBMS_OBFUSCATION_TOOLKITの機能の比較

パッケージの機能 DBMS_CRYPTO DBMS_OBFUSCATION_TOOLKIT

暗号化アルゴリズム

DES、3DES、AES、RC4、3DES_2KEY

DES、3DES

パディング方式

PKCS5、0(ゼロ)

サポートされない

ブロック暗号連鎖モード

CBC、CFB、ECB、OFB

CBC

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

MD5、SHA-1、MD4

MD5

キーを使用するハッシュ(MAC)アルゴリズム

HMAC_MD5、HMAC_SH1

サポートされない

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

RAWNUMBERBINARY_INTEGER

RAWVARCHAR2

データベース・タイプ

RAWCLOBBLOB

RAWVARCHAR2


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


セキュリティ・モデル

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


タイプ

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

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

タイプ 説明

BLOB

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

CLOB

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

PLS_INTEGER

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

RAW

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



アルゴリズム

このパッケージでは、次の暗号化アルゴリズム、修飾子、暗号スイートが事前に定義されています。

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

名前 説明

HASH_MD4

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

HASH_MD5

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

HASH_SH1

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


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

名前 説明

HMAC_MD5

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

HMAC_SH11

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


IETF RFC 2104規格に準拠。

表39-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

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


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

名前 説明

DES_CBC_PKCS5

ENCRYPT_DES1 + CHAIN_CBC2 + PAD_PKCS53

DES3_CBC_PKCS5

ENCRYPT_3DES 1 + CHAIN_CBC 2 + PAD_PKCS5 3


表39-5「DBMS_CRYPTO暗号化アルゴリズム」を参照してください。

表39-7「DBMS_CRYPTOブロック暗号連鎖の修飾子」を参照してください。

表39-8「DBMS_CRYPTOブロック暗号パディングの修飾子」を参照してください。

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

名前 説明

CHAIN_ECB

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

CHAIN_CBC

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

CHAIN_CFB

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

CHAIN_OFB

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


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

名前 説明

PAD_PKCS5

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

PAD_NONE

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

PAD_ZERO

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



制限事項

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


関連項目:

データ・タイプの変換の詳細は、「変換ルール」を参照してください。


例外

表39-9に、DBMS_CRYPTOで定義された例外を示します。

表39-9 DBMS_CRYPTOの例外

例外 コード 説明

CipherSuiteInvalid

28827

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

CipherSuiteNull

28829

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

KeyNull

28239

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

KeyBadSize

28234

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

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

DoubleEncryption

28233

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



使用上の注意

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

このパッケージでは、暗号化(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ファンクションを使用しなければ、ウィルスが新しいハッシュ値を計算して、表内の既存のハッシュ値を置き換えてしまう可能性があります。MACを使用している場合、秘密鍵を知らないユーザーは、ハッシュ値の読取りや書換えを実行できません。

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

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

DBMS_CRYPTOには独自にキーを作成する機能はありませんが、キーの作成時に使用できるツールが用意されています。たとえば、RANDOMBYTESファンクションを使用すると、キー用の乱数ジェネレータを生成できます。(RANDOMBYTESファンクションをコールすると、DBMS_OBFUSCATION_TOOLKITパッケージのDESGETKEYファンクションおよびDES3GETKEYファンクションをコールしたときのような処理が実行されます。)

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


関連項目:

  • ネットワーク暗号化およびSSLの構成方法の詳細は、『Oracle Database Advanced Security管理者ガイド』を参照してください。

  • 暗号化キーの安全な保存方法の詳細は、「キー管理」を参照してください。

  • 「RANDOMBYTESファンクション」


変換ルール

  • 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の使用方法の詳細は、第226章「UTL_I18N」を参照してください。

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


次に、暗号ブロック連鎖および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;
BEGIN
   DBMS_OUTPUT.PUT_LINE ( 'Original string: ' || input_string);
   key_bytes_raw := DBMS_CRYPTO.RANDOMBYTES (num_key_bytes);
   encrypted_raw := DBMS_CRYPTO.ENCRYPT
      (
         src => UTL_I18N.STRING_TO_RAW (input_string,  'AL32UTF8'),
         typ => encryption_type,
         key => key_bytes_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
      );
   output_string := UTL_I18N.RAW_TO_CHAR (decrypted_raw, 'AL32UTF8');
 
   DBMS_OUTPUT.PUT_LINE ('Decrypted string: ' || output_string);
END;

DBMS_CRYPTOサブプログラムの要約

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

サブプログラム 説明

DECRYPTファンクション


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

DECRYPTプロシージャ


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

ENCRYPTファンクション


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

ENCRYPTプロシージャ


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

HASHファンクション


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

MACファンクション


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

RANDOMBYTESファンクション


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

RANDOMINTEGERファンクション


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

RANDOMNUMBERファンクション


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



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);

パラメータ

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

パラメータ名 説明

src

復号化するRAWデータ。

typ

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

key

復号化に使用するキー。

iv

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


使用上の注意

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


    関連項目:

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

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


    関連項目:

    VARCHAR2RAWに変換する手順の詳細は、「変換ルール」を参照してください。


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);

パラメータ

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

パラメータ名 説明

dst

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

src

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

typ

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

key

復号化に使用するキー。

iv

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



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);

パラメータ

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

パラメータ名 説明

src

暗号化するRAWデータ。

typ

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

key

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

iv

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


使用上の注意

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

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

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

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

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


    関連項目:

    変換手順の詳細は、「変換ルール」を参照してください。

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


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);

パラメータ

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

パラメータ名 説明

dst

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

src

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

typ

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

key

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

iv

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


使用上の注意

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


HASHファンクション

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

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

HASHファンクションは、サポートされる暗号化ハッシュ・アルゴリズム(表39-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);

パラメータ

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

パラメータ名 説明

src

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

typ

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


使用上の注意

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


MACファンクション

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

MACファンクションはMACアルゴリズムをデータに適用し、キーを使用してメッセージを保護します。このパッケージで定義されているMACアルゴリズムのリストは、表39-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);

パラメータ

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

パラメータ名 説明

src

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

typ

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

key

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



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);

パラメータ

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

パラメータ名 説明

number_bytes

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


使用上の注意

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


RANDOMINTEGERファンクション

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

構文

DBMS_CRYPTO.RANDOMINTEGER
 RETURN BINARY_INTEGER;

プラグマ

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

RANDOMNUMBERファンクション

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

構文

DBMS_CRYPTO.RANDOMNUMBER
 RETURN NUMBER;

プラグマ

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