我正在尝试构建一个应用程序来读取/编码卡上的数据,PAN,有效期,客户名称,PIN等信息,到目前为止,我可以弄清楚我需要发送APDU命令来从卡中读取数据,但是关于什么命令用于什么目的以及以什么特定顺序使用,似乎没有明确的文档,我无法从Mastercard / VISA中找到规范。有一些文档可以参考吗?
谢谢, 空
答案 0 :(得分:0)
您必须检查EMV ICC卡规格以了解如何从ICC读取数据,可以免费下载规格。规范分为4部分(4本书)。您对第一书和第三书感兴趣,以阅读应用程序。 APDU读取应用程序数据的顺序如下:
1)SELECT PSE(付款系统环境文件),它包含智能卡上安装的应用程序DF的列表。 DF由AID(应用程序ID)命名,如果需要,您将使用它创建可用的应用程序列表(候选列表)以供选择,或者仅查找具有最少应用程序优先级指示符的AID(请参阅EMV书1)更多信息)。这是可选步骤,您可以从步骤2)开始,然后尝试同时选择Visa和MasterCard AID,以检查ICC上可用的AID。
2)您要使用在步骤1)中获得的列表中的正确AID运行的SELECT应用程序。 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还描述了2种使用的数据传输协议,T = 0和T = 1。要与ICC合作,必须了解这些协议之间的区别。
上面的每个步骤都从APDU名称开始,使您可以更轻松地在EMV书籍1和3中查找信息。
要将数据编码到不同的卡-这是完全不同的故事。您应该检查EMV CPS(通用个性化规范)和GlobalPlatorm规范。个性化过程要复杂得多。
答案 1 :(得分:0)
以上扩展答案:
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)
2)在步骤1)中收到具有AID的SELECT应用程序DF:
T-->C - 00A4040007A000000003101000 # as example, Visa AID
T<--C - response with application DF FCI
3)获取处理选项-初始化交易:
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
4)读取应用数据-精确读取应用数据命令编码检查第三版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,卡将返回准备读取的字节数,您应发出GET RESPONSE命令,如本书第1册所述。 EMV规范。
希望有帮助。