EMV/PBOC 简要说明以及主要流程

784 阅读10分钟

编写目的

加深知识点印象,工作时时常回顾(内容仍在完善中)

总述

EMV:国际IC卡标准组织EMVCo标准

PBOC :中国金融IC卡行业规范,与 EMV 规范保持兼容,遵循 EMV 接触式统一、非接触式开放

image.png

1. 应用选择

1.1 前提知识

1.1.1 流程目的

在卡片与终端交互开始时,由终端决定哪些应用是卡片和终端共同支持的,并获取出当前选择的应用的对应数据

1.1.2 关于 MF、DF、EF 以及相关衍生概念

卡片内部想象为文件系统,通过操作该文件系统进行各种交易。

ISO7816规范

  • MF:根目录,不能直接操作
  • DF:目录,不能直接操作
  • EF:目录中的文件,不能直接操作

PBOC规范

  • ADF:DF的映射,类似于虚拟地址,可直接操作,其中包含的文件都是 AEF,也称 AID
  • DDF:DF的映射,类似于虚拟地址,可直接操作,可能其中包含其他 DDF 或 ADF
  • AEF:EF的映射,类似于虚拟地址,可直接操作
1.1.3 PDOL

PDOL(Processing Options Data Object List),通过应用选择后获取到的数据,用于在 GPO(Get Processing Options)的命令中充当数据内容

1.1.4 SFI

SFI(Short File Identifier),可以理解为文件对应的引用

1.1.5 应用优先级指示器

控制是否由用户选择应用以及自动选择的优先级?

1.1.6 应用标签

用于用户查看?

1.2 数据来源

1.2.1 终端 AID 列表

通过 AID 下载交易从服务端获取

1.2.2 卡片 AID 列表

由卡片个人化(或许是 发卡行)写入

1.3 目录选择法

支持交易方式: 借贷记、电子现金和 QPBOC

1.3.1 借贷记和电子现金
  1. 终端选择 PSE (接触环境),支付环境系统,本质为 DDF
  2. PSE选择完毕后,PSE目录返回 SFI (Short File Identifier),tag88
  3. 通过 READ RECORD 循环读取卡片 AID 记录,(每次循环若返回 9000, 则都会获得一个卡片支持的 AID)直到返回 6A83
  4. 获取到卡片支持的全部 AID (tag 4F),以及几个重要参数:应用优先级指示器、应用标签等
  5. 通过终端以及卡片所支持的 AID 进行比较,最后得出 AID 支持列表
  6. 当有多个应用支持,则根据优先级指示器的 Bit8 判断是否需要持卡人选择应用
  7. 通过选择结果获取到对应 AID,根据其选择 ADF
  8. 通过 ADF 获取到 PDOL、Issuer(发卡行)代码等数据
  • 以上过程有任何异常(如未读到记录或数据非法等),皆视为目录选择法失败,转为 AID 选择法
1.3.2 QPBOC(Quick PBOC)
  1. 终端选择 PPSE (非接触环境),支付环境系统,本质为 DDF
  2. PPSE 选择完毕后,直接获取到所有 AID、应用优先级、应用指示器
  3. 通过应用优先级直接获取到最高优先级 AID,根据其选择 ADF
  4. 通过ADF 获取到 PDOL、Issuer(发卡行)代码等数据
1.3.3 借贷记、电子现金和 QPBOC 的区别
  • QPBOC 不支持持卡人选择应用
  • QPBOC 不支持 AID 选择法
  • QPBOC 的流程更简化

1.4 AID 选择法

支持交易方式: 借贷记、电子现金

1.4.1 AID 选择流程
  1. 终端将支持的所有 AID 通过 SELECT 发送给卡片,筛选出所有卡片支持的 AID
  2. 当有多个应用支持,则根据优先级指示器的 Bit8 判断是否需要持卡人选择应用
  3. 通过选择结果获取到对应 AID,根据其选择 ADF
  4. 通过 ADF 获取到 PDOL、Issuer(发卡行)代码等数据

1.5 流程总结

SELECT / READ RECORD -> AID -> PDOL

2. 应用初始化和读应用数据

2.1 前提知识

2.1.1 流程目的

主要为了获取 AFL 和 AIP 为之后的流程获取必要数据,若为 QPBOC 还会会获取其他数据,如:应用密文、交易计数器、发卡行应用数据、二磁道等

2.1.2 GPO

GPO(Get Processing Options)

2.1.3 AIP

AIP(Application Interchange Profile)

2.1.4 AFL

AFL(Application File Locator)

2.2 数据来源

2.2.1 PDOL

应用选择 后返回结果得到

若卡片不提供该数据,则 GPO 数据项直接填入 8300(见 L2 测试案例)并且后续无法做电子现金以及 QPBOC 交易

2.3 主要流程

2.3.1 借贷记和电子现金
  1. 将 PDOL 中获取的内容置入 GPO 指令的数据域传给卡片,卡片返回 AIP 和 AFL
  2. 返回结构: 80 + xx + AIP + AFL 或 77 + xx + AIP(tag 82)+ AFL (tag 94)
  3. 根据 AFL 循环读记录文件,并将记录文件中数据保存
2.3.2 QPBOC
  1. 将 PDOL 中获取的内容置入 GPO 指令的数据域传给卡片,卡片返回 AIP、AFL、应用密文、交易计数器、发卡行应用数据、二磁道数据等
  2. 返回结构:后续于脱机数据认证详细讨论

3. 脱机数据认证

3.1 前提知识

3.1.1 流程目的

用于校验脱机数据是否是由 Issuer 发行、公钥是否过期以及其他信息

3.1.2 脱机数据认证方式

SDA 、DDA、CDA(相对不常用)

3.1.3 采用何种方式进行脱机数据认证

取决于AIP 和 终端性能

3.1.4 四个贯通整个IC卡交易流程的要素

AIP(Application Interchange Profile):由GPO(Get Processing Options)返回,表明卡片特性

TC(Terminal Capabilities):终端性能,接触 9F33、QPBOC 9F66,终端根据交易特性设置默认值(可通过AID参数下发是否支持联机PIN来改变)

TVR(Terminal Verification Results):终端验证结果

TSI(Transaction Status Information):交易状态信息

  • 若IC卡交易失败,应用开发关注每一步的 TVR 以及 TSI,根据失败步骤定位原因

3.2 数据来源

3.2.1 AFL内容

AFL(Application File Locator):由 GPO(Get Processing Options)返回结果取到

  • Byte 1 :SFI(Short File Identifier)
  • Byte 2 :要读取的记录号的开始位置
  • Byte 3 :要读取的记录号的结束位置
  • Byte 4 :脱机数据认证的数据的连续记录个数

对于 SFI 分类:

  • 1-10 :文件标志 "70" 以及 记录长度不参与脱机数据认证
  • 11-30 :文件标志 "70" 以及 记录长度参与脱机数据认证

对应 Byte 4 的连续记录个数 :若该值为 00, 表明该项中没有数据是用于脱机数据认证的

3.3 SDA 认证方式

SDA (静态脱机数据认证)

3.3.1 获取 CA(认证中心)公钥
  1. 通过公钥下载将服务端公钥挨个下载到终端
  2. 获取在应用选择(参考 目录选择法 和 AID 选择法)的时候选择的应用相应 AID 的前五个字节,RID
  3. 获取读取记录(从卡片获取到,猜测在 PDOL 中)的时候拿到的发卡行公钥索引(8F)
  4. 在公钥索引里检索到对应 RID, 获取到 CA(认证中心)公钥
3.3.2 恢复 Issuer(发卡行)公钥
  1. 读取记录时已经获取到发卡行签名(加密)后的公钥 90 ,92(发卡行公钥余项),9F32
  2. 通过 CA(认证中心)公钥利用RSA算法对 90 数据进行验签(解密)
  3. 验签(解密)后的数据较为复杂,对其进行判断并且获得卡片 Hash 值以及 发卡行公钥(或公钥最左边部分)
  4. 终端计算 Hash 值,将其与步骤 3 中卡片 Hash 值进行比对
  5. 比对成功则进入下个环节
Hash 值计算格式及计算方式:

证书格式 + 发卡行标识(主账号最左面3-8哥数字)+ 证书失效日期 + 证书序列号 + Hash算法标识 + 发卡行公钥算法标识 + 发卡行公钥长度 + 发卡行公钥指数长度 + 发卡行公钥模数的完整数据(128 Byte)+ 发卡行公钥指数

  • 以上任何一个步骤失败则认为静态数据认证失败
3.3.3 验证静态数据
  1. 使用 Issuer(发卡行)公钥对静态数据(通过 AFL 获取到)进行验签(解密)
  2. 获取到的静态数据部分用于计算 Hash 值,并将其与步骤 1 中获取到的 Hash 值进行比对
  3. 比对成功则 SDA 校验成功
  • 以上任何一个步骤失败则认为静态数据认证失败

3.4 DDA 认证方式

DDA (动态脱机数据认证)

3.4.1 获取 CA(认证中心)公钥
  1. 通过公钥下载将服务端公钥挨个下载到终端
  2. 获取在应用选择(参考 目录选择法 和 AID 选择法)的时候选择的应用相应 AID 的前五个字节,RID
  3. 获取读取记录(从卡片获取到,猜测在 PDOL 中)的时候拿到的发卡行公钥索引(8F)
  4. 在公钥索引里检索到对应 RID, 获取到 CA(认证中心)公钥
3.4.2 恢复 Issuer(发卡行)公钥
  1. 读取记录时已经获取到签名(加密)后的发卡行公钥 90 ,92(发卡行公钥余项),9F32
  2. 通过 CA(认证中心)公钥利用 RSA 算法对 90 数据进行验签(解密)
  3. 验签(解密)后的数据较为复杂,对其进行判断并且获得卡片 Hash 值以及 发卡行公钥(或公钥最左边部分)
  4. 终端计算 Hash 值,将其与步骤 3 中卡片 Hash 值进行比对
  5. 比对成功则进入下个环节
Hash 值计算格式及计算方式:

证书格式 + 发卡行标识(主账号最左面3-8个数字)+ 证书失效日期 + 证书序列号 + Hash算法标识 + 发卡行公钥算法标识 + 发卡行公钥长度 + 发卡行公钥指数长度 + 发卡行公钥模数的完整数据(128 Byte)+ 发卡行公钥指数

  • 以上任何一个步骤失败则认为动态数据认证失败
3.4.3 恢复 IC 卡公钥
  1. 读取记录时已经获取到签名(加密)后的 IC 卡公钥
  2. 通过 Issuer(发卡行)公钥利用 RSA 算法对其进行验签(解密)
  3. 利用相关算法对其进行 Hash 计算,最后得到结果与恢复部分数据进行比对,成功则进入下环节
3.4.5 动态签名生成
  1. 读取记录时会获取到关键数据 DDOL(9F49),卡片用其告诉终端需要哪些终端的数据做动态签名

    • 如果卡片没有返回,终端也需要有默认值,如果都没有则交易终止
    • 若 DDOL 中不含有 9F37 不可预知数,交易终止
3.4.6 卡片返回动态认证数据
  1. 组织好 DDOL 数据后,通过内部认证命令将数据提供给卡片,卡片返回签名后的动态数据
3.4.7 校验动态认证数据
  1. 使用 IC 卡公钥对签名后的动态认证书数据进行验签(解密),获取原数据以及 Hash 值
  2. 利用原数据以及 DDOL 构成规范要求的数据串,与验签后的 Hash 值比对
  3. 比对成功则 DDA 校验成功,并将 Hash 值保存到 9F4C

3.5 DDA 和 SDA 对比

静态数据认证可以确保卡片上的数据没有被篡改,但不能保证卡片的真伪;而动态数据认证可以判断卡片的真伪

3.6 流程总结

总结为 SELECT -> AID -> PDOL -> GPO -> AFL -> AEF