7

我使用泰雷兹 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 => 8424000210pinBlock => B3E1229A502C8926MAC => 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 块?

4

2 回答 2

4

回答您的问题,M6 不是您应该调用的脚本生成。在与接受设备或其他主机通信时,它纯粹是为了消息完整性。这就是为什么甚至没有选择派生卡所需的密钥的原因。

对于 EMV 卡,有单独的命令集用于验证 ARQC、生成 ARPC 以及生成发行者脚本。

对于发行者脚本生成目的,请查看KY命令,您应在其中提供用于完整性和机密性的主密钥以及会话密钥派生所需的其他参数(包括 PAN、PSN、ATC 等)。PIN 更改命令有一种特定模式,其中 PINblock 在 ZPK 或 TPK 下提供。

您应该准确检查您为卡设置的安全参数,因为有不同的算法可用于派生会话密钥(验证您的卡应用程序设置是什么)。卡也可能支持不同的 MAC 长度,您也应该注意它。

于 2019-09-06T17:40:17.753 回答
2

我正在解决同样的问题。我可能是错的,但与其他人交谈时,我被告知 KU 是用于 CVN10 的。现在,我还被告知只使用 KU 命令,因为它可以完成所有需要的操作。这意味着它将使用存储在芯片上的密码转换从 ATM 进入的新密码块。我唯一看到的是您使用的目标密码块是 35,即 Europay > MC Pay now,但我认为您必须使用 34,这是离线清除密码的默认值。

于 2019-10-20T14:43:07.377 回答