Gnt*_*vls 6 cryptography emv hsm visa mastercard
我使用Thales Payshield 9000 HSM。到目前为止,所有命令均已工作,并且一切都已实现我想要的。
现在的问题是尝试更改ATM的引脚时。检查万事达卡文件时,会生成针脚更改脚本,并且格式看起来可以。

我们的密码更改脚本如下所示:86158424000210PPPPPPPPPPPPPPPPMMMMMMMMMMMMMMMM其中16个P字母是DE125中发送的PIN块,而16 M个字母代表MAC。(我屏蔽了它们,但是下面将使用示例中的数据)
有了这个脚本,从我这边来看一切正常。现在我怀疑问题是MAC生成。
要生成MAC,我们使用以下HSM命令:
key = PVK key (U+32Hex symbols under LMK),delimiter = ';',keySchemeTmk = 'U',keySchemeLmk = 'U'; 然后收到TAK密钥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块)(消息数据这里是来自实施例中的屏幕截图)因此,当执行这两个命令时,我会收到我需要的16HEX符号MAC。所以脚本编写这样的:8424000210 B3E1229A502C8926 422A8FF11056ACD4:header => 8424000210,pinBlock => B3E1229A502C8926和MAC => 422A8FF11056ACD4
当我去ATM并进行密码更改时,我的密码永不更改,并且我收到撤消消息。
任何人都可以解释这些标志是什么,我不确定应该使用哪个标志(命令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 +序列号的最后两个数字。对于pan2参数,仅使用最后12个PAN数字,不包括校验数字。
我是否使用正确的Offset标志将明文数据中的PIN块替换为新的加密的PIN块?
小智 2
我正在解决同样的问题。我可能是错的,但与其他人交谈时,我被告知 KU 是用于 CVN10 的。现在,我还被告知只能使用 KU 命令,因为它可以完成所需的一切。这意味着它将使用存储在芯片上的密码密钥转换从 ATM 传入的新密码块。我唯一看到的是,您使用的目标密码块是 35,现在是 Europay > MC Pay,但我认为您必须使用 34,这是离线清除密码的默认值。