Thales Payshield 9000 HSM を使用しています。これまでのところ、すべてのコマンドが機能し、私が望んでいたことがすべて達成されました。
問題は、ATM でピンを変更しようとしたときです。MasterCardのドキュメントを確認すると、ピン変更スクリプトが生成され、フォーマットはOKのようです。
PIN 変更スクリプトは次のようになります。86158424000210PPPPPPPPPPPPPPPPMMMMMMMMMMMMMMMM
ここで、16 個の P 文字は DE125 で送信される PIN ブロックであり、16 個の M 文字は MAC を表します。(私はそれらをマスクしましたが、以下は例のデータを使用します)
このスクリプトを使用すると、私の側からはすべて問題ないように見えます。今、問題はMAC生成だと思います。
MAC を生成するには、次の HSM コマンドを使用します。
- HA (TAK を生成します (ランダムなキーです。このコマンドを呼び出すたびに (PIN 変更操作ごとに)、キーは異なります)) - 入力は
key = PVK key (U+32Hex symbols under LMK)
,delimiter = ';'
,keySchemeTmk = 'U'
,keySchemeLmk = 'U'
です。次に、TAKキーを受け取ります - M6 (MAC の生成) - 入力:
modeFlag = 0
,inputFormatFlag = 2
,macSize = 1
,macAlgorithm = 3
,paddingMethod = 0
,keyType = '003'
,key = 'Tak key from HA command'
, (メッセージは上のスクリーンショットのように連結されます: コマンド ヘッダー + ApplicationtransactionCounter + ARQC + PIN ブロック) (メッセージ データはスクリーンショットの例からのものですmessagelength = '0030'
)message = '8424000210345755BFDC4F2903A392B3E1229A502C892680'
したがって、これらの 2 つのコマンドが実行されると、正確に必要な 16HEX シンボル MAC を受け取ります。したがって、スクリプトは次のように準備されます: 8424000210 B3E1229A502C8926 422A8FF11056ACD4
: header => 8424000210
、pinBlock => B3E1229A502C8926
およびMAC => 422A8FF11056ACD4
ATM に行って PIN を変更すると、PIN が変更されず、取り消しメッセージが表示されます。
また、誰でもこれらのフラグが何であるかを説明できますが、どのフラグを使用すればよいかわかりません (コマンド M6):
質問は次のとおりです。
- HSM コマンド M6 は、PIN 変更/ブロック解除スクリプト用の MAC を生成する正しいコマンドですか? MasterCardのドキュメントにはSMIキーで行う必要があると明確に記載されていますが、TAKキーが必要です。
- MAC ハッシュを取得しようとすると、M6 コマンドの構成が正しくありませんか?
更新しました
なんとか KU コマンドが機能し、応答が返ってきましたが、PIN の変更自体は正常に完了していません。以下に、KU コマンドに対して生成する要求を示します。
{
"mode_flag": "3",
"scheme_id": "1",
"mk_smi": "U25A22A6553A7F68ABACBD1E04BBD8889",
"pan": "7891234567891200",
"integrity_session_data": "55BFDC4F2903A392",
"plaintext_message_data_length": "0018",
"plaintext_message": "8424000210345755BFDC4F2903A392B3E1229A502C892680",
"delimiter": ";",
"confidentiality_session_data": "55BFDC4F2903A392",
"offset": "000F",
"cipher_text_message_data_length": "0008",
"cipher_text_message_data": "B3E1229A502C8926",
"delimiter2": ";",
"source_pin_encryption_key_type": "0",
"source_pin_encryption_key": "UBAAAA3488AA6AA564AAC8AA3AAC1AAA2",
"source_pin_block_format_code": "01",
"destination_pin_block_format_code": "35",
"pan2": "891234567891"
}
キーと機密データはマスクされるため、ここでは PAN が使用されます:5678912345678912
と シーケンス番号000
. 最初のpan
パラメータには、最後の PAN 14 桁 + シーケンス番号の最後の 2 桁が使用されます。パラメータにはpan2
、最後の 12 桁の PAN のみが使用され、チェック ディジットは除外されます。
プレーンテキスト データの PIN ブロックを新しい暗号化ピン ブロックに置き換えるために、正しいオフセット フラグを使用していますか?