フィールド・レベル暗号化 (CSNBFLE および CSNEFLE)
フィールド・レベル暗号化呼び出し可能サービスは、フィールドのフォーマットを保持しながら、支払い関連データベース・フィールドを暗号化する場合に使用します。 この場合のデータベースは、任意の構造化データ域またはリポジトリー (DB2、IMS、VSAM など)、あるいは任意の列区切りデータ・セットまたはファイルです。 例えば、16 桁の EBCDIC クレジット・カード番号を暗号化できます。 この場合、結果として得られる暗号テキストも 16 の EBCDIC 数字になります。
- 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_data と context_data の組み合わせは、暗号化ごとに固有でなければなりません。 さらに、フィールドを CSNBFLD 呼び出し可能サービスを使用して暗号化解除する際には、この同じ key_derive_data と context_data の組み合わせを指定する必要があります。 key_derive_data の長さは 8 以上でなければならず、2000 を超えてはなりません。 コンテキスト方式 (いずれかが必須) TWEAK context_data パラメーターが、暗号化に使用する初期設定ベクトル (IV) を指定することを示します。 TWEAKGEN AESVFPE アルゴリズムの場合のみ。 ランダム初期設定ベクトル (IV) が生成され、暗号化に使用され、context_data パラメーターで返されることを示します。 文字セット (いずれかが必須) ADIGITS 入力文字が ASCII 数字であることを示します。 ICSF は、次の順序で 10 に相当する n を使用して、入力文字を整数 (序数) 値に変換します。
定数 k は、TDES の場合は 18、AES の場合は 37 です。0123456789
APRINT 入力文字が印刷可能 ASCII であることを示します。 ICSF は、次の順序で 95 に相当する n を使用して、入力文字を整数 (序数) 値に変換します。
定数 k は、TDES の場合は 8、AES の場合は 18 です。!"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQR STUVWXYZ[¥]^_`abcdefghijklmnopqrstuvwxyz{|}~
EDIGITS 入力文字が EBCDIC 数字であることを示します。 ICSF は、次の順序で 10 に相当する n を使用して、入力文字を整数 (序数) 値に変換します。
定数 k は、TDES の場合は 18、AES の場合は 37 です。0123456789
EPRINT 入力文字が印刷可能 EBCDIC であることを示します。 ICSF は、次の順序で 95 に相当する n を使用して、入力文字を整数 (序数) 値に変換します。
定数 k は、TDES の場合は 8、AES の場合は 18 です。!"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQR STUVWXYZ[¥]^_`abcdefghijklmnopqrstuvwxyz{|}~
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 のために予約済みの領域)
複数パーツ暗号化は、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 バイトの倍数でなければなりません。 最終呼び出しでは小さくすることができます。
- k を、2 の b 乗以下である最大の累乗 n に設定します (b は TDES の場合は 64、AES の場合は 128)。
- n の k 乗が 2 の b 乗に等分されない場合は、k を k-1 に設定します。
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)。
アクセス制御点
アルゴリズム | アクセス制御点 |
---|---|
AESVFPE | Symmetric Key Encipher/Decipher - Encrypted AES keys |
TDESVFPE | Symmetric Key Encipher/Decipher - Encrypted DES keys |
必須ハードウェア
下表に、各サーバー・タイプに必要な暗号化ハードウェアを示し、この呼び出し可能サービスの制約事項について説明します。
サーバー | 必須暗号化ハードウェア | 制約事項 |
---|---|---|
IBM eServer zSeries |
CP Assist for Cryptographic Functions | 暗号化鍵はサポートされていません。 |
IBM System z9 EC |
CP Assist for Cryptographic Functions | 暗号化鍵はサポートされていません。 |
IBM System z10 EC |
CP Assist for Cryptographic Functions Crypto Express3 コプロセッサー |
暗号化鍵には、2009 年 11 月以降のライセンス内部コード (LIC) を持つ CEX3C が必要です。 |
IBM zEnterprise 196 |
CP Assist for Cryptographic Functions Crypto Express3 コプロセッサー |
暗号化鍵には、2009 年 11 月以降のライセンス内部コード (LIC) を持つ CEX3C が必要です。 |
IBM zEnterprise EC12 |
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.