【问题标题】:MasterCard PIN change issuer script fails, Thales HSM used for MAC generation. EMVMasterCard PIN 更改发行者脚本失败,Thales HSM 用于 MAC 生成。 EMV
【发布时间】:2019-09-04 10:01:36
【问题描述】:

我使用的是泰雷兹 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',@987654328 @;然后收到TAK密钥
  • M6(生成 MAC) - 输入为:modeFlag = 0inputFormatFlag = 2macSize = 1macAlgorithm = 3paddingMethod = 0keyType = '003'key = 'Tak key from HA command'messagelength = '0030',@987654337(消息为像上面的屏幕截图一样连接:命令头 + ApplicationtransactionCounter + ARQC + PIN Block)(这里的消息数据来自屏幕截图中的示例)

所以,当执行这两个命令时,我收到了我需要的 16HEX 符号 MAC。所以脚本是这样准备的:8424000210 B3E1229A502C8926 422A8FF11056ACD4:header => 8424000210,pinBlock => 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 块?

【问题讨论】:

    标签: cryptography hsm emv mastercard


    【解决方案1】:

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

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

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

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

    【讨论】:

    • 感谢您的回答。星期一我一定会检查这个。我只知道万事达卡的 CVN 版本是 10,所以我想我应该使用 KU 命令。那是对的吗?根据 MC 文档,我的 HSM 的 MAC 应该是 8 个字节长
    • KY 代表 mChip 4.x,KU 代表 3.x,如果我没记错的话。 ARQC 验证是使用 KQ 命令完成的,并且成功。我实际上只为完整性尝试了 KU 和 KY 命令,使用 KY 我已经成功获得了一个 MAC,但它从未与我在代码中计算的那个匹配(这一定很好,因为我生成的 MAC 与它在截图在我的帖子中)。
    • 是的,如果您有 MC 专有会话密钥派生,KU 会这样做。 MAC 长度可能与卡应用配置有关,并且可能取决于卡供应商。您的情况可能有 8 个字节,但请注意,有些配置是 4 个字节,这并不奇怪,有时它在您可能发行的不同卡产品中只是不同的。当涉及 MAC 计算时,您的示例显示了一个会话密钥(已经派生)。对于 KU/KQ/KY,您提供 MASTER 密钥,以便 HSM 使用您提供的参数即时派生它们。在现实生活中你会使用 Master
    • 感谢您的见解,我现在尝试使用 KU,但我在处理文档方面遇到了困难。主机命令参考 v3.3 和 v3.4 在某种程度上彼此非常不同。旧文档缺少一些字段它们在新文档中,但是当从新文档创建请求时,请求数据与旧版本有很大不同。我怀疑 KU 命令的 3.4 文档有问题。无论如何,我正在尝试构建请求,但到目前为止没有成功:"error_code": "15", "error_message": "Invalid input data (invalid format, invalid characters, or not enough data provided)"
    • 您好,很抱歉稍后再回复,但我不在电脑前。该命令用于构建颁发者脚本,而不仅仅是 MACing。您可能不应该自己添加 MAC 或填充。此外,加密的 PIN 块将是计算的结果。它们都不应该作为输入提供。请记住,您需要按照 MC 的说明传递随机数(卡应用规范中有关于安全消息传递的随机数的章节)。作为主机命令参考版本,我无法提供帮助,因为我使用的是旧版本,但它将与您的固件版本相关联
    【解决方案2】:

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

    【讨论】:

    • 你是对的。我解决了这种情况,发现我使用了不正确的 PIN 块格式,我通过调查 MChip Advanced Issuer Guide 发现它并尝试自己生成 PIN 块。所以我看到我实际上必须使用 34 格式而不是 35。另一个问题是,我在 plainTextData 中传递 pinblock,这是不正确的。正确的 scripData 应该是 8424000210{ATC}{ARQC} 参数偏移量,您让重新加密的 pin 块放置在 scripData 的末尾,并且所有事情都开始朝着正确的方向发展 Pin Change 和 HSM
    • 很高兴知道这一点。既然它已经为你工作,也许你可以帮助我。所以你把进入 HSM 的数据作为明文数据总结为 8424000210 加上 ATC 加上 ARQC。但是到卡的实际脚本只有 8424000210+newPinBlock+MAC..这是一个正确的假设吗?
    • 是的,您对卡片的理解是正确的, 8424000210+newPinBlock+MAC 。 NewPinBlock 取自 HSM 响应,MAC 也取自响应。您也可以在创建纯文本数据时检查是否需要填充 80。如果不添加填充,偏移量应与纯文本数据长度相同
    • 感谢您的回复。最后一个问题。你怎么知道你是否需要填充?如果数据不完整,HSM 会拒绝 KU 请求吗?我正在使用的卡是 MC,但我看不到需要填充。不确定我是否遗漏了什么。
    • 我的卡有M芯片高级版。所以我检查了那个版本的文档,上面写着需要填充。但我现在不记得 HSM 是否自动添加填充。我会检查我是如何创建 plainTextData 的,并会告诉你
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-27
    • 2020-03-04
    • 2017-10-27
    相关资源
    最近更新 更多