PBOC/EMV 部分技术要点摘录

来源:互联网 发布:远程网络教育要考试吗 编辑:程序博客网 时间:2024/05/14 19:26

这两天调NFC,查阅了不少IC卡访问的资料,为了整理总结,以及以后查阅,把一些看到的要点摘录下来.

1. 一些缩略语

IFD InterfaceDevice 接口设备,即读卡器

APDU   应用协议数据单元(ApplicationProtocol Data Unit

R-APDU  响应APDU(Response APDU)

TPDU   传输协议数据单元(Transport Protocol Data Unit

ADF    应用定义文件(ApplicationDefinition File

ASI   应用选择指示器(Application Selection Indicator

ATR   复位应答(Answer to Reset

PSE   支付系统环境(Payment System Environment

RID  注册的应用提供商标识(Registered Application Provider Identifier)

SFI  短文件标识符(Short File Identifier)

FCI  文件控制信息(File Control Information)


2. 应用标识

标识应用首先是PSE,在PBOC下面,应该就是1PAY.SYS.DDF01了

下面就是应用标识符AID,由RID/PIX定义,RID为厂商标识,PIX则由厂家定义其应用.

然后还有应用标签,EMV规定为必备数据,用于应用选择,与AID相关的便于记忆的数据 此处为PBOC Credit

最后还有应用首选名称.

选择应用,首先是选择PSE,然后通过读取RECORD,获得AID列表.这之后可以进一步选择要操作的应用,通过AID选择.


对于指令的SW12,有以下一些数值:

    public static final short SW_NO_ERROR = (short) 0x9000;
    public static final short SW_BYTES_REMAINING_00 = 0x6100;
    public static final short SW_WRONG_LENGTH = 0x6700;
    public static final short SW_SECURITY_STATUS_NOT_SATISFIED = 0x6982;
    public static final short SW_FILE_INVALID = 0x6983;
    public static final short SW_DATA_INVALID = 0x6984;
    public static final short SW_CONDITIONS_NOT_SATISFIED = 0x6985;
    public static final short SW_COMMAND_NOT_ALLOWED = 0x6986;
    public static final short SW_APPLET_SELECT_FAILED = 0x6999;
    public static final short SW_WRONG_DATA = 0x6A80;
    public static final short SW_FUNC_NOT_SUPPORTED = 0x6A81;
    public static final short SW_FILE_NOT_FOUND = 0x6A82;
    public static final short SW_RECORD_NOT_FOUND = 0x6A83;
    public static final short SW_INCORRECT_P1P2 = 0x6A86;
    public static final short SW_WRONG_P1P2 = 0x6B00;
    public static final short SW_CORRECT_LENGTH_00 = 0x6C00;
    public static final short SW_INS_NOT_SUPPORTED = 0x6D00;
    public static final short SW_CLA_NOT_SUPPORTED = 0x6E00;
    public static final short SW_UNKNOWN = 0x6F00;
    public static final short SW_FILE_FULL = 0x6A84;


3. ADF,DDF,MF, DF和EF

MF, DF和EF这三个其实是iso7816里的概念. 是7816里规定的卡的文件结构. 这种文件结构是一种树形的结构. MF 可以理解为根目录,DF是目录,EF当成是目录里的文件. 所以MF其是也是一种DF,只不过是最上层的DF.

而ADF,DDF和AEF是PBOC/EMV里的概念. PBOC/EMV里定义的IC卡文件结构是符合ISO7816标准的. ADF和DDF其实是DF的两种映射,而AEF是EF的映射. 程序访问时,访问的是ADF,DDF和AEF, 而不是DF和EF. 这种机制非常像操作系统的地址访问, 我们的程序不能访问系统的物理地址,而只能访问由这个物理地址映射的虚拟地址,而同一个物理地址可以是映射到不同的虚拟地址. 所以我们可以把DF, EF 理解成是物理文件结构,而ADF,AEF理解成虚拟的可供程序访问的文件结构.

ADF与DDF有什么区别呢? 简单来说,ADF就已经可以标识一个或一组应用(为什么有一组应用,因为有部分AID匹配, 具体可参考PBOC/EMV文档), 因为它就是应用的入口文件. 而DDF是个目录入口, 它下面有ADF,也有可能还是DDF, 当然也可能什么都没有, 总之它是一个目录. ADF用ADF名来标识应用, ADF名也就是AID. 一个AID代表一个应用,比如电子钱包应用,借记应用,贷记应用等等. AID 是由ISO这种组织来分配. 它分为两个部分, 前面是五个字节的RID, 这个用来唯一标识应用提供商, 后面最长是11字节的PIX., 用来标识某个专有应用, 它由应用提供商定义. 举例来说, ISO可能分给mastercard公司一个RID, 就叫A000000002(5个字节)吧, 然后master-

card 公司再用PIX定义一些应用,比如电子钱包, 假设它是0001吧. 我们如果看到一个AID是A0000000020010, 就知道这是master-card 定义的电子钱包应用.事实上一个符合EMV/PBOC L2标准的终端程序,就是以这些AID为中心在运行,简单说就是找到一个应用,然后处理(处理的过程可就复杂了).


4. TAG顺序

[70] [2d] 
[61] [2b] 
[4f] [07] [a0] [00] [00] [03] [33] [01] [01] 
[50] [0b] [50] [42] [4f] [43] [20] [43] [72] [65] [64] [69] [74] 
[87] [01] [01] 
[9f] [12] [0f] [43] [41] [52] [44] [20] [49] [4d] [41] [47] [45] [20] [30] [30] [30] [31] 
[90] [00] SELECT GET END dd

格式中的TAG顺序可以不是固定的. 比如说,上述数据中,tag ‘4F’可以出现在’50’之后等等.


0 0