C# 万事达卡上的CDA认证
我正在使用万事达信用卡,我对执行CDA身份验证需要采取的确切步骤有疑问 如果我正确理解了这个过程,我应该首先发送generateac命令,然后发送一个外部身份验证 我的生成AC命令如下所示: 80 AE 40 00 42 00 00 00 00 01 00 00 00 00 01 91 00 00 00 00 00 01 02 03 04 12 01 02 02 03 05 06 07 08 00 01 02 12 04 33 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 我从卡片上得到的反应如下: 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 A000 00 2A 08 00 01 02 00 00 FF 九万 在下一步中,我将使用以下命令触发“外部身份验证”: 00 82 00 00 AE 7D 66 E4 50 15 D5 A4 02 10 A0 00 00 2A 08 00 之后得到的响应是一个2字节数组[109,0],即6D。这是否意味着我做错了什么C# 万事达卡上的CDA认证,c#,emv,cda,C#,Emv,Cda,我正在使用万事达信用卡,我对执行CDA身份验证需要采取的确切步骤有疑问 如果我正确理解了这个过程,我应该首先发送generateac命令,然后发送一个外部身份验证 我的生成AC命令如下所示: 80 AE 40 00 42 00 00 00 00 01 00 00 00 00 01 91 00 00 00 00 00 01 02 03 04 12 01 02 02 03 05 06 07 08 00 01 02 12 04 33 00 00 00 00 00 00 00 00 00 00 00 0
任何建议都将不胜感激。6D00表示“指令代码不受支持或无效” 77 29 9F 27 01 80当密码信息日期为80时,表示第4位开启。对的这意味着它不是ARQC,而是“需要建议”。也许这就是原因 与其发布原始十六进制转储,不如将消息按组件拆分。在第一个生成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的情况下执行外部身份验证。在现实世界中,您的终端应该从授权主机将其联机。在测试环境中,如果您知道ARPC计算所需的算法和一些卡数据、密钥,您可以自己计算该标记值。另外,正如前面所注意到的,您忘了在APDU命令中放入长度为的Lc字节
当在线ARQC密码验证无法进行时,可能会出现以下情况:支持离线的终端、链路断开等。在这种情况下,您的终端应使用TC密码执行第二次生成AC请求,并使用授权响应代码标记0x8A完成离线交易
还要记住,EMV终端内核和您的应用程序可以支持4种CDA模式
请遵循EMV规范中定义的交易流程。EMV标准在第3部分中涵盖了这一点: 如果ICC响应ARQC,终端将尝试联机,并向发卡机构发送授权请求消息。授权请求消息中包括用于在线卡认证的ARQC 因此,您拥有的卡可能配置为仅“在线”交易,或者测试交易金额超过卡上设置的下限 检查CVM列表,我认为标签8E位于卡返回的2 1记录中。 这应该告诉你什么是最低限度,什么是CVM模式的卡使用
另外-尝试几个不同的测试卡-我发现在测试代码时尝试多个不同的卡很方便。您要求该卡首先生成TC。 该卡进行风险管理,并返回给您一份ARQC。 ARQC必须由发卡行验证,因此您将ARQC连同所有必要的数据发送给发卡行。 如果终端能够向主机发送数据 { 发卡机构验证ARQC并生成ARPC-标记91。ARC用于生成-标记8A。 ARPC被发送回终端。 终端现在要进行外部身份验证91[len][data]81[len][date] 这将为您提供9000或6300 如果是9000,则要求卡在第二代AC中生成TC } 否则,如果终端无法联机且TAC和IAC默认允许脱机, { 您要求卡在第二代AC中生成TC } 否则,如果终端无法联机且TAC和IAC默认不允许脱机, { 您要求卡在第二代AC中生成AAC } 交易结束
希望这能澄清MasterCard在用户阶段不支持“外部身份验证”命令。这就是为什么卡响应6D00“指令代码不受支持或无效”。您应该使用颁发者身份验证数据执行第二次生成AC 您是否在外部身份验证中遗漏了Lc?即使我在外部身份验证中添加了Lc,响应也是一样的。流程如下,所以我先发送生成AC,然后卡回复为ARQC。所以我需要发送第二个生成AC?不是外部身份验证?在这种情况下,授权响应代码标记0x8A是什么?