【问题标题】:Read EMV data from Mastercard/VISA Debit/Credit Card [closed]从万事达卡/VISA借记卡/信用卡读取EMV数据[关闭]
【发布时间】:2019-10-09 07:57:21
【问题描述】:

我正在尝试构建一个应用程序来读取/编码卡上的数据,诸如 PAN、到期、客户名称、PIN 等信息,到目前为止,我可以弄清楚我需要发送 APDU 命令来从卡中读取数据,但是那里似乎没有关于哪些命令用于什么目的以及以什么特定顺序使用的明确文档,我无法从 Mastercard/VISA 中找到规范。有没有可以参考的文档?

谢谢, 空

【问题讨论】:

  • 不知道你为什么这么说?我已经提供了我的研究和我想要实现的目标。能不能说的具体点。
  • 欢迎来到 StackOverflow。感谢您花时间分享您的问题。但是您寻求帮助的目的不是用某些代码解决编程、算法或模式问题。为了帮助您改进您的要求,请阅读右上角的 How do I ask a good question我避免提出的问题
  • @约翰。已更新问题。
  • 你能解锁智能卡吗?卡解锁后,您可以使用 Windows 资源管理器读取数据吗?
  • 我可以使用 APDU 选择应用程序,但不确定要发出什么命令来获取 PAN。

标签: c# smartcard emv


【解决方案1】:

扩展另一个答案:

  1. 选择 PSE:
T-->C - 00A404000E315041592E5359532E444446303100   # select PSE
T<--C - response with FCI
T-->C - 00B2010C00
T<--C - reponse with record from selected file, read records starting from 1 until receive 6A83 (optional step in your case)
  1. 选择应用程序 DF 并在步骤 1) 中收到 AID:
T-->C - 00A4040007A000000003101000   # as example, Visa AID
T<--C - response with application DF FCI
  1. 获取处理选项 - 初始化事务:
T-->C - 80A8000002830000    # check if PDOL presents on card, if not, only 8300 should be added to DATA filed of APDU
T<--C - 771282023C00940C0802020010010300180102019000  # just example reswponse, it will differ on different cards

上面 GET PROCESSING OPTIONS 的响应是 TLV 编码的:

77 12 - response templait, containing response data
    82 02 3C00 - AUC
    94 0C 080202001001030018010201 - AFL
    9000 - SW (Status Word), response ofapplication, telling you, that no errors occured

注意,对 GET PROCESSING OPTIONS 的响应可能会以80 模板返回,在这种情况下,您必须自己解析:

80 0E - response templait, containing response data
    3C00 - AUC (always 2 bytes long)
    080202001001030018010201 - AFL
    9000 - SW (Status Word), response ofapplication, telling you, that no errors

你对 AFL 很感兴趣,它指出你从哪里读取数据(文件和记录号):

94 0C 
    08020200
        08 - SFI (Short File Identifier)
        02 - first record in file
        02 - last record in file
        00 - no of records to be added to Static Data Authentication
    10010300
        10 - SFI
        01 - first record in file
        03 - last record in file (respectively, 3 records to be read - 01, 02, 03)
        00 - no of records to be added to Static Data Authentication
    18010201
        18 - SFI
        01 - first record in file
        03 - last record of file
        01 - count of records from first record to be used for Static Data Authentication (01 record must be used)

SFI编码如下:

08 = 0000 1000 - first 5 bits are real SFI, it equals to 01, last 3 bits are always set to 0
  1. READ APPLICATION DATA - 用于精确的 READ APPLICATION DATA 命令编码检查 3rd EMV 书:
T-->C - 00B2020C00   # SFI = 01, record = 02
T<--C - response with record
T-->C - 00B2021400   # SFI = 02, record = 01
T<--C - response with record
T-->C - 00B2031400   # SFI = 02, record = 02
T<--C - response with record
etc until you process last AFL record...

PAN、到期、生效日期、track 2 等效数据等...通常位于设置为用于 AFL 中的 Sighed Data Authentication 的记录中。

以上示例适用于 T=1 协议。如果卡运行 T=0 协议,响应每个假设 R-APDU(响应 APDU)包含数据字段的 APDU,卡将返回准备读取的字节数,您应该发出 GET RESPONSE 命令,该命令在 Book 1 中描述EMV 规范。

希望对你有帮助。

【讨论】:

  • 我正在尝试00A404000E315041592E5359532E444446303100,我得到6A82,意思是“未找到”。 1PAY.SYS.DDF012PAY.SYS.DDF01 都有这个问题。
【解决方案2】:

您必须查看 EMV ICC 卡规格以了解如何从 ICC 读取数据,规格可免费下载。规范分为 4 个部分(4 本书)。您对阅读应用程序的第一和第三本书感兴趣。 APDU 读取应用数据的顺序如下:

1) SELECT PSE(支付系统环境文件),它包含安装在智能卡上的应用程序 DF 列表。 DF 由 AID(应用程序 ID)命名,如果需要,您将使用它来创建可用应用程序列表(候选列表)以供选择,或者只是找到具有最少应用程序优先级指标的 AID(查看 EMV 手册 1 以了解更多信息)。这是可选步骤,您可以从步骤 2) 开始,尝试同时选择 Visa 和 MasterCard AID,以检查它们中的哪一个在 ICC 上可用。

2) 从您在步骤 1) 中获得的列表中选择您要使用正确 AID 运行的应用程序。 Visa和MasterCard的AID:

A0000000041010 - MasterCard
A0000000031010 - Visa

它将返回应用程序文件的 FCI(文件控制信息)并在 ICC 本身上选择应用程序(查看 EMV Book 1 了解更多信息)。

3) 获取处理选项 - 在 ICC 上启动事务。此 APDU 递增 ATC(应用程序事务计数器)并返回 AUC(应用程序使用控制)和 AFL(应用程序文件定位器),它们必须用于读取您需要的数据(有关信息,请参阅 EMV Book 3)。

4) 读取应用程序数据 - 使用 3) 中返回的 AFL,您可以读取应用程序数据。 AFL 由几个部分构成:包含有关文件的信息(SFI - 短文件标识符)、第一条记录号、最后一条记录号和签名数据身份验证中使用的记录数:

1st byte - SFI
2nd byte - First record ID
3rd byte - Last record ID
4th byte - Count of records in file to be used in Signing Data Authentication

它包含每个文件的 4 字节长信息,其中包含在事务期间要读取的记录。只需运行 AFL 并从每个 SFI 读取记录,从第一个记录到最后一个记录,仅此而已(有关更多信息,请参阅第 3 册)。

您将无法从卡中读取 PIN 码,PIN 码在记录中是个性化的,无法从外部读取。 ICC 仅在内部使用 VERIFY 命令使用 PIN,如果 PIN 错误,ICC 只返回 PIN 验证结果和 PIN 尝试计数器。

EMV Book 1 还描述了 2 种使用的数据传输协议,T=0 和 T=1。要使用 ICC,必须了解这些协议之间的差异。

以上每个步骤都从 APDU 名称开始,以便您更轻松地在 EMV 书籍 1 和 3 中查找信息。

将数据编码到不同的卡 - 这是完全不同的故事。您应该检查 EMV CPS(通用个性化规范)和 GlobalPlatorm 规范。个性化过程要复杂得多。

【讨论】:

  • 谢谢@Juris。虽然我现在想通了,但这就是我一直在寻找的,用于提取数据的 APDU 序列。感谢您的帮助。
猜你喜欢
  • 2012-03-03
  • 2010-12-17
  • 2011-12-02
  • 2020-04-11
  • 1970-01-01
  • 2017-10-21
  • 2019-11-08
  • 2011-09-24
  • 2015-01-26
相关资源
最近更新 更多