繁体   English   中英

使用PPSE而不是PSE读取EMV卡

[英]reading EMV card using PPSE and not PSE

我正试图从非接触式Visa Paywave卡上读取数据。

对于Paywave,我必须使用PPSE(2PAY.SYS.DDF01)而不是PSE(1PAY.SYS.DDF01)提交SELECT。

EMV第1册,第11.3.4节,表43仅描述了如何使用PSE解释成功SELECT命令的响应。 有没有人知道或者可以引用我一个来源,它显示如何使用PPSE处理从成功的SELECT命令返回的数据?

这是我的请求APDU:

00A404000e325041592e5359532e444446303100

这是回复:

6F2F840E325041592E5359532E4444463031A51DBF0C1A61184F07A0000000031010500A564953412044454249548701019000

我理解标签84 ,标签85 ,从响应中标记BF0C 根据读取PSE的示例,我应该能够在成功响应之后发送GET PROCESSION OPTIONS(获取AIP和AFL)PDOL = null,如下所示: 80A80000830000

但请求80A80000830000返回错误代码6985 - 不允许命令; 使用条件不满意。

我还尝试通过遍历每个SFI(0-30)和每个SFI的每个记录(0-16)成功选择PPSE来读取所有文件。 是的,我也进行了3位移位,并使用0x4对SFI进行按位或运算。 但我没有数据。

我被卡住了,任何帮助我从我的Paywave卡获取一些信息的帮助将不胜感激!

你似乎把流量混淆了一点,你想:

  • 发送1PAY或2PAY,对我测试的所有卡片实际上并不重要。 这将返回卡上可用的AID列表。 或者你可以直接选择一个AID,如果你知道它在那里,但好的做法是先检查。

  • 获取响应1PAY / 2PAY返回的AID列表,在PayWave的情况下,如果您发送2PAY,这可能是A0000000031010但如果您发送1PAY可能会获得更多。

  • 选择一个发回的AID(或者您已经知道的AID)。

  • 然后遍历SFI并记录发送读取记录命令以获取数据。

您不必在发送“读取记录”命令之前发送“获取处理选项”,即使现在这是正常的事务流程。

我认为您所寻找的信息可从此VISA网站获取 但前提是您是VISA的注册和/或许可合作伙伴。

编辑:在BF0C下查看生成的TLV结构:

tag=0xBF0C, length=0x1A
    tag=0x61, length=0x18
        tag=0x4F, length=0x07, value=0xA0000000031010 // looks like an AID to me
        tag=0x50, length=0x0A, value="VISA DEBIT"
        tag=0x87, length=0x01, value=0x01

我猜你需要在获得处理选项之前首先选择A0000000031010

我正在选择应用程序2PAY.SYS.DDF01。 什么时候我应该选择AID = 0xA0000000031010。 看起来应用程序2PAY.SYS.DDF01下没有记录。

但申请表0xA0000000031010下有1条记录。 我拿到这个应用程序后,我执行了READ RECORD,第一条记录给了我PAN和我想要的所有信用卡信息。

谢谢大家的欢呼声。

如果您对MasterCard感兴趣,可以使用triangle.io的API来执行此操作。 它是免费的,为您阅读MasterCard和Visa非接触式卡,这是您想要的。

请注意,直接读取卡上的所有文件,虽然它会为您提供所需的数据,但并不是真正遵循EMV数据流。 选择应用程序后,您应该执行“获取处理选项”,然后构建PDOL和剩下的魔法。

http://www.triangle.io

免责声明:我为triangle.io工作

2PAY.SYS.DDF01用于非接触式(例如NFC)卡,而1PAY.SYS.DDF01用于接触卡。

  1. 成功(SW1 SW2 = 90 00)读取PSE后,您应该只搜索SFI(标签88),它是返回的FCI模板中的必填字段。

  2. 使用SFI作为起始索引,您必须从起始索引开始读取记录,直到获得6A83(RECORD_NOT_FOUND)。 例如,如果您的SFI为1,您将使用record_number = 1执行readRecord。 那可能会成功。 然后你将record_number增加到2并再次执行readRecord。 增加到3 ....重复它直到你得到6A83作为你的状态。

  3. 读取的记录将是ADF(至少为1)。 然后,您必须将读取的ADF名称与终端支持以及ASI(应用程序选择指示符)进行比较。 最后,您将获得可能的ADF列表(候选列表)

所有上述步骤(1-3)都记录在EMV规范的第12.3.2章Book1 v4.3中。

你必须做出最后的选择(第12.4章书1)

阅读规范书1章12.3 - 12.4了解所有详细步骤。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM