DBMS_CRYPTO 使用例 〜準備〜

Oracle 10g には DBMS_CRYPTO という新しい暗号化するためのパッケージが組み込まれている。 ⇒ 暗号化ツールキットの概要 

DBMS_CRYPTO パッケージを使用するための準備

DBMS_CRYPTO は初期状態では SYS にインストールされているが一般ユーザー(PUBLIC グループ)には実行権限が付与されていない。

ユーザー RIVUS に実行権限を付与する。

SQL> -- ユーザー RIVUS に実行権限付与
SQL> grant execute on dbms_crypto to RIVUS;

暗号化、暗号化ハッシュのタイプ

DBMS_CRYPTO 暗号化パッケージでは大幅に暗号化およびハッシュアルゴリズムが追加されている。

ブロック暗号、ストリーム暗号では「アルゴリズム」「ブロック連鎖」「パディング」をセットにして指定する。それぞれは加算(≒ 論理和) したのちに1つのパラメータ(typ) で指定する。

事前定義済のブロック暗号化スイート(暗号化セット)

DES および 3DES については以下のセット内容で事前定義が用意されている。

typ暗号化のセット内容
DES_CBC_PKCS5ENCRYPT_DES + CHAIN_CBC + PAD_PKCS5
DES3_CBC_PKCS5ENCRYPT_3DES + CHAIN_CBC + PAD_PKCS5

暗号化アルゴリズムのタイプ

暗号化(ENCRYPT) は復号化(DECRYPT) することで元のバイナリコードを取り出せる(可逆変換)。ハッシュ化(細切れ化)は一方向の暗号化で元のバイナリコードを取り出せない(不可逆変換)。

typ暗号化の内容
暗号化ENCRYPT_DESData Encryption Standard:DES(56bit/64bit)
ENCRYPT_3DES_2KEY3DES(112bit/128bit)でキー2つ使用
ENCRYPT_3DES3DES(168bit/192bit)でキー3つ使用
ENCRYPT_AES128Advanced Encryption Standard:AES(キー 128bit)
ENCRYPT_AES192AES(キー 192bit)
ENCRYPT_AES256AES(キー 256bit)
ENCRYPT_RC4RC4
ハ ッ シ ュ 化HASH_MD4Message Digest:MD4(ハッシュ長:128bit)
HASH_MD5MD5(ハッシュ長:128bit)
HASH_SH1Secure Hash algorithm-1: SH1(160bit)
HASH_SH256Secure Hash algorithm-2 : SH2(256bit) Oracle 12c
HASH_SH384Secure Hash algorithm-2 : SH2(384bit) Oracle 12c
HASH_SH512Secure Hash algorithm-2 : SH2(512bit) Oracle 12c
HMAC_MD5Message Authentication Code:MAC
秘密鍵を使う MD5
HMAC_SH1MAC 秘密鍵を使う SH1
HMAC_SH256MAC 秘密鍵を使う SH256 Oracle 12c
HMAC_SH384MAC 秘密鍵を使う SH384 Oracle 12c
HMAC_SH512MAC 秘密鍵を使う SH512 Oracle 12c

暗号化のブロック連鎖

データ列を暗号化するときに前ブロックと連鎖方法の指定

typブロック連鎖の内容
CHAIN_ECBElectronic Codebook:ECB(個々のブロックは独立:連鎖なし)
CHAIN_CBCCipher Block Chaining:CBC(直前のブロックと XOR 演算で連鎖)
CHAIN_CFBCipher Feedback:CFB(ブロックに満たないデータを暗号化できるように補完)
CHAIN_OFBOutput Feedback:OFB(直前のブロックの nビット分が次データストリームに追加)

暗号化のブロックのパディング

データ列を暗号化するときブロックサイズ補完

typデータブロックの補完方法
PAD_PKCS5PKCS #5: Password-Based Cryptography Standard を使用
PAD_NONE補完しない。ユーザーがブロックサイズに責任をもつ
PAD_ZERO0 を補完する

定義済み 例外一覧

例外名エラーコード:メッセージ
DoubleEncryptionORA-28233: 二重暗号化はサポートされません。
KeyBadSizeORA-28234: キーの長さが短かすぎます。
KeyNullORA-28239: キーが提供されませんでした
CipherSuiteInvalidORA-28827: 無効な暗号型が渡されました
CipherSuiteNullORA-28829: 暗号型が指定されていません

暗号化 ENCRYPT

ENCRYPT には RAW を入力として RAW を戻り値とするファンクションがある。また、BLOB を入力し BLOB を出力するプロシージャ、CLOB を入力、BLOB を出力とする オーバーロード されたプロシージャがある。

  • RAW 用の暗号化ファンクション
FUNCTION  ENCRYPT (src IN            RAW,
                   typ IN            PLS_INTEGER,
                   key IN            RAW,
                   iv  IN            RAW          DEFAULT NULL
) RETURN RAW;
パラメータ名内容
src暗号化するデータ(バイナリ)
typ暗号化、または、暗号化ハッシュ化のタイプ
key暗号化キー
ivイニシャルベクター

BLOB および CLOB 用の暗号化プロシージャ

-- BLOB 用
PROCEDURE  ENCRYPT (dst IN OUT NOCOPY BLOB,
                   src IN            BLOB,
                   typ IN            PLS_INTEGER,
                   key IN            RAW,
                   iv  IN            RAW          DEFAULT NULL
);
-- CLOB 用
PROCEDURE  ENCRYPT (dst IN OUT NOCOPY BLOB,
                   src IN            CLOB,
                   typ IN            PLS_INTEGER,
                   key IN            RAW,
                   iv  IN            RAW          DEFAULT NULL
);
 


乱数、暗号化、ハッシュ関連事項

日本オラクル
■ 日本オラクル 株式会社
■ オラクルマスター資格 (オラクルマスターとは
■ Oracle Web セミナー