我使用泰雷兹 Payshield 9000 HSM。到目前为止,所有命令都有效,一切都达到了我想要的。
现在的问题是在尝试更改 ATM 中的密码时。检查万事达卡文档时,生成了密码更改脚本,格式看起来没问题。
我们的 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'
,messagelength = '0030'
,message = '8424000210345755BFDC4F2903A392B3E1229A502C892680'
(消息像上面的屏幕截图一样连接:命令头 + ApplicationtransactionCounter + ARQC + PIN Block)(这里的消息数据来自屏幕截图中的示例)
因此,当执行这两个命令时,我会收到我需要的 16HEX 符号 MAC。所以脚本是这样准备的: 8424000210 B3E1229A502C8926 422A8FF11056ACD4
:header => 8424000210
和pinBlock => B3E1229A502C8926
MAC => 422A8FF11056ACD4
当我去 ATM 并更改密码时,我的密码永远不会改变,我会收到反转消息。
任何人都可以解释这些标志是什么,我不确定应该使用哪些标志(命令 M6):
所以问题是:
- HSM 命令 M6 是否正确命令为 PIN 更改/解锁脚本生成 MAC?它需要 TAK 密钥,而 MasterCard 文档明确指出应该使用 SMI 密钥完成。
- 尝试检索 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
参数,使用的最后 14 个 PAN 数字 + 序列号的最后两个数字。对于pan2
参数,仅使用最后 12 个 PAN 数字,不包括校验位。
我是否使用正确的偏移标志将明文数据中的 PIN 块替换为新的加密 pin 块?