ENCRYPT_TDES

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

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

data-string
暗号化するストリング値を戻す式。 ストリング式は、組み込みストリング・データ・タイプでなければなりません。

データ・ストリング のデータ・タイプの長さ属性は、 m - MOD(m,8) - n - 1 より小さくなければなりません。 ここで、m は結果データ・タイプの最大長で、n は、値を暗号化するのに必要なオーバーヘッドの量です。

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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

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

  • 表 EMP1 に SSN という社会保障の列があると想定します。 この例では、暗号化パスワードを保持するために ENCRYPTION PASSWORD 値を使用します。
      SET ENCRYPTION PASSWORD = 'Ben123'
    
      INSERT INTO EMP1 (SSN) VALUES ENCRYPT_TDES( '289-46-8832' )
  • この例は、暗号化パスワードを明示的に受け渡しします。
      INSERT INTO EMP1 (SSN) VALUES ENCRYPT_TDES( '289-46-8832', 'Ben123' )
  • ヒント「Ocean」は、ユーザーが暗号化パスワード「Pacific」を思い出せるようにするために保管されます。
      INSERT INTO EMP1 (SSN) VALUES ENCRYPT_TDES( '289-46-8832', 'Pacific', 'Ocean' )