2

我正在使用 MasterCard 信用卡,我对执行 CDA 身份验证需要采取的确切步骤有疑问。

如果我正确理解了程序,我应该先发送GENERATE AC命令,然后发送EXTERNAL AUTHENTICATE

我的GENERATE AC命令看起来像:

80 AE 40 00 42 00 00 00 00 01 00 00 00 00 00 00 00 00 00 00 01 91 00 00 00 00 00 00 00 00 00 00 00 00 01 91 01 01 01 01 01 01 01 01 02 03 04 12 04 12 01 01 01 01 02 01 02 01 02 02 02 03 03 03 04 05 05 05 05 05 07 07 01 01 01 01 01 01 02 12 042 12 042 12 042 12 042 12 042 12 042 12 04 2 33 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00

我从卡中得到的响应(RESPONSE)如下所示:

77 29

9F 27 01 80

9F 36 02 00 5C

9F 26 08 AE 7D 66 E4 50 15 D5 A4(应用密码)

9F 10 12 02 10 A0 00 00 2A 08 00 01 02 00 00 00 00 00 00 00 FF

90 00

在下一步中,我将使用以下命令触发“EXTERNAL AUTHENTICATE”:

00 82 00 00 AE 7D 66 E4 50 15 D5 A4 02 10 A0 00 00 2A 08 00

之后我得到的响应是一个 2 字节数组[109, 0],即6D。这是否意味着我做错了什么?

任何意见,将不胜感激。

4

5 回答 5

2

在第一个生成 AC命令中,您发送了字节 P1 = "40" 试图完成与TC密码的交易。但该卡决定强制您使用ARQC密码上网。在卡回复标签 0x9F27 中指向密码类型和标签 0x9F26 中的 ARQC 密码值。

- TLVs:  # EMV, Tag + Length + Value (TLV) series
 - x77:  # EMV, Template, Response Message Format 2
    tag: "77"
    len: "29" #   // 41
  - val:  # Template, Response Message Format 2.
   - x9F27:  # EMV, Cryptogram Information Data (CID)
      tag: "9F27"
      len: "01" #   // 1
      val: "80" # Cryptogram Information Data (CID).
      # 10______ - bits 8-7, ARQC
      # _____000 - bits 3-1 (Reason/Advice/Referral Code), No information given
   - x9F36:  # EMV, Application Transaction Counter (ATC)
      tag: "9F36"
      len: "02" #   // 2
      val: "005C" # Application Transaction Counter (ATC).  // 92
   - x9F26:  # EMV, Cryptogram, Application
      tag: "9F26"
      len: "08" #   // 8
      val: "AE7D66E45015D5A4" # Cryptogram, Application.
   - x9F10:  # EMV, Issuer Application Data (IAD)
      tag: "9F10"
      len: "12" #   // 18
      val: "0210A000002A0800010200000000000000FF" # Issuer Application Data (IAD).

您尝试在不使用正确的颁发者身份验证数据(标记 0x91)的情况下执行外部身份验证。在现实世界中,您的终端应该从授权主机使其在线。在测试环境中,你可以自己计算这个 Tag 值(如果你知道算法和一些卡片数据, ARPC计算所需的密钥)。此外,如前所述,您忘记在 APDU 命令中放置Lc字节和长度。

可能是无法进行在线 ARQC 密码验证的情况(支持离线的终端、链接断开等)。在这种情况下,您的终端应执行第二次生成 AC,再次询问使用 TC 密码完成交易并使用特定于离线交易完成的授权响应代码(标签 0x8A)。

还要记住,EMV 终端内核和您的应用程序可以支持4 种CDA 模式。

请遵循EMVCo 网站上的 EMV 规范中定义的交易流程。

于 2016-03-13T14:53:17.110 回答
1

您要求卡首先生成一个 TC。Card 进行风险管理,并通过 ARQC 返回您。ARQC 必须由发行人验证,因此您将带有所有必要数据的 ARQC 发送给发行人。如果终端能够将数据发送到主机 { Issuer 验证 ARQC 并生成 ARPC - Tag 91(ARC 用于生成 - Tag 8A)。ARPC 被发送回终端。终端现在要做 External Authenticate( 91[len][data]81[len][date] ) 这应该给你 9000 或 6300 如果它是 9000,你要求卡在 Second Gen AC 中生成一个 TC
} else 如果终端无法上线且 TAC 和 IAC 默认允许下线,{ you ask the card to generate a TC in Second Gen AC } else if the terminal 无法上线且 TAC 和 IAC Defaults 不允许允许离线,{您要求卡在 Second Gen AC 中生成 AAC} 交易结束。

希望这可以澄清

于 2016-03-25T15:20:01.060 回答
1

MasterCard 不支持 USER 阶段的“EXTERNAL AUTHENTICATE”命令。这就是卡响应 6D00(“指令代码不支持或无效”)的原因。您应该使用颁发者身份验证数据执行第二次生成 AC。

于 2016-03-28T15:02:34.837 回答
0

EMV 标准在第 3 部分中对此进行了介绍: http ://emvco.com/specifications.aspx?id=223

如果 ICC 响应 ARQC,则终端尝试上线,向发行方发送授权请求消息。授权请求消息中包含用于在线卡认证的 ARQC。

因此,您拥有的卡可能被配置为仅用于“在线”交易,或者测试交易金额超过卡上设置的最低限额。

检查卡返回的 CVM 列表(我认为标签 8E 在 2 1 记录中)。 http://www.openscdp.org/scripts/tutorial/emv/cardholderverification.html

这应该告诉您下限是什么以及卡使用的 CVM 模式。

另外 - 尝试一些不同的测试卡 - 我发现在测试我的代码时尝试多个不同的卡很方便。

于 2016-03-19T04:17:24.773 回答
0

6D00 表示“指令代码不支持或无效”

77 29 9F 27 01 80 当密码信息日期为 80 时,表示第 4 位开启。正确的 ?这意味着它不是 ARQC,而是“需要建议”。可能是这个原因?

如果您可以按组件拆分消息,而不是发布原始十六进制转储,那会更好。

于 2016-03-11T15:52:26.667 回答