50 DBMS_CRYPTO
DBMS_CRYPTO
は格納されたデータの暗号化と復号化のためのインタフェースを提供するパッケージであり、ネットワーク通信を実行するPL/SQLプログラムとともに使用できます。このパッケージでは、Advanced Encryption Standard (AES)暗号化アルゴリズムなど、業界標準の複数の暗号化/ハッシュ・アルゴリズムがサポートされます。AESは、米国標準技術局(National Institute of Standards and Technology: NIST)により、Data Encryption Standard (DES)にかわるアルゴリズムとして承認されています。
ノート:
- Oracle Database 23cリリース以降、
MD4
アルゴリズムの使用はサポート対象外になりました。 - Oracle Database 21cリリース以降、
MD5
およびMD4
アルゴリズムの使用は非推奨になりました。 - Oracle Database 21cリリース以降、
SQLNET
およびDBMS_CRYPTO
に対するSHA-1
アルゴリズムの使用は非推奨になりました。
新しいアプリケーションでは、非推奨の値は使用しないことをお薦めします。推奨されない機能は、下位互換性を維持する目的のみでサポートされています。
この章のトピックは、次のとおりです:
参照:
-
このパッケージの使用方法および一般的なデータ暗号化の詳細は、Oracle Databaseセキュリティ・ガイドを参照してください。
50.1 DBMS_CRYPTOの概要
DBMS_CRYPTO
パッケージには、暗号化に関する基本的なファンクションとプロシージャが収録されています。このパッケージを正しく安全に使用するためには、セキュリティに関する一般的なレベルの知識と経験が必要です。
DBMS_CRYPTO
パッケージでは、イメージやサウンドを含むRAW
やラージ・オブジェクト(LOB
)などのOracle汎用データ・タイプに対する暗号化および復号化が可能になります。特に、BLOB
およびCLOB
をサポートします。さらに、様々なデータベース文字セット間でデータを暗号化するためのグローバリゼーション・サポートも提供します。また、非対称キー・ファンクションもサポートしています。
次の暗号化アルゴリズムがサポートされています。
-
データ暗号化規格(DES)、トリプルDES (3DES、2キーおよび3キー) (非推奨)
-
Advanced Encryption Standard(AES)
-
MD5 (非推奨)、SHA-1 (非推奨)、SHA-2暗号化ハッシュ
-
Message Authentication Code(MAC)として、MD5、SHA-1、SHA-2
DBMS_CRYPTO
ではブロック暗号修飾子も提供されています。また、PKCS(公開キー暗号規格)#5などの複数のパディング・オプション、暗号ブロック連鎖(CBC)などの6種類のブロック暗号連鎖モードを選択できます。
表50-1に、DBMS_CRYPTO
パッケージの機能の概要を示します。
表50-1 DBMS_CRYPTOの機能
パッケージの機能 | DBMS_CRYPTO |
---|---|
暗号化アルゴリズム |
DES、3DES、AES、3DES_2KEY |
|
|
パディング方式 |
PAD_PKCS5 (PKCS5パディング)、PAD_ZERO (ゼロ・パディング) PAD_NONE (パディングなし)、PAD_ORCL (oracleパディング) |
ブロック暗号連鎖モード |
CBC、CFB、ECB、OFB、GCM、CCM |
暗号化ハッシュ・アルゴリズム |
MD5、SHA-1、SHA-2 (SHA-256、SHA-384、SHA-512) (MD5とSHA-1は非推奨; MD4はサポート対象外) |
キー・ハッシュ(MAC)・アルゴリズム |
HMAC_MD5、HMAC_SH1、HMAC_SH256、HMAC_SH384、HMAC_SH512 |
暗号化擬似乱数ジェネレータ |
|
データベース・タイプ |
|
DBMS_CRYPTO
はDBMS_OBFUSCATION_TOOLKIT
に代わって使用されるパッケージであり、利便性が大幅に強化されているほか、新しいシステムと既存のシステムの両方に対応できるように広範なアルゴリズムがサポートされています。具体的には、3DES_2KEY
が下位互換性を維持する目的で提供されています。これらのアルゴリズムでは、3DES、AES、MD5、SHA-1、SHA-2と同等のセキュリティが提供されないため、使用しないことをお薦めします。
50.2 DBMS_CRYPTOのセキュリティ・モデル
Oracle Databaseでは、このパッケージがSYS
スキーマにインストールされます。必要に応じて、既存のユーザーおよびロールに、パッケージ・アクセス権限を付与できます。
50.3 DBMS_CRYPTOの定数
DBMS_CRYPTO
パッケージでは、このトピックで説明する定数が使用されます。
表50-2 DBMS_CRYPTOの定数
名前 | タイプ | 値 | 説明 |
---|---|---|---|
|
|
|
|
|
|
|
|
|
|
|
サポート対象外の たとえば: plaintext := DBMS_CRYPTO.decrypt (src => ciphertext_from_legacy_DES3Encrypt ,typ => DBMS_CRYPTO.DES3_CBC_NONE ,key => key_information ,iv => hextoraw(dbms_crypto.LEGACY_DEFAULT_IV) ); |
DES3_CBC_NONE |
PLS_INTEGER |
ENCRYPT_3DES + CHAIN_CBC + PAD_NONE |
サポート対象外の たとえば: plaintext := DBMS_CRYPTO.decrypt (src => ciphertext_from_legacy_DES3Encrypt ,typ => DBMS_CRYPTO.DES3_CBC_NONE ,key => key_information ,iv => hextoraw(DBMS_CRYPTO.LEGACY_DEFAULT_IV) ); |
50.4 DBMS_CRYPTOのデータ・タイプ
DBMS_CRYPTO
サブプログラムのパラメータには、次のデータ・タイプが使用されます。
表50-3 DBMS_CRYPTOのデータ・タイプ
タイプ | 説明 |
---|---|
|
ソースまたは宛先のバイナリLOB。 |
|
ソースまたは宛先の文字LOB(NCLOBを除く)。 |
|
暗号化アルゴリズムのタイプを指定します(データ・タイプがBLOB、CLOB、RAWである場合に使用されます)。 |
|
ソースまたは宛先のRAWバッファ。 |
50.5 DBMS_CRYPTOのアルゴリズム
DBMS_CRYPTOパッケージには、事前定義された暗号化アルゴリズム、修飾子および暗号スイートが含まれています。
これらを、次の表に示します。
表50-4 DBMS_CRYPTO暗号化ハッシュ・アルゴリズム
名前 | 説明 |
---|---|
HASH_MD5 |
128ビット・ハッシュを生成しますが、MD4 (サポート対象外)よりも複雑です。MD5は非推奨なので注意してください。 |
|
Secure Hash Algorithm (SHA-1) (非推奨)。160ビットのハッシュを作成します。 |
|
SHA-2。256ビットのハッシュを作成します。 |
|
SHA-2。384ビットのハッシュを作成します。 |
|
SHA-2。512ビットのハッシュを作成します。 |
表50-5 DBMS_CRYPTO MAC (Message Authentication Code)アルゴリズム
名前 | 説明 |
---|---|
HMAC_MD5 (非推奨)
|
MD5 (非推奨)ハッシュ関数と同じですが、ハッシュ値を確認するときに秘密キーが必要となります。 |
|
SHAハッシュ関数と同じですが、ハッシュ値を確認するときに秘密キーが必要となります。 IETF RFC 2104標準に準拠します。 |
|
SHA-2の256ビットのハッシュ関数と同じですが、ハッシュ値を確認するときに秘密キーが必要となります。 |
|
SHA-2の384ビットのハッシュ関数と同じですが、ハッシュ値を確認するときに秘密キーが必要となります。 |
|
SHA-2の512ビットのハッシュ関数と同じですが、ハッシュ値を確認するときに秘密キーが必要となります。 |
表50-6 DBMS_CRYPTO暗号化アルゴリズム
名前 | 説明 |
---|---|
|
データ暗号化規格。ブロック暗号。長さが56ビットのキーを使用します。 |
|
データ暗号化規格。ブロック暗号。2つのキーを使用して1つのブロックを3回処理します。有効長が112ビットのキーを使用します。 |
|
データ暗号化規格。ブロック暗号。1つのブロックを3回処理します。 |
|
Advanced Encryption Standard。ブロック暗号。長さが128ビットのキーを使用します。 |
|
Advanced Encryption Standard。ブロック暗号。長さが192ビットのキーを使用します。 |
|
Advanced Encryption Standard。ブロック暗号。長さが256ビットのキーを使用します。 |
|
公開キー暗号化アルゴリズム。復号化にのみ許可されます。 |
|
公開キー暗号化アルゴリズム |
表50-7 DBMS_CRYPTOブロック暗号スイート
名前 | 説明 |
---|---|
|
ENCRYPT_AES + CHAIN_CBC + PAD_PKCS5 |
|
ENCRYPT_AES + CHAIN_GCM + PAD_NONE |
|
ENCRYPT_AES + CHAIN_CCM + PAD_NONE |
|
|
|
脚注1
表50-6を参照してください
脚注2
表50-8を参照してください
脚注3
表50-9を参照してください
表50-8 DBMS_CRYPTOブロック暗号連鎖の修飾子
名前 | 説明 |
---|---|
|
暗号ブロック連鎖。直前の暗号文ブロックでプレーン・テキストをXOR演算してから暗号化します。 |
|
Counter with CBC-MAC (CCM)モード。汎用の認証付き暗号化ブロック暗号モードです。AES ( |
|
Cipher-Feedback。ブロック・サイズより小さいデータ単位を暗号化できるようにします。 |
|
Electronic Codebook。個々のプレーン・テキストブロックを別々に暗号化します。 |
|
Galois/Counter Mode。汎用の認証付き暗号化ブロック暗号モードです。AES ( |
|
Output-Feedback。ブロック暗号を同期ストリーム暗号として実行できるようにします。CFBと似ていますが、直前の出力ブロックのうちnビットがデータ・キューの右端の位置に移動されて、暗号化を待機する点が異なります。 |
表50-9 DBMS_CRYPTOブロック暗号パディングの修飾子
名前 | 説明 |
---|---|
|
パディングを実行しないオプションを提供します。コール元はブロック・サイズが正しいことを確認する必要があり、ブロック・サイズが不適切であると、エラーが戻されます。 |
|
暗号ベクトルの末尾にパッド長が格納されている単一バイトを追加するパディングを指定します。 |
|
0(ゼロ)からなるパディングを提供します。 |
50.6 DBMS_CRYPTOの制限事項
DBMS_CRYPTO
パッケージでは、VARCHAR2
データ・タイプは直接的にサポートされません。VARCHAR2
タイプのデータに対して暗号化操作を実行する場合は、そのデータを事前に汎用的なデータベース文字セットであるAL32UTF8に変換した後、RAW
データ・タイプに変換する必要があります。これらの変換が完了すると、DBMS_CRYPTO
パッケージによる暗号化操作が可能になります。
参照:
データ・タイプの変換ルールについては、「DBMS_CRYPTOの操作上のノート」を参照してください。
VARCHAR2
の暗号化を可能にするUTL_I18N.STRING_TO_RAW
コールの使用例は、「DBMS_CRYPTOの例」を参照してください。
50.7 DBMS_CRYPTOの例外
次の表に、DBMS_CRYPTO
で定義された例外を示します。
表50-10 DBMS_CRYPTOの例外
例外 | コード | 説明 |
---|---|---|
|
|
指定した暗号スイートが定義されていません。 |
|
|
使用する暗号スイートが指定されていません。 |
|
|
暗号化キーが指定されていないか、暗号化キーに |
|
|
DESキー: 指定されたキー長が短かすぎます。DESキーの長さは少なくとも8バイト(64ビット)にしてください。 AESキー: 指定されたキー長はサポートされていません。AESキーの長さは、128ビット、192ビット、256ビットのいずれかにしてください。 |
|
|
ソース・データは以前に暗号化されています。 |
50.8 DBMS_CRYPTOの操作上のノート
この項では、複数のDBMS_CRYPTOの操作上のノートについて説明します。
-
暗号化/復号化のプロシージャとファンクションの使い分け
-
HASHファンクションとMACファンクションの使い分け
-
暗号化キーの作成と保守に関する注意事項
-
変換ルール
暗号化/復号化のプロシージャとファンクションの使い分け
このパッケージでは、暗号化(ENCRYPT
)と復号化(DECRYPT
)の機能がプロシージャおよびファンクションの両方の形式で提供されています。これらのプロシージャは、LOB
データ・タイプ(CLOB
タイプとBLOB
タイプを対象としてオーバーロードされたデータ・タイプ)の暗号化と復号化に使用します。一方、ENCRYPT
ファンクションとDECRYPT
ファンクションは、RAW
データ・タイプの暗号化と復号化に使用します。VARCHAR2
タイプのデータについては、DBMS_CRYPTO
パッケージのファンクションを使用して暗号化操作を実行する前に、RAW
データ・タイプに変換する必要があります。
HASHファンクションとMACファンクションの使い分け
このパッケージには、HASH
ファンクションおよびMAC
ファンクションという2種類の異なる一方向ハッシュ関数が用意されています。ハッシュ関数は任意の長さの入力メッセージを処理して、固定長のハッシュ値を戻します。一方向ハッシュ関数は片方向のみに動作します。入力メッセージからハッシュ値を計算するのは簡単ですが、特定のハッシュ値から入力メッセージを生成するのはきわめて困難です。ハッシュ値の安全性を維持するには、ハッシュ値の長さを少なくとも256ビットにする必要があります。
ハッシュ値を使用すると、データが変更されたかどうかを確認することができます。たとえば、ユーザーがデータを保存する前に、保存対象のデータに対してDBMS_CRYPTO.HASH
を実行し、ハッシュ値を作成したと想定します。保存したデータを戻すときは、同じアルゴリズムを指定し、保存済データに対してハッシュ関数を再実行します。2回目のハッシュ値が最初のハッシュ値と同じであれば、データは変更されていません。ハッシュ値は「データの指紋」のようなものであり、データの整合性を保証するために使用されます。
DBMS_CRYPTO
のHASH
ファンクションは一方向ハッシュ関数であり、RAW
またはLOB
データのいずれかからハッシュ値を生成するために使用できます。MAC
ファンクションも一方向ハッシュ関数ですが、秘密キーの機能が追加されています。このファンクションはDBMS_CRYPTO.HASH
ファンクションと同様に機能しますが、秘密キーを持つユーザーのみがハッシュ値を確認できます。
MACを使用すると、複数のユーザー間でファイルを認証できます。また、1人のユーザーがそれらを使用して、自分のファイルがウィルスなどによって変更されたかどうかを調べることもできます。自分のファイルのMACを計算して、そのMAC値を表に保存できます。MACファンクションを使用しなければ、ウィルスが新しいハッシュ値を計算して、表内の既存のハッシュ値を置き換えてしまう可能性があります。MACを使用している場合、秘密キーを知らないユーザーは、ハッシュ値の読取りや書換えを実行できません。
暗号化キーの作成と保守に関する注意事項
DBMS_CRYPTO
パッケージには暗号化キー用の乱数ジェネレータがありますが、暗号化キーを保守するメカニズムは用意されていません。アプリケーションを開発するときには、このパッケージで使用される暗号化キーを安全に作成して保存するように注意する必要があります。また、DBMS_CRYPTO
パッケージによる暗号化操作と復号化操作はクライアント上ではなくサーバー上で実行されることに注意してください。したがって、クライアントとサーバー間で暗号化キーを転送するときは、ネットワーク暗号化機能を使用して、クライアントとサーバー間の接続を保護する必要があります。適切な保護対策を実施しないと、ネットワーク上で暗号化キーが不正傍受される可能性があります。
DBMS_CRYPTO
には独自にキーを作成する機能はありませんが、キーの作成時に使用できるツールが用意されています。たとえば、RANDOMBYTES
ファンクションを使用すると、キー用の乱数ジェネレータを生成できます。
DES用の暗号化キーを作成するときには、特定のキー値が弱点キーまたは準弱点キーとみなされることに注意してください。アルゴリズムのパターンと暗号化キーの初期値のパターンを組み合せることで、暗号分析に対して脆弱な暗号文が生成される場合、その暗号化キーは弱点キーまたは準弱点キーとみなされます。脆弱な暗号文が生成されないようにするためには、弱点キーまたは準弱点キーであることが判明しているDESキーを事前に除外する必要があります。弱点キーまたは準弱点キーの一覧は、複数のパブリック・インターネット・サイトで参照できます。
参照:
-
ネットワーク暗号化およびSSLの構成方法の詳細は、『Oracle Databaseセキュリティ・ガイド』を参照してください。
変換ルール
-
VARCHAR2
をRAW
に変換するには、UTL_I18N.STRING_TO_RAW
ファンクションを使用して次のステップを実行します。-
現行のデータベース文字セット内の
VARCHAR2
をAL32UTF8データベース文字セット内のVARCHAR2
に変換します。 -
AL32UTF8データベース文字セット内の
VARCHAR2
をRAW
に変換します。
次に構文の例を示します。
UTL_I18N.STRING_TO_RAW (string, 'AL32UTF8');
-
-
RAW
をVARCHAR2
に変換するには、UTL_I18N.RAW_TO_CHAR
ファンクションを使用して次のステップを実行します。-
RAW
をAL32UTF8データベース文字セット内のVARCHAR2
に変換します。 -
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倍に変更します。
50.9 DBMS_CRYPTOの例
この項の例では、DBMS_CRYPTO
ファンクションを使用した様々なタイプのPL/SQLコーディングを示します。
例1: 暗号ブロック連鎖およびPKCS#5準拠のパディングを使用したAES暗号化
この例では、暗号ブロック連鎖および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;
例2: PKENCRYPTIONファンクションおよびPKDECRYPTIONファンクション
DECLARE ip_str VARCHAR (200) := 'Secret Message'; op_str VARCHAR (200); -- Use OpenSSL to generate the private and public key (2048 bit RSA key) -- openssl genrsa -out private.pem 2048 -- openssl rsa -in private.pem -outform PEM -pubout -out public.pem pubkey VARCHAR (2000) := 'public_key'; prvkey VARCHAR (2000) := 'private_key'; enc_raw RAW (2000); dec_raw RAW (2000); eType PLS_INTEGER := DBMS_CRYPTO.PKENCRYPT_RSA_PKCS1_OAEP_SHA2; kType PLS_INTEGER := DBMS_CRYPTO.KEY_TYPE_RSA; BEGIN DBMS_OUTPUT.PUT_LINE('-------------------------------------------------'); DBMS_OUTPUT.PUT_LINE('Original String := ' || ip_str); DBMS_OUTPUT.PUT_LINE('-------------------------------------------------'); enc_raw:= DBMS_CRYPTO.PKENCRYPT ( src => UTL_I18N.STRING_TO_RAW(ip_str,'AL32UTF8'), pub_key => UTL_I18N.STRING_TO_RAW( pubkey, 'AL32UTF8'), pubkey_alg => kType, enc_alg => eType ); dec_raw := DBMS_CRYPTO.PKDECRYPT ( src => enc_raw, prv_key => UTL_I18N.STRING_TO_RAW( prvkey, 'AL32UTF8'), pubkey_alg => kType, enc_alg => eType ); op_str := UTL_I18N.RAW_TO_CHAR(dec_raw,'AL32UTF8'); dbms_output.put_line('-------------------------------------------------'); dbms_output.put_line('Decrypted String := ' || op_str); dbms_output.put_line('-------------------------------------------------'); end; /
例3: SIGNファンクションおよびVERIFYファンクション
DECLARE ip_str VARCHAR2 (200) := 'Secret Message'; -- Use OpenSSL to generate the private and public key (2048 bit RSA key) -- openssl genrsa -out private.pem 2048 -- openssl rsa -in private.pem -outform PEM -pubout -out public.pem pubkey VARCHAR (2000) := 'public_key'; prvkey VARCHAR (2000) := 'private_key'; sign_raw RAW (2000); returnval BOOLEAN := false; sType PLS_INTEGER := DBMS_CRYPTO.SIGN_SHA224_RSA; kType PLS_INTEGER := DBMS_CRYPTO.KEY_TYPE_RSA; BEGIN sign_raw := DBMS_CRYPTO.SIGN ( src => UTL_I18N.STRING_TO_RAW(ip_str,'AL32UTF8'), prv_key => UTL_I18N.STRING_TO_RAW( prvkey, 'AL32UTF8'), pubkey_alg => kType, sign_alg => sType ); returnval := DBMS_CRYPTO.VERIFY ( src => UTL_I18N.STRING_TO_RAW( ip_str,'AL32UTF8'), sign => sign_raw, pub_key => UTL_I18N.STRING_TO_RAW( pubkey, 'AL32UTF8'), pubkey_alg => kType, sign_alg => sType ); DBMS_OUTPUT.PUT_LINE('-------------------------------------------------'); IF returnval THEN DBMS_OUTPUT.PUT_LINE('True'); ELSE DBMS_OUTPUT.PUT_LINE('False'); END IF; DBMS_OUTPUT.PUT_LINE('-------------------------------------------------'); END; /
50.10 DBMS_CRYPTOサブプログラムの要約
この表は、DBMS_CRYPTO
サブプログラムをアルファベット順に示し、簡単に説明しています。
表50-11 DBMS_CRYPTOパッケージのサブプログラム
サブプログラム | 説明 |
---|---|
ユーザーが指定するキーとオプションのIV(初期化ベクター)に基づき、ストリーム暗号またはブロック暗号を使用して |
|
ユーザーが指定するキーとオプションのIVに基づき、ストリーム暗号またはブロック暗号を使用して |
|
ローカル・アプリケーションの秘密キーとリモート・アプリケーションからの公開キーを使用して共有シークレットを導出します |
|
EC公開キー/秘密キーのペアの生成 |
|
ユーザーが指定するキーとオプションのIVに基づき、ストリーム暗号またはブロック暗号を使用して |
|
ユーザーが指定するキーとオプションのIVに基づき、ストリーム暗号またはブロック暗号を使用して |
|
サポートされる暗号化ハッシュ・アルゴリズム(MD5、SHA-1、SHA-2)の1つをデータに適用します。 ノート: Oracle Database 20cリリース以降、MD5およびSHA-1の使用は非推奨になりました。MD4はサポート対象外です。新しいアプリケーションでは、非推奨の値は使用しないことをお薦めします。推奨されない機能は、下位互換性を維持する目的のみでサポートされています。 |
|
Message Authentication Codeアルゴリズム(MD5、SHA-1、SHA-2)をデータに適用し、キーを使用してメッセージを保護します。 ノート: Oracle Database 20cリリース以降、MD5およびSHA-1の使用は非推奨になりました。新しいアプリケーションでは、非推奨の値は使用しないことをお薦めします。推奨されない機能は、下位互換性を維持する目的のみでサポートされています。 |
|
PKDECRYPTファンクション |
キー・アルゴリズムおよび暗号化アルゴリズムでサポートされた秘密キーを使用して |
PKENCRYPTファンクション |
キー・アルゴリズムおよび暗号化アルゴリズムでサポートされた公開キーを使用して |
暗号的に安全な擬似乱数バイト列を含む |
|
|
|
|
|
SIGNファンクション |
キー・アルゴリズムおよび署名アルゴリズムでサポートされた秘密キーを使用して |
VERIFYファンクション |
署名、キー・アルゴリズムでサポートされた公開キーおよび署名アルゴリズムを使用して、 |
50.10.1 DECRYPTファンクション
これらのファンクションは、ユーザーが指定するキーとオプションのIV(初期化ベクトル)に基づき、ストリーム暗号またはブロック暗号を使用してRAW
データを復号化します。
構文
DBMS_CRYPTO.DECRYPT( src IN RAW, typ IN PLS_INTEGER, key IN RAW, iv IN RAW DEFAULT NULL) RETURN RAW; DBMS_CRYPTO.DECRYPT ( src IN RAW, typ IN PLS_INTEGER, key IN RAW, iv IN RAW DEFAULT NULL, aad IN RAW DEFAULT NULL, tag IN RAW) RETURN RAW;
プラグマ
pragma restrict_references(decrypt,WNDS,RNDS,WNPS,RNPS);
パラメータ
表50-12 DECRYPTファンクションのパラメータ
パラメータ名 | 説明 |
---|---|
|
復号化する |
|
使用する暗号の種類(ストリーム暗号またはブロック暗号)および修飾子。 |
|
復号化に使用するキー。 |
|
ブロック暗号で使用するオプションの初期化ベクター。デフォルトは |
|
追加認証付きデータ。リクエストの一部としてOracle Cloudキー管理サービスに渡す任意の文字列です。 |
|
認証チェックに使用される認証タグ。 |
使用上のノート
-
元のプレーン・テキストデータを復元するには、そのデータを暗号化したときと同じ暗号、修飾子、キー、IVを指定して、
DECRYPT
をコールする必要があります。参照:
このパッケージで使用できる暗号と修飾子の詳細は、
ENCRYPT
ファンクションの「使用上のノート」を参照してください。 -
VARCHAR2
データをRAW
に変換してから暗号化した場合は、UTL_I18N
パッケージを使用し、暗号化済のデータを適切なデータベース文字セットに再変換する必要があります。参照:
VARCHAR2
からRAW
への変換ルールの詳細は、「DBMS_CRYPTOの操作上のノート」を参照してください。
50.10.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); DBMS_CRYPTO.DECRYPT ( dst IN OUT NOCOPY BLOB, src IN BLOB, typ IN PLS_INTEGER, key IN RAW, iv IN RAW DEFAULT NULL, aad IN RAW DEFAULT NULL, tag IN RAW); DBMS_CRYPTO.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, aad IN RAW DEFAULT NULL, tag IN RAW);
プラグマ
pragma restrict_references(decrypt,WNDS,RNDS,WNPS,RNPS);
パラメータ
表50-13 DECRYPTプロシージャのパラメータ
パラメータ名 | 説明 |
---|---|
dst |
出力データの |
|
入力データの |
|
使用する暗号の種類(ストリーム暗号またはブロック暗号)および修飾子。 |
|
復号化に使用するキー。 |
|
ブロック暗号で使用するオプションの初期化ベクター。デフォルトはすべて0(ゼロ)です。 |
|
追加認証付きデータ。リクエストの一部としてOracle Cloudキー管理サービスに渡す任意の文字列です。 |
|
認証チェックに使用される認証タグ。 |
50.10.3 ECDHDERIVE_SHAREDSECRETファンクション
このファンクションでは、ローカル・アプリケーションの秘密キーとリモート・アプリケーションからの公開キーを使用して共有シークレットを導出します。
構文
DBMS_CRYPTO. DBMS_CRYPTO.ECDHDERIVE_SHAREDSECRET ( curveid IN BINARY_INTEGER, pubkey IN RAW, privkey IN RAW, sharedsecret OUT RAW);
パラメータ
表50-14 HASHファンクションのパラメータ
パラメータ名 | 説明 |
---|---|
|
アルゴリズムが使用する曲線名を示す定数。例: |
|
相手側からの公開鍵 |
|
秘密キー |
|
秘密鍵と相手側からの公開鍵を基にして生成された共有秘密鍵 |
使用上のノート
サポートされている曲線ID SECP_256_R1
は、NIST推奨曲線secp256r1
を示します。
50.10.4 ECDH_GENKEYPAIRファンクション
このファンクションでは、EC公開キー/秘密キーのペアを生成します。
構文
DBMS_CRYPTO. DBMS_CRYPTO.ECDH_GENKEYPAIR ( curveid IN BINARY_INTEGER, pubkey OUT RAW, privkey OUT RAW);
パラメータ
表50-15 HASHファンクションのパラメータ
パラメータ名 | 説明 |
---|---|
|
アルゴリズムが使用する曲線名を示す定数。例: |
|
公開キー |
|
秘密キー |
使用上のノート
サポートされている曲線ID SECP_256_R1
は、NIST推奨曲線secp256r1
を示します。
50.10.5 ENCRYPTファンクション
これらのファンクションは、ユーザーが指定するキーとオプションのIV(初期化ベクトル)に基づき、ストリーム暗号またはブロック暗号を使用してRAW
データを暗号化します。
構文
DBMS_CRYPTO.ENCRYPT( src IN RAW, typ IN PLS_INTEGER, key IN RAW, iv IN RAW DEFAULT NULL) RETURN RAW; DBMS_CRYPTO.ENCRYPT ( src IN RAW, typ IN PLS_INTEGER, key IN RAW, iv IN RAW DEFAULT NULL, aad IN RAW DEFAULT NULL, tag OUT RAW) RETURN RAW;
プラグマ
pragma restrict_references(encrypt,WNDS,RNDS,WNPS,RNPS);
パラメータ
表50-16 ENCRYPTファンクションのパラメータ
パラメータ名 | 説明 |
---|---|
|
暗号化する |
|
使用する暗号の種類(ストリーム暗号またはブロック暗号)および修飾子。 |
|
データの暗号化に使用する暗号化キー。 |
|
ブロック暗号で使用するオプションの初期化ベクター。デフォルトは |
|
追加認証付きデータ。リクエストの一部としてOracle Cloudキー管理サービスに渡す任意の文字列です。 |
|
認証チェックに使用される認証タグ。 |
使用上のノート
-
ブロック暗号は、連鎖モードまたはパディング種類に関する修飾子で修飾できます。連鎖モードとパディング種類に関する修飾子がブロック暗号に追加されて、暗号スイートは形成されます。最も一般的に使用される連鎖モードは暗号ブロック連鎖(CBC)であり、推奨のパディング種類はPKCS #5です。このパッケージで定義されているブロック暗号連鎖およびブロック暗号パディングの修飾子の定数については、表50-8および表50-9を参照してください。
-
暗号化と復号化に使用する暗号スイートの内容がよくわかるように、パッケージ・レベルの独自の定数を定義できます。たとえば、DESと暗号ブロック連鎖モードを使用し、パディングを行わない暗号スイートを表すには、次のような定数を定義します。
DES_CBC_NONE CONSTANT PLS_INTEGER := DBMS_CRYPTO.ENCRYPT_DES + DBMS_CRYPTO.CHAIN_CBC + DBMS_CRYPTO.PAD_NONE;
このパッケージですでに定数として定義されているブロック暗号スイートについては、表50-7を参照してください。
-
VARCHAR2
データを暗号化する場合は、そのデータを最初にAL32UTF8文字セットに変換する必要があります。参照:
変換ルールについては、「DBMS_CRYPTOの操作上のノート」を参照してください。
50.10.6 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); DBMS_CRYPTO.ENCRYPT ( dst IN OUT NOCOPY BLOB, src IN BLOB, typ IN PLS_INTEGER, key IN RAW, iv IN RAW DEFAULT NULL, aad IN RAW DEFAULT NULL, tag OUT RAW); 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, aad IN RAW DEFAULT NULL, tag OUT RAW);
プラグマ
pragma restrict_references(encrypt,WNDS,RNDS,WNPS,RNPS);
パラメータ
表50-17 ENCRYPTプロシージャのパラメータ
パラメータ名 | 説明 |
---|---|
dst |
出力データの |
|
入力データの |
|
使用する暗号の種類(ストリーム暗号またはブロック暗号)および修飾子。 |
|
データの暗号化に使用する暗号化キー。 |
|
ブロック暗号で使用するオプションの初期化ベクター。デフォルトは |
|
追加認証付きデータ。リクエストの一部としてOracle Cloudキー管理サービスに渡す任意の文字列です。 |
|
認証チェックに使用される認証タグ。 |
使用上のノート
ENCRYPT
プロシージャの変換ルールの詳細は、「DBMS_DEBUGの操作上のノート」を参照してください。
50.10.7 HASHファンクション
一方向ハッシュ関数は、可変長の入力文字列(データ)をハッシュ値と呼ばれる固定長の(通常は入力文字列より小さい)出力文字列に変換します。ハッシュ値は、入力データの一意の識別子(指紋のようなもの)として使用できます。ハッシュ値を使用すると、データが変更されたかどうかを確認することができます。
一方向ハッシュ関数は、片方向のみに動作するハッシュ関数です。入力メッセージからハッシュ値を計算するのは簡単ですが、特定のハッシュ値からデータを生成するのは困難です。したがって、一方向ハッシュ関数はデータの整合性を保証するのに役立ちます。一方向ハッシュ関数の使用方法の詳細は、「DBMS_CRYPTOの操作上のノート」の「HASHファンクションとMACファンクションの使い分け」を参照してください。
このファンクションは、サポートされる暗号化ハッシュ・アルゴリズム(表50-4を参照)の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);
パラメータ
表50-18 HASHファンクションのパラメータ
パラメータ名 | 説明 |
---|---|
|
ハッシュ値が計算されるソース・データ |
|
ソース・データに適用するハッシュ・アルゴリズム |
使用上のノート
SHA-1 (Secure Hash Algorithm)またはSHA-2を使用することをお薦めします。
50.10.8 MACファンクション
このファンクションはMessage Authentication Code (MAC)アルゴリズムをデータに適用し、キーを使用してメッセージを保護します。
MACは、キー依存の一方向ハッシュ関数です。MACファンクションはHASHファンクションで説明した一方向ハッシュ関数と同様の機能を持っていますが、秘密キーの機能が追加されています。同じ秘密キーを持つユーザーのみがハッシュ値を照合できます。MACファンクションの使用方法の詳細は、「DBMS_CRYPTOの操作上のノート」の「HASHファンクションとMACファンクションの使い分け」を参照してください。
このパッケージで定義されているMACアルゴリズムのリストは、表50-5を参照してください。
構文
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);
パラメータ
表50-19 MACファンクションのパラメータ
パラメータ名 | 説明 |
---|---|
|
MACアルゴリズムが適用されるソース・データ |
|
ソース・データに適用するMACアルゴリズム |
|
MACアルゴリズムで使用するキー |
50.10.9 PKDECRYPTファンクション
このファンクションは、キー・アルゴリズムおよび暗号化アルゴリズムでサポートされた秘密キーを使用してRAW
データを復号化し、復号化されたデータを戻します。
構文
DBMS_CRYPTO.PKDECRYPT( src IN RAW, prv_key IN RAW, pubkey_alg IN BINARY_INTEGER, enc_alg IN BINARY_INTEGER) RETURN RAW;
パラメータ
表50-20 PKDECRYPTファンクションのパラメータ
パラメータ名 | 説明 |
---|---|
|
復号化する |
|
秘密キー。 |
|
KEY_TYPE_RSA RSAキー・タイプを指定します。 |
|
PKCS1およびOAEPパディングを使用したRSA公開キー暗号システムの場合、アルゴリズムPKENCRYPT_RSA_PKCS1_OAEPを指定します。 |
50.10.10 PKENCRYPTファンクション
このファンクションは、キー・アルゴリズムおよび暗号化アルゴリズムでサポートされた公開キーを使用してRAW
データを暗号化し、暗号化されたデータを戻します。
構文
DBMS_CRYPTO.PKENCRYPT( src IN RAW, pub_key IN RAW, pubkey_alg IN BINARY_INTEGER, enc_alg IN BINARY_INTEGER) RETURN RAW;
パラメータ
表50-21 PKENCRYPTファンクションのパラメータ
パラメータ名 | 説明 |
---|---|
|
暗号化する |
|
公開キー。 |
|
KEY_TYPE_RSA RSAキー・タイプを指定します。 |
|
PKCS1およびOAEPパディングを使用したRSA公開キー暗号システムの場合、アルゴリズムPKENCRYPT_RSA_PKCS1_OAEPを指定します。 |
50.10.11 RANDOMBYTESファンクション
このファンクションは、暗号的に安全な擬似乱数バイト列を含むRAW
値を戻しますが、これは、暗号化キー用の乱数ジェネレータとして使用できます。
構文
DBMS_CRYPTO.RANDOMBYTES ( number_bytes IN POSITIVE) RETURN RAW;
プラグマ
pragma restrict_references(randombytes,WNDS,RNDS,WNPS,RNPS);
パラメータ
表50-22 RANDOMBYTESファンクションのパラメータ
パラメータ名 | 説明 |
---|---|
|
生成する擬似乱数バイトのバイト数 |
使用上のノート
number_bytes
の値がRAW
変数の最大長を超えないように注意してください。
50.10.12 RANDOMINTEGERファンクション
このファンクションは、OracleのBINARY_INTEGER
データ・タイプで表現可能な範囲の整数を戻します。
構文
DBMS_CRYPTO.RANDOMINTEGER RETURN BINARY_INTEGER;
プラグマ
pragma restrict_references(randominteger,WNDS,RNDS,WNPS,RNPS);
50.10.13 RANDOMNUMBERファンクション
このファンクションは、OracleのNUMBER
データ・タイプで表現可能な範囲([0..2**128-1])の整数乱数を戻します。
構文
DBMS_CRYPTO.RANDOMNUMBER RETURN NUMBER;
プラグマ
pragma restrict_references(randomnumber,WNDS,RNDS,WNPS,RNPS);
50.10.14 SIGNファンクション
このファンクションは、キー・アルゴリズムおよび署名アルゴリズムでサポートされた秘密キーを使用してRAW
データに署名し、署名を戻します。
構文
DBMS_CRYPTO.SIGN( src IN RAW, prv_key IN RAW, pubkey_alg IN BINARY_INTEGER, sign_alg IN BINARY_INTEGER) RETURN RAW;
パラメータ
表50-23 SIGNファンクションのパラメータ
パラメータ名 | 説明 |
---|---|
|
署名する |
|
秘密キー。 |
|
RSAアルゴリズムの場合はKEY_TYPE_RSA RSAキー・タイプを指定し、ECDSAアルゴリズムの場合はKEY_TYPE_ECDSA ECDSAキー・タイプを指定します。 |
|
「使用上のノート」にリストされているアルゴリズムのいずれかを指定します。 |
使用上のノート
表50-24 署名タイプ・アルゴリズム
ハッシュ・アルゴリズム | 説明 |
---|---|
SIGN_SHA1_RSA |
RSAでのSHA1ハッシュ関数 |
SIGN_SHA1_RSA_X931 |
RSAおよびX931パディングを使用したSHA1ハッシュ関数 |
SIGN_SHA224_ECDSA |
ECDSAでのSHA 224ビット・ハッシュ関数 |
SIGN_SHA224_RSA |
RSAでのSHA 224ビット・ハッシュ関数 |
SIGN_SHA256_ECDSA |
ECDSAでのSHA 256ビット・ハッシュ関数 |
SIGN_SHA256_RSA |
RSAでのSHA 256ビット・ハッシュ関数 |
SIGN_SHA256_RSA_X931 |
RSAおよびX931パディングを使用したSHA 256ビット・ハッシュ関数 |
SIGN_SHA384_ECDSA |
ECDSAでのSHA 384ビット・ハッシュ関数 |
SIGN_SHA384_RSA |
RSAでのSHA 384ビット・ハッシュ関数 |
SIGN_SHA384_RSA_X931 |
RSAおよびX931パディングを使用したSHA 384ビット・ハッシュ関数 |
SIGN_SHA512_ECDSA |
ECDSAでのSHA 512ビット・ハッシュ関数 |
SIGN_SHA512_RSA |
RSAでのSHA 512ビット・ハッシュ関数 |
SIGN_SHA512_RSA_X931 |
RSAおよびX931パディングを使用したSHA 512ビット・ハッシュ関数 |
50.10.15 VERIFYファンクション
このファンクションは、署名、キー・アルゴリズムでサポートされた公開キーおよび署名アルゴリズムを使用して、RAW
データを検証します。署名が検証された場合、TRUE
を戻します。
構文
DBMS_CRYPTO.VERIFY( src IN RAW, sign IN RAW, pub_key IN RAW, pubkey_alg IN BINARY_INTEGER, sign_alg IN BINARY_INTEGER) RETURN BOOLEAN;
パラメータ
表50-25 VERIFYファンクションのパラメータ
パラメータ名 | 説明 |
---|---|
|
検証する |
|
メッセージの署名。 |
pub_key |
公開キー。 |
|
RSAアルゴリズムの場合はKEY_TYPE_RSA RSAキー・タイプを指定し、ECDSAアルゴリズムの場合はKEY_TYPE_ECDSA ECDSAキー・タイプを指定します。 |
|
「使用上のノート」にリストされているアルゴリズムのいずれかを指定します。 |
使用上のノート
表50-26 検証タイプ・アルゴリズム
ハッシュ・アルゴリズム | 説明 |
---|---|
SIGN_SHA1_RSA |
RSAでのSHAハッシュ関数 |
SIGN_SHA1_RSA_X931 |
RSAおよびX931パディングを使用したSHAハッシュ関数 |
SIGN_SHA224_ECDSA |
ECDSAでのSHA 224ビット・ハッシュ関数 |
SIGN_SHA224_RSA |
RSAでのSHA 224ビット・ハッシュ関数 |
SIGN_SHA256_ECDSA |
ECDSAでのSHA 256ビット・ハッシュ関数 |
SIGN_SHA256_RSA |
RSAでのSHA 256ビット・ハッシュ関数 |
SIGN_SHA256_RSA_X931 |
RSAおよびX931パディングを使用したSHA 256ビット・ハッシュ関数 |
SIGN_SHA384_ECDSA |
ECDSAでのSHA 384ビット・ハッシュ関数 |
SIGN_SHA384_RSA |
RSAでのSHA 384ビット・ハッシュ関数 |
SIGN_SHA384_RSA_X931 |
RSAおよびX931パディングを使用したSHA 384ビット・ハッシュ関数 |
SIGN_SHA512_ECDSA |
ECDSAでのSHA 512ビット・ハッシュ関数 |
SIGN_SHA512_RSA |
RSAでのSHA 512ビット・ハッシュ関数 |
SIGN_SHA512_RSA_X931 |
RSAおよびX931パディングを使用したSHA 512ビット・ハッシュ関数 |