フィールド・レベル暗号化 (CSNBFLE および CSNEFLE)

フィールド・レベル暗号化呼び出し可能サービスは、フィールドのフォーマットを保持しながら、支払い関連データベース・フィールドを暗号化する場合に使用します。 この場合のデータベースは、任意の構造化データ域またはリポジトリー (DB2、IMS、VSAM など)、あるいは任意の列区切りデータ・セットまたはファイルです。 例えば、16 桁の EBCDIC クレジット・カード番号を暗号化できます。 この場合、結果として得られる暗号テキストも 16 の EBCDIC 数字になります。

この呼び出し可能サービスは、カウンター・モード・ストリーム暗号である VISA フォーマット保持暗号化アルゴリズムを実装します。 そのため、このサービスには非常に厳しいキーイング要件があります。 これらの要件には厳密に従わなければなりません。 そうでないと、アルゴリズムのセキュリティーが重大な危険にさらされるおそれがあります。 以下の 2 つのキーイング・オプションがあります。
key_identifier パラメーターで識別される鍵は暗号鍵です。
鍵と context_data パラメーター (初期設定ベクトル (IV) や TWEAK など) の組み合わせは、暗号化呼び出しごとに固有でなければなりません。 これは、ICSF の他の暗号化サービス (CSNBSYE など) と同様です。
key_identifier パラメーターで識別される鍵は基本導出鍵です。
基本鍵と key_derive_data は、実際の暗号化サブキーを導出するために使用されます。 基本鍵、鍵導出データ、およびコンテキスト・データの組み合わせは、暗号化呼び出しごとに固有でなければなりません。 例えば、次のデータベースを静的鍵によって保護したい場合は、以下のようになります。
名前 E メール・アドレス クレジット・カード番号 最終変更日時 その他のデータ
John Doe jdoe@company.com 1111222233334444 2013/10/22 14.22.05 xxx
Lisa Smith lsmith@company.com 6666777788889999 2012/07/19 09.10.16 yyy
  • クレジット・カード番号列は暗号化されます。
  • E メール・アドレス列は、データベースに対するレコードの 1 次索引です。
  • 最終変更日時列は、行が変更されるたびに更新されます。
クレジット・カード番号フィールドが更新され、暗号化が必要になると、E メール・アドレス・フィールドと最終変更日時フィールドの連結が、鍵導出データとして提供されます。 最終変更日時フィールドは更新のたびに変更されるため、このフィールドと 1 次索引および静的鍵の組み合わせにより、固有の暗号化サブキーが作成されます。 この技法を使用する場合、コンテキスト・データに固有性は必要ありません。 そのため、コンテキスト・データは、レコードに保管する必要のない定数値にすることができます。
注: 後でデータを暗号化解除するには、同じ基本鍵、鍵導出データ、およびコンテキスト・データを CSNBFLD 呼び出し可能サービスに提供する必要があります。 最終変更日時フィールドは他のフィールド更新に応じて変更される場合があるため、このフィールドに関しては注意が必要です。 このような変更が発生するたびに、古い最終変更日時フィールド値を使用してクレジット・カード番号フィールドを暗号化解除し、新しい値で再暗号化することが必要になる可能性があります。

AMODE(64) 呼び出しの呼び出し可能サービス名は CSNEFLE です。

形式

CALL CSNBFLE(
             return_code,
             reason_code,
             exit_data_length,
             exit_data,
             rule_array_count,
             rule_array,
             key_identifier_length,
             key_identifier,
             key_derive_data_length,
             key_derive_data,
             context_data_length,
             context_data,
             charset_parms_length,
             charset_parms,
             reserved_length,
             reserved,
             source_text_id,
             source_text_length,
             source_text,
             target_text_id,
             target_text_length,
             target_text)

パラメーター

return_code
方向 タイプ
出力 整数

戻りコードは、呼び出し可能サービスの一般的な結果を示しています。 ICSF および暗号化コプロセッサーの戻りコードおよび理由コードに戻りコードがリストされています。

reason_code
方向 タイプ
出力 整数

理由コードは、アプリケーション・プログラムに返される、呼び出し可能サービスの結果を示しています。 戻りコードにはそれぞれ、特定の処理問題を示すさまざまな理由コードが割り当てられています。 ICSF および暗号化コプロセッサーの戻りコードおよび理由コードに理由コードがリストされています。

exit_data_length
方向 タイプ
入出力 整数

インストール・システム出口に渡されるデータの長さ。 データは exit_data パラメーターで識別されます。

exit_data
方向 タイプ
入出力 ストリング

インストール・システム出口に渡されるデータ。

rule_array_count
方向 タイプ
入力 整数

rule_array パラメーターで指定するキーワードの数。 最小値は 4、最大値は 5 です。

rule_array
方向 タイプ
入力 ストリング

制御情報を呼び出し可能サービスに提供するキーワード。 キーワードは、連続するストレージ内になければならず、各キーワードはその 8 バイト位置で左寄せされ、右側にブランクが埋め込まれている必要があります。

表 1. フィールド・レベル暗号化の規則配列キーワード
キーワード 意味
アルゴリズム (必須)
AESVFPE AES
TDESVFPE TDES
鍵タイプ (オプション)
KEY-CLR key_identifier パラメーターに非暗号化鍵値が含まれることを指定します。 KEY-CLR はデフォルト値です。
KEYIDENT key_identifier パラメーターの値が、CKDS 内の内部鍵トークンまたは鍵トークンのラベルのいずれかであることを示します。
キーイング方式 (いずれかが必須)
KEY key_identifier パラメーターの値が暗号鍵であり、指定された context_data 値で 1 回のみ暗号化に使用することを示します。
KEY-DRV key_identifier で指定された鍵が基本導出鍵であり、暗号化に複数回使用できることを示します。 暗号化のたびに、固有の暗号化サブキーが、基本鍵および key_derive_data パラメーターから導出されます。 key_derive_datacontext_data の組み合わせは、暗号化ごとに固有でなければなりません。 さらに、フィールドを CSNBFLD 呼び出し可能サービスを使用して暗号化解除する際には、この同じ key_derive_datacontext_data の組み合わせを指定する必要があります。 key_derive_data の長さは 8 以上でなければならず、2000 を超えてはなりません。
コンテキスト方式 (いずれかが必須)
TWEAK context_data パラメーターが、暗号化に使用する初期設定ベクトル (IV) を指定することを示します。
TWEAKGEN AESVFPE アルゴリズムの場合のみ。 ランダム初期設定ベクトル (IV) が生成され、暗号化に使用され、context_data パラメーターで返されることを示します。
文字セット (いずれかが必須)
ADIGITS 入力文字が ASCII 数字であることを示します。 ICSF は、次の順序で 10 に相当する n を使用して、入力文字を整数 (序数) 値に変換します。
0123456789
定数 k は、TDES の場合は 18、AES の場合は 37 です。
APRINT 入力文字が印刷可能 ASCII であることを示します。 ICSF は、次の順序で 95 に相当する n を使用して、入力文字を整数 (序数) 値に変換します。
!"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQR
STUVWXYZ[¥]^_`abcdefghijklmnopqrstuvwxyz{|}~
定数 k は、TDES の場合は 8、AES の場合は 18 です。
EDIGITS 入力文字が EBCDIC 数字であることを示します。 ICSF は、次の順序で 10 に相当する n を使用して、入力文字を整数 (序数) 値に変換します。
0123456789
定数 k は、TDES の場合は 18、AES の場合は 37 です。
EPRINT 入力文字が印刷可能 EBCDIC であることを示します。 ICSF は、次の順序で 95 に相当する n を使用して、入力文字を整数 (序数) 値に変換します。
!"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQR
STUVWXYZ[¥]^_`abcdefghijklmnopqrstuvwxyz{|}~
定数 k は、TDES の場合は 8、AES の場合は 18 です。
ORDINAL 入力文字が、呼び出し側アプリケーションによってすでに序数値に変換されていることを示します。 ICSF は、charset_parms で指定された n 値および k 値を使用して文字を処理します。 サービスで最適値を計算して使用するには、k を 0 に設定します。
key_identifier_length
方向 タイプ
入力 整数
key_identifier パラメーターの長さ (バイト) を指定します。 非暗号化鍵の場合、この長さはバイト数であり、鍵の値のみを含みます。 KEYIDENT キーワードの場合、このパラメーターは 64 でなければなりません。
注: 単一長 DES 鍵はサポートされていません。
key_identifier
方向 タイプ
入出力 ストリング

KEY-CLR キーワードの場合、key_identifier は暗号鍵を指定します。 パラメーターは左寄せする必要があります。

KEYIDENT キーワードの場合、key_identifier は内部非暗号化 DES または AES DATA 鍵トークンか、非暗号化または暗号化 DES または AES DATA 鍵トークンのラベル名を指定します。

指定されたトークンが旧マスター鍵で暗号化されていた場合、このトークンは現行マスター鍵で暗号化されて返されます。

key_derive_data_length
方向 タイプ
入力 整数

key_derive_data パラメーターの長さ (バイト) を指定します。 キーイング方式 KEY-DRV の場合、値は 8 以上でなければならず、2000 を超えてはなりません。 キーイング方式 KEY の場合、値は 0 でなければなりません。

key_derive_data
方向 タイプ
入出力 ストリング

キーイング方式 KEY-DRV が選択されている場合に、暗号化および暗号化解除のサブキーを導出するために使用するデータ。

context_data_length
方向 タイプ
入出力 整数

context_data パラメーターの長さ (バイト) を指定します。 コンテキスト方式 TWEAK の場合、これは入力フィールドであり、規則 AESVFPE の場合は 16、規則 TDESVFPE の場合は 8 でなければなりません。 コンテキスト方式 TWEAKGEN の場合、この値は入力時には 16 以上でなければならず、出力時には 16 に設定されます。

context_data
方向 タイプ
入出力 ストリング
コンテキスト方式 TWEAK の場合:

暗号化および暗号化解除に使用する初期設定ベクトル (IV) を指定します。 この値の長さは、TDES の場合は 8 バイト、AES の場合は 16 バイトです。 左端の 7 ビットはゼロでなければなりません。 右端の c ビットは VFPE カウンター値用に予約済みです (c はアプリケーション固有です)。 左端の 7 ビットと右端の c ビットの間にあるセクションが TWEAK 域です。 この TWEAK 域は、アプリケーションに特定の固有値に設定することをお勧めします。 固有鍵とコンテキスト・データの組み合わせの必要性については、上記の情報を参照してください。

サービスは、必要な暗号化ブロックごとにカウンターを増加させます (例えば、k 文字が処理されるたびに 1 回増加されます)。 アプリケーションでは、カウンター値をゼロに初期化することが必要とされます。 複数パーツの暗号化および暗号化解除は、カウンター部分を後続の呼び出しに対して適切に設定することによって実行できます。

暗号化解除の場合、context_data パラメーターには、データの暗号化に使用されたものと同じ値が含まれていなければなりません。
注: 呼び出し側は、c が、暗号化される合計文字数を考慮した十分な大きさであることを確認する必要があります。 TWEAK 域にオーバーフローするようなカウンター値の増加は、許可すべきではありません。 サービスはこれを強制しようとはしません。 context_data 値全体から左端の 7 ビットを除いた値が、VFPE カウンター T として扱われ、適宜増加されます。
コンテキスト方式 TWEAKGEN の場合:

AES 暗号化の場合のみ。 ランダム初期設定ベクトル (IV) が生成され、context_data パラメーターで返されます。 CSNBFLD 呼び出し可能サービスを使用してフィールドを暗号化解除する際には、この返された context_data 値を入力 context_data として指定する必要があります。

返される context_data 値の長さは 16 バイトで、フォーマットは以下のとおりです。
バイト 1
ゼロ
バイト 2 から 13
疑似乱数値
バイト 14 から 16
ゼロ (VFPE カウンター値 c のために予約済みの領域)
呼び出し側は、戻り値を保持するために 16 バイトの context_data フィールドを事前割り振りし、context_data_length を 16 以上に設定する必要があります。

複数パーツ暗号化は、TWEAKGEN 規則を使用して暗号化を開始し、それ以降の呼び出しでは TWEAK 規則に切り替えることによって行うことができます。 呼び出しごとに、カウンター部分を適切に設定することを忘れないでください。

charset_parms_length
方向 タイプ
入力 整数

charset_parms パラメーターの長さ (バイト) が含まれます。 キーワード ORDINAL の場合、値は 4 でなければなりません。 その他の場合、値は 0 でなければなりません。

charset_parms
方向 タイプ
入出力 ストリング

文字セット規則 ORDINAL の場合、このパラメーターは、n と k の値を、n が最初に現れる 2 つの連結されたハーフ・ワードとして指定します。 n は 9 以上、255 以下でなければなりません。 k はゼロ以外の場合、適切に設定する必要があります。 これは n および使用するアルゴリズム (AES または TDES) によって異なります。 値の設定が大きすぎると、要求が失敗するか、パフォーマンスに影響します。 同様に、値の設定が小さすぎても、パフォーマンスに影響するおそれがあります。 サービスで最適値を計算して使用するには、k を 0 に設定します。 入力で k が 0 である場合は、k の計算された最適値が出力で返されます。

Pseudo-randomsource_text_id
方向 タイプ
入力 整数

暗号化する source_text パラメーターの ALET。

reserved_length
方向 タイプ
入力 整数

reserved パラメーターの長さ (バイト)。 値は 0 でなければなりません。

reserved
方向 タイプ
入力 ストリング

このフィールドは無視されます。

source_text_length
方向 タイプ
入力 整数

source_text パラメーターの長さ (バイト)。 最大値は 2,147,836,647 です。 ゼロ値は有効です。

source_text
方向 タイプ
入力 ストリング

暗号化する入力テキスト。 ストリングには、charset キーワードで定義された文字セットの文字のみが含まれていなければなりません。 サービスはこれを強制しません。

target_text_id
方向 タイプ
入力 整数

target_text パラメーターの ALET。

target_text_length
方向 タイプ
入出力 整数

入力に関して、このパラメーターは、target_text パラメーターが指すストレージのサイズを指定します。 出力に関して、このパラメーターは、target_text パラメーターによってアドレッシングされたバッファーに保管されているテキストの実際の長さを含みます。 この値は、source_text_length の値より小さくしてはなりません。

target_text
方向 タイプ
出力 ストリング

サービスから返される暗号化されたテキスト。

使用上の注意

呼び出し側がこの呼び出し可能サービス、鍵ラベル、または CKDS に保管された内部セキュア鍵トークンの使用を許可されているかを検査するために、SAF が呼び出される場合があります。

CKDS 暗号化鍵を使用するには、指定の鍵ラベルに関連付けられた CSFKEYS クラス一般リソース・プロファイルの ICSF セグメントに、SYMCPACFWRAP(YES) が含まれている必要があります。

このサービスに使用可能なプリプロセッシング出口またはポストプロセッシング出口はありません。

マスター鍵は、このサービスを暗号化鍵で使用する場合にのみロードする必要があります。

AESVFPE アルゴリズムは、使用可能な場合はハードウェアを使用します。 そうでない場合、非暗号化鍵操作はソフトウェアで実行されます。

このサービスは、実行によって source_text パラメーターの破壊的オーバーレイが生じるおそれがある場合は失敗します。

複数パーツ暗号化の場合、ソース・テキスト長は最終呼び出しまで、呼び出しごとに k バイトの倍数でなければなりません。 最終呼び出しでは小さくすることができます。

規則 ORDINAL の場合、k = 0 を指定することは、サービスが最適な k 値を計算し、使用し、返す必要があることを示します。 最適な k 値の計算に使用されるアルゴリズムは、以下のとおりです。
  • k を、2 の b 乗以下である最大の累乗 n に設定します (b は TDES の場合は 64、AES の場合は 128)。
  • n の k 乗が 2 の b 乗に等分されない場合は、k を k-1 に設定します。
注: n の特定の値については、大量の非暗号化テキストを暗号化する場合、k から 1 を減算しても、実際には最適ではない値が結果として得られることがあります。 サービスでは、このようなケースの識別は試行されません。
暗号化および暗号化解除のサブキーは、NIST SP 800-108「Recommendation for Key Derivation Using Pseudorandom Functions」に従って、基本鍵から導出されます。 「カウンター・モードでの KDF」バリアントは、以下のように使用されます。
K1, K2, … Kn = PRF(Key,i || key_data_data || blen) 
説明:
  • PRF は CMAC (NIST SP 800-38B「Recommendation for Block Cipher Modes of Operation: The CMAC Mode for Authentication」を参照) です。
  • i は 1 バイトの反復変数です。
  • blen は必要な鍵の 1 バイトのビット長です (マイナス 1)。
注: 暗号化および暗号化解除のサブキーは常に、基本鍵と同タイプおよび同サイズです。

アクセス制御点

暗号化鍵のラベルが key_identifier パラメーターに指定されている場合は、下記の該当するアクセス制御点を有効にする必要があります。
アルゴリズム アクセス制御点
AESVFPE Symmetric Key Encipher/Decipher - Encrypted AES keys
TDESVFPE Symmetric Key Encipher/Decipher - Encrypted DES keys

必須ハードウェア

下表に、各サーバー・タイプに必要な暗号化ハードウェアを示し、この呼び出し可能サービスの制約事項について説明します。

表 2. フィールド・レベル暗号化必須ハードウェア
サーバー 必須暗号化ハードウェア 制約事項

IBM eServer zSeries
990
IBM eServer zSeries
890

CP Assist for Cryptographic Functions 暗号化鍵はサポートされていません。

IBM System z9 EC
IBM System z9 BC

CP Assist for Cryptographic Functions 暗号化鍵はサポートされていません。

IBM System z10 EC
IBM System z10 BC

CP Assist for Cryptographic Functions

Crypto Express3 コプロセッサー

暗号化鍵には、2009 年 11 月以降のライセンス内部コード (LIC) を持つ CEX3C が必要です。

IBM zEnterprise 196
IBM zEnterprise 114

CP Assist for Cryptographic Functions

Crypto Express3 コプロセッサー

暗号化鍵には、2009 年 11 月以降のライセンス内部コード (LIC) を持つ CEX3C が必要です。

IBM zEnterprise EC12
IBM zEnterprise BC12

CP Assist for Cryptographic Functions

Crypto Express3 コプロセッサー

Crypto Express4 コプロセッサー

 

IBM z13

CP Assist for Cryptographic Functions

Crypto Express5 CCA コプロセッサー

 

関連情報

ソースとターゲットのテキスト・フィールドをオーバーラップすることはできません。 以下に例を示します。
ssssss
     tttttt  is not supported.

tttttt
     ssssss  is not supported.

sssssstttttt is supported.

ssssss
tttttt  is supported.

s represents the source text and t represents the target text.