【问题标题】:reading EMV card using PPSE and not PSE使用 PPSE 而不是 PSE 读取 EMV 卡
【发布时间】:2013-02-10 03:51:06
【问题描述】:

我正在尝试从非接触式 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 的示例,我应该能够在此成功响应后发送带有 PDOL = null 的 GET PROCESSION OPTIONS(以获取 AIP 和 AFL),如下所示:80A80000830000

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

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

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

【问题讨论】:

  • 你指的是哪个版本的 EMV 书? (我想是 4.3...)您是否还注意到 EMVCo 提供了 EMV contactless specs
  • 是的,EMV 4.3。我什至没有注意到 EMVCo 的非接触式规格书。天哪,当所有人都在考虑编码时,这会是多么盲目。 :-) 感谢您指出那本书,我会阅读它并让您知道我做错了什么。

标签: nfc credit-card emv


【解决方案1】:

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

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

  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 章了解所有详细步骤。

【讨论】:

    【解决方案2】:

    你的流程似乎有点混乱,你想:

    • 发送 1PAY 或 2PAY,这实际上对我测试过的所有卡都没有关系。这将返回卡上可用的 AID 列表。或者,如果您知道 AID 存在,也可以直接选择它,但最好先检查一下。

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

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

    • 然后循环遍历发送读取记录命令的 SFI 和记录以获取数据。

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

    【讨论】:

    • 1PAY 不同于 2PAY。我有一个 PCSC 和一个 NFC 阅读器,如果我尝试使用我的 PCSC 选择 2PAY,我会返回一个 File not found 错误,如果我尝试使用 NFC 选择 1PAY,我会收到 File not found。 OP 说他通读了所有记录,但希望通过让处理选项知道要使用哪个 SFI 来正确地做到这一点。
    • 我知道它们是不同的,只是指出我测试过的所有 Visa 卡都可以发送,有时它们实际上会返回不同的信息。 OP说他阅读了所有记录并且没有得到任何信息,那是因为他没有选择Visa AID,他说他认为他可以在2PAY之后直接发送GPO这是不正确的,我的回答试图清除起来。
    • 我很高兴我找到了这个主题,因为我根本无法让我的 GPO 工作,最后找到了原因……现在开始认真阅读。
    【解决方案3】:
    【解决方案4】:

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

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

    http://www.triangle.io

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

    【讨论】:

      【解决方案5】:

      我正在选择应用程序 2PAY.SYS.DDF01。当我应该选择 AID = 0xA0000000031010 时。应用程序 2PAY.SYS.DDF01 下似乎没有记录。

      但应用程序 0xA0000000031010 下有 1 条记录。收到此应用程序后,我执行了 READ RECORD,第一条记录为我提供了 PAN 和我想要的所有信用卡信息。

      感谢大家的参与。

      【讨论】:

      • 查看我的答案以获得对此的解释,2PAY 将返回一个 AID 列表,它实际上不是 AID 本身,然后您需要选择返回的一个并从中读取记录.但是,您可以立即选择一个您知道的 AID,这就是您找到的 :)
      【解决方案6】:

      我认为您要查找的信息可从this VISA website 获得。但前提是您是 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,然后才能获得处理选项。

      【讨论】:

      • 你可能是对的。我昨天签证登记了,还在等待申请批准过程。谢谢!
      猜你喜欢
      • 2016-01-03
      • 2017-01-02
      • 1970-01-01
      • 2014-05-31
      • 2021-06-19
      • 1970-01-01
      • 2019-10-07
      • 2021-06-13
      • 1970-01-01
      相关资源
      最近更新 更多