从万事达卡/Visa借记卡/信用卡中读取EMV数据

3
我正在尝试构建一个应用程序,用于读取/编码卡上的数据,例如PAN、到期日、客户姓名、PIN等信息。到目前为止,我已经确定需要发送APDU命令来从卡中读取数据,但似乎没有明确的文档说明哪些命令用于什么目的及其特定顺序,我找不到Mastercard/VISA的规格说明。是否有可以参考的文档?谢谢!Null

不确定你为什么这样说?我已经提供了我所研究的内容和我想要实现的目标。你能更具体一些吗? - Null
1
欢迎来到StackOverflow。感谢您抽出时间分享您的问题。但是,您所请求的帮助并不是解决编程、算法或模式问题的代码。为了帮助您改进请求,请阅读右上方的*如何提出好问题*和我避免提问的问题 - user12031933
1
@John。问题已更新。 - Null
你能解锁智能卡吗?一旦卡片被解锁,你能使用Windows资源管理器读取数据吗? - jdweng
你需要先阅读EMV卡的具体文档,这个问题在这里问太笼统了。 - Maarten Bodewes
显示剩余2条评论
2个回答

5

扩展其他答案:

  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,其AID是在步骤1中接收到的:
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. 读取应用数据 - 要进行精确的读取应用数据命令编码检查,请参考第三部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、有效期、生效日期、等价于磁道2数据等通常位于被设置用于AFL签名数据认证的记录中。

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

希望有所帮助。


2
您需要查看EMV ICC卡规范以了解如何从ICC读取数据,规范可以免费下载。该规范分为4部分(4本书)。您需要阅读第1本和第3本书来读取应用程序。
读取应用程序数据的APDU顺序如下:
1) 选择PSE(支付系统环境文件),其中包含安装在智能卡上的应用程序DF列表。DF由AID(应用程序ID)命名,您将使用它创建可选择的应用程序列表(候选列表)进行选择,如果需要的话,或者只需查找具有最少应用程序优先级指示器的AID(请查阅EMV Book1 以获取更多信息)。这是可选步骤,您也可以直接从第2步开始,并尝试选择Visa和MasterCard AID,以查看它们中哪个在ICC上可用。
2) 使用您在步骤1中获得的正确AID选择要运行的应用程序。 Visa和MasterCard的AID如下:
A0000000041010 - MasterCard
A0000000031010 - Visa

它将返回应用文件的 FCI(文件控制信息),并使应用程序在 ICC 上被选择(请查看 EMV 书 1 获取更多信息)。

3)获取处理选项 - 在 ICC 上启动交易。此 APDU 将增加 ATC(应用事务计数器),并返回 AUC(应用使用控制)和 AFL(应用文件定位器),必须使用它们来读取所需的数据(请查看 EMV 书 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还描述了两种使用的数据传输协议:T = 0和T = 1。要与ICC一起工作,必须了解这些协议之间的区别。

上述每个步骤都从APDU名称开始,以便您更容易地在EMV Books 1和3中查找信息。

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


谢谢@Juris。虽然我现在已经弄明白了,但这正是我正在寻找的,一系列APDU以提取数据。感谢您的帮助。 - Null

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接