ENCRYPT_RC2

ENCRYPT_RC2 関数は、RC2 暗号化アルゴリズムを使用して データ・ストリング を暗号化した結果の値を戻します。 暗号化解除に使用されるパスワードは、パスワード・ストリング 値か、 暗号化パスワードの値 (SET ENCRYPTION PASSWORD ステートメントで割り当てられる) です。

構文図を読む構文図をスキップする
>>-ENCRYPT_RC2--(--data-string--+----------------------------------------+--)-><
                                '-,--password-string--+----------------+-'      
                                                      '-,--hint-string-'        

data-string
暗号化するストリング値を戻す式。 ストリング式は、組み込みストリング・データ・タイプでなければなりません。
データ・ストリング のデータ・タイプの長さ属性は、 m - MOD(m,8) - n - 1 より小さくなければなりません。 ここで、m は結果データ・タイプの最大長で、n は、値を暗号化するのに必要なオーバーヘッドの量です。
  • ヒント・ストリング が指定されない場合、n は 8 バイトです。
  • ヒント・ストリング が指定される場合、n は 40 バイトです。
password-string
6 バイト以上 127 バイト以下の文字ストリング値を戻す式。 この式は CLOB であってはなりません。 この値は、データ・ストリングを暗号化するために使用したパスワードを表します。 パスワード引数の値が NULL であるか、値を指定しない場合は、 データは ENCRYPTION PASSWORD 値を使用して暗号化されます。 この値は、SET ENCRYPTION PASSWORD ステートメントを使用して設定しておく必要があります。
hint-string
データ所有者がパスワードを思い出すのに役立つ最大 32 バイトの文字ストリング値を戻す式 (例えば、 「Ocean」は「Pacific」を思い出すためのヒント)。 この式は CLOB であってはなりません。 ヒント値を指定すると、ヒントは結果に埋め込まれ、GETHINT 関数を使用して検索できます。 パスワード・ストリング が指定されており、この引数が NULL 値であるか提供されない場合は、ヒントは結果に埋め込まれません。 パスワード・ストリング が指定されていない場合は、SET ENCRYPTION PASSWORD ステートメントを使用してヒントを指定できます。

結果のデータ・タイプは、以下の表に示すとおり、最初の引数によって決まります。

最初の引数のデータ・タイプ 結果のデータ・タイプ
BINARY または VARBINARY VARBINARY
CHAR、VARCHAR、GRAPHIC、または VARGRAPHIC VARCHAR FOR BIT DATA
BLOB、CLOB、または DBCLOB BLOB

結果の長さ属性は、指定される引数によって次のように異なります。

  • パスワード・ストリング が指定されているが、ヒント・ストリング は指定されていない場合は、データ・ストリング の長さ属性に 16 を足し、それに次の 8 バイト境界までのバイト数を足したものになります。1
  • それ以外の場合は、データ・ストリング の長さ属性に 48 を足し、それに次の 8 バイト境界までのバイト数を足したものになります。1
結果の実際の長さは、以下の合計になります。
  • data-string の実際の長さに、次の 8 バイト境界までのバイト数を足したもの。1
  • ヒントの実際の長さ。

    ヒント・ストリング が関数の引数として、または SET ENCRYPTION PASSWORD ステートメントに指定されていない場合、ヒントの実際の長さはゼロです。

  • n - ここで n (値を暗号化するのに必要なオーバーヘッドの量) は 8 バイト (data-string が LOB である場合、または data-string、パスワード、またはヒントに別の CCSID 値を使用する場合は、16 バイト) です。

引数が NULL になる可能性がある場合は、結果も NULL になる可能性があります。 引数が NULL の場合は、結果は NULL 値になります。

暗号化された結果は、データ・ストリング 値より長くなることに注意してください。 したがって、暗号化された値を割り当てる場合は、 暗号化された値の全体を入れるのに十分なサイズでターゲットを宣言するようにしてください。

パスワード保護: 暗号化パスワードへの不用意なアクセスを避けるため、 プログラム、プロシージャー、または関数のソースに パスワード・ストリング をストリング定数として指定しないでください。 代わりに、SET ENCRYPTION PASSWORD ステートメントまたはホスト変数を使用してください。

リモート・リレーショナル・データベースに接続しているとき、 指定されたパスワード自体は「平文で」送信されます。 つまり、パスワード自体は暗号化されません。 このようなケースでパスワードを保護するには、 IPSEC (または IBM® i 製品同士の接続の場合は SSL) などの通信暗号化メカニズムを使用することを考慮してください。

暗号化アルゴリズム: 使用される内部暗号化アルゴリズムは、 埋め込み処理を行う RC2 ブロック暗号で、128 ビットの秘密鍵は、 MD5 メッセージ要約を使用してパスワードから引き出されます。

暗号化パスワードおよびデータ: パスワードは、ユーザーが責任を持って管理します。 データを暗号化すると、データを暗号化解除するのに使用できるのは暗号化に使用したパスワードだけです。 CHAR 変数を使用してパスワード値を設定する場合は、 パスワード値にブランクが埋め込まれることがあるので注意してください。 暗号化された結果には、NULL 終止符や他の印刷できない文字が含まれる場合があります。

表列の定義: 列および特殊タイプに暗号化されたデータが入るように定義する場合:

  • CHAR FOR BIT DATA、VARCHAR FOR BIT DATA、BINARY、 VARBINARY、 または BLOB のデータ・タイプを使用して列を定義する必要があります。
  • 列の長さ属性に追加の n バイトが含まれている必要があります。 n は、前述のとおり、データを暗号化するのに必要なオーバーヘッドです。

これらのデータ・タイプの 1 つがない列、または提案されたデータ長より短い長さの列に割り当てまたはキャストを行うと、割り当てエラーになる場合があります。 あるいは、割り当てが成功すると、その後データを暗号化解除するときに失敗してデータが失われます。 ブランクは暗号化されたデータとして有効ですが、短い列に保管される場合は切り捨てられます。

列の長さの計算例を以下に示します。

暗号化されていないデータの最大長               6 バイト
次の 8 バイト境界までのバイト数                2 バイト
オーバーヘッド                                 8 バイト (または 16 バイト)
                                              --------
暗号化されたデータの列の長さ                  16 バイト (または 32 バイト)


暗号化されていないデータの最大長              32 バイト
次の 8 バイト境界までのバイト数                8 バイト
オーバーヘッド                                 8 バイト (または 16 バイト)
                                              --------
暗号化されたデータの列の長さ                  48 バイト (または 56 バイト)

暗号化されたデータの管理: 暗号化されたデータは、 ENCRYPT_RC2 関数に対応する暗号化解除関数をサポートするサーバーでのみ暗号化解除できます。 したがって、暗号化されたデータを含む列のレプリケーションは、 暗号化解除関数をサポートするサーバーに対してのみ行う必要があります。

代替構文: 旧バージョンの DB2® との互換性を確保するために、 ENCRYPT_RC2 の代わりに ENCRYPT を指定することもできます。

  • 表 EMP1 に SSN という社会保障の列があると想定します。 この例では、暗号化パスワードを保持するために ENCRYPTION PASSWORD 値を使用します。
      SET ENCRYPTION PASSWORD = 'Ben123'
    
      INSERT INTO EMP1 (SSN) VALUES ENCRYPT_RC2( '289-46-8832' )
  • この例は、暗号化パスワードを明示的に受け渡しします。
      INSERT INTO EMP1 (SSN) VALUES ENCRYPT_RC2( '289-46-8832', 'Ben123' )
  • ヒント「Ocean」は、ユーザーが暗号化パスワード「Pacific」を思い出せるようにするために保管されます。
      INSERT INTO EMP1 (SSN) VALUES ENCRYPT_RC2( '289-46-8832', 'Pacific', 'Ocean' )
1 ENCRYPT_TDES や ENCRYPT_AES とは異なり、data-string の長さが既に 8 バイト境界に達しているとしても 8 バイトを追加します。