相关文章: 《Smartcard 中 T0 协议等待时间 WT 的定义和计算》

1. 什么是PPS?

PPS,全称为Protocol and Parameters Selection,直译为协议和参数选择,是设备同Smartcard协商通信协议和传输参数的一种机制。

Smartcard会在复位应答ATR(Answer To Reset)中表明支持的协议和参数。设备端可以使用默认的协议,或者通过PPS数据交换选择其它协议。更多的情况是,设备端通过PPS协商使用新的传输参数,如波特率因子,但并不更改传输协议。

本文根据7816-3规范,说明什么时候进行PPS交换?如何进行PPS交换?由于涉及到标准的引用,内容难免枯燥繁琐,如果只希望了解PPS交换的时机和流程,请转到本文第4节(4. PPS数据交换总结),查看结论。如果想看PPS交换的实例,请转到5节(5. PPS交换实例分析)。

这里主要的定义和引用都来自标准ISO/IEC 7816-3:2006(E)。

ISO/IEC 7816-3:2006(E)

Identification cards — Integrated circuit cards — Part 3:
Cards with contacts — Electrical interface and transmission protocols

2. 何时进行PPS交换?

2.1 PPS数据交换的场景

"6.3.1 Selecton of transmission parameters and protocol"节详细描述了PPS操作的场景。即什么时候进行PPS交换?

文档中的解释如下:

复位ATR后操作场景如下:

  • 如果ATR中TA2存在,说明卡端处于指定模式(card in specific mode),则设备端使用TA2指定的协议和参数进行通信
  • 如果ATR中TA2不存在, 说明卡端处于协商模式(card in negotiable mode),此时通信继续使用ATR传输使用的参数
    • 如果卡端收到的第一个字节是FF,则设备端和卡端开始PPS交换,交换完成后双方使用协商的参数通信
    • 如果卡端收到的第一个字节不是FF,则按照TD1中指定的第一传输协议通信

显然,这里TA2是关键,那么ATR中的TA2是如何规定的呢?

2.2 ATR中关于TA2的定义

8.3 Global interface bytes节对TA2做了详尽的定义

ATR中TA2定义的要点如下:

  • bit 8 表明是否支持在协调模式和指定模式之间切换

    • 0, 支持模式切换
    • 1, 不支持模式切换
  • bit 7~6 预留给将来使用,默认为0
  • bit 5 指定传输使用的参数F和D
    • 0, 使用TA1中指定的Fi和Di参数
    • 1, 使用隐含参数,即默认参数(非ATR中接口字符定义的值)
  • bit 4~1, 指定传输使用的协议T

简而言之,TA2指定了传输使用的协议T和参数F和D,同时TA2也表明是否支持模式切换。

3. 如何进行PPS交换?

3.1 PPS交换的动作

9.1 PPS exchange节定义了PPS交换的动作:


翻译过来如下:

  • 设备端向卡端发起PPS交换请求
  • 如果卡端收到错误的PPS请求,不做响应
  • 如果卡端收到正确的PPS请求,如果支持,则需要发送PPS响应;否则,发生WT超时。
  • 对于overrun of WT, erroneous PPS responseunsuccessfull PPS exchange三种情况,设备端需要进行deactivation操作。

3.2 PPS数据的格式

PPS数据交换分为PPS请求和PPS响应,第9.2 PPS request and response定义了PPS请求和响应的细节。


总体说来,PPS请求和响应的格式一样,1字节的initial byte(PPSS),紧跟1字节的format byte (PPS0), 3个可选的参数字节 optinal parameter bytes (PPS1, PPS2和PPS3),最后1字节的check byte (PCK)。

详细的格式信息如下:

这里PPS数据的最后一个字节check byte (PCK)可以通过对前面PPSS, PPS0~3的各个字节异或得到。

规范上对此的描述是,将PPS命令字节数据(包括PPSS, PPS0~3, PCK)进行异或,其结果为0。这应该是为了方便进行数据校验的结果。换句话说,如果PPS数据异或结果不为0,那说明PPS命令是非法的。

3.3 PPS响应的细节

PPS响应的数据细节同PPS请求的细节一样,但设置上需要遵从以下规则:


这里提到:

  • 响应PPS的bit 1~4同请求PPS的bit 1~4一样
  • 响应PPS的bit 5同请求PPS的bit 5一样或置0
  • 响应PPS的bit 6同请求PPS的bit 6一样或置0
  • 响应PPS的bit 7同请求PPS的bit 7一样或置0

不要问我这里为什么没有提到bit 8,哈哈,因为bit 8是保留位,默认为0

啰嗦一次,实际上,绝大部分时候,响应PPS同请求PPS是一样的。

4. PPS数据交换总结

什么时候进行PPS交换?

Smartcard复位后的第一件事是发送ATR,设备端接收并解析ATR。ATR的TA2字段存在与否表明了Smartcard的两种模式:

  • TA2存在

    Smartcard为指定协议模式(card in specific mode),此时采用ATR中指定的协议和参数进行通信

  • TA2不存在

    Smartcard为协商模式(card in negotiable mode),此时设备端根据具体情况决定进行PPS数据交换,还是发送工作命令

只有当Smartcard处于协商模式下时,设备才有必要根据具体情况决定进行PPS交换还是直接发送命令工作

  • PPS数据交换

    如果需要协商采用新的协议或调整参数,则设备发送PPS请求(0xFF开头)到Smartcard,卡端解析PPS后应用新的参数,并作PPS响应。设备端接收到卡端的PPS响应,至此,一轮PPS数据交换才算完成。完成后,二者开始正常的交互操作。

  • 正常工作

    如果不需要更改协议或调整参数,则设备直接发送操作命令(非0xFF开头)到Smartcard,开始二者的交互操作。

通常情况下,PPS数据交换是设备端接收到ATR后,发送的第一个命令(0xFF开头)。理论上,也是可以在工作一段时间后再发送PPS更改传输协议和参数,但我没有见过这种情况。

个人猜测如果Smartcard以某协议工作一段时间后,需要更改协议,可能是先复位,在设备接收到ATR后通过发起PPS请求更改。

PPS数据交换分为PPS请求和PPS响应,二者的数据格式一样,不仅如此,绝大多数情况下,二者的内容也一样。设备端发送了什么命令,卡端原样返回该命令。

5. PPS交换实例分析

5.1 Irdeto某T1卡

ATR

设备接收到Irdeto某T1卡的ATR如下:

3B B0 36 00 81 31 FE 5D 95

从ATR中提取到的Fi=744, Di=32,但该ATR中不包含TA2字段,复位后卡处于协商模式。

PPS Request

设备端接收到ATR后发起PPS请求:

FF 10 18 F7

PPS请求的内容解析如下:

Initial Byte: FFFormat Byte: 10bit 1~4: 0, T=0bit 5~7: 1, bit 5=1, PPS1 presentedPPS1: 18TA1=18, Fi=372, f(max.)=5, Di=12PCK: F7FF xor 10 xor 18 = F7

这里的PCK可以使用计算器对前面PPSS, PPS0, PPS1逐个异或操作得到。

显然,这里ATR接收到的Fi=744, Di=32。设备发起PPS请求,将Fi和Di分别修改为Fi=372, Di=12。

PPS Response

Smartcard返回的PPS响应如下:

FF 10 18 F7

设置成功,卡端返回跟PPS请求一样的数据。

5.2 Conax某T0卡

ATR

设备接收到Conax某T0卡的ATR如下:

3B 34 94 00 30 42 30 30

从ATR中提取到的Fi=512, Di=8,但该ATR中不包含TA2字段,复位后卡处于协商模式。

PPS Request

设备端接收到ATR后发起PPS请求:

FF 10 94 7B

PPS请求的内容解析如下:

Initial Byte: FFFormat Byte: 10bit 1~4: 0, T=0bit 5~7: 1, bit 5=1, PPS1 presentedPPS1: 94TA1=94, Fi=512, f(max.)=5, Di=8PCK: 7BFF xor 10 xor 94 = 7B

显然,这里ATR接收到的Fi=512, Di=8。设备发起PPS请求,将Fi和Di分别修改为Fi=512, Di=8。

所以这里虽然发起了PPS交换,但交换前后的参数都是一样的,多此一举啊~~~~

后来查看代码发现,处理流程上,设备接收到ATR后,直接发起PPS请求,将ATR解析得到的TA1设置为PPS请求的第3个字节PPS1。所以也就不难理解为什么PPS交换前后参数一样了。

PPS Response

Smartcard返回的PPS响应如下:

FF 10 94 7B

设置成功,卡端返回跟PPS请求一样的数据

6. 福利

最后送上一个福利。

Smartcard操作中,ATR解析至关重要,但你可能不了解7816-3标准,也不清楚ATR如何解析,那怎么办啊?

没有关系,一个名为“Smart card ATR parsing”的网站为你解析ATR,省了多少烦恼,我第一次发现的时候开心得不行。

好了,地址在:[Smart card ATR parsing]: https://smartcard-atr.appspot.com/

2022/10/18 更新,很久没看,发现这个解析地址已经失效了,新的地址:
https://smartcard-atr.apdu.fr
ATR “3B B0 36 00 81 31 FE 5D 95” 的解析结果如下:

赶快去体验吧!

7. 相关文章

《Smartcard 中 T0 协议等待时间 WT 的定义和计算》

Smartcard中PPS数据交换分析相关推荐

  1. HBase建表高级属性,hbase应用案例看行键设计,HBase和mapreduce结合,从Hbase中读取数据、分析,写入hdfs,从hdfs中读取数据写入Hbase,协处理器和二级索引

    1. Hbase高级应用 1.1建表高级属性 下面几个shell 命令在hbase操作中可以起到很到的作用,且主要体现在建表的过程中,看下面几个create 属性 1. BLOOMFILTER 默认是 ...

  2. 软件系统开发中的数据交换协议

    在很多地方都有"数据交换"这个概念,本文所说的"数据交换" 是指在计算机网络中,一个系统把数据传递给另外一个系统.这非常类似于一个人要告诉另外一个人一件事情. ...

  3. 计算机网络FMD是什么,计算机网络中的数据交换

    计算机网络中,数据交换的类型有:电路交换.报文交换.分组交换. ☞数据交换--电路交换 Q:如何实现数据通过网络核心从源主机到达目的主机? A:数据交换.(现在网络主要采用的技术是数据交换) 2台主机 ...

  4. Nmap中NSE数据文件分析

    Nmap中NSE数据文件分析 1.Nmap中数据文件所在的位置 2.暴力穷举时所使用的用户名和密码列表数据文件 3.Web应用审计数据文件 http-fingerprints.lua http-sql ...

  5. iOS 中 XML 数据交换格式

         XML 是一种自描述的数据交换格式,但是 XML 的数据交换格式并没有 JSON 来的轻便,但是无可否认的是,XML 的应用范围也是非常广泛的,比如在 ROS(一个开源机器人操作系统)中利用 ...

  6. 使用 conda 和 Jupyter 在 R 中实现数据科学分析

    前两篇文章我们介绍了 Jupyter Notebook 的一些基础用法,今天我们来介绍一下如何使用 conda 和 Jupyter 在 R 中开始一个数据科学项目. 在开始之前我们先要明确一个概念:K ...

  7. 报表模板 — 在项目管理中应用数据报表分析

    项目管理是在项目活动中运用专门的知识.技能.工具和方法,使项目能在有限资源下,实现或超过设定的需求和期望的过程,是对成功地达成一系列目标相关的活动的整体监测和管控. 无论是在大型工程.软件开发.系统制 ...

  8. VC++中对话框数据交换【十全十美】

    如果使用 DDX 机制,则通常在 OnInitDialog 处理程序或对话框构造函数中设置对话框对象成员变量的初始值.在对话框即将显示前,框架的 DDX 机制将成员变量的值传输给对话框中的控件,当对话 ...

  9. 纯新手DSP编程--5.31--DSP/BIOS中的数据交换

    DSP/BIOS内核提供了丰富的数据交换途径.利用DSP/BIOS,用户不仅可以方便的实现DSP应用程序与主机的CCS或其他Windows程序之间的数据交换(RTDX和HST),而且还可以利用PIP或 ...

最新文章

  1. GTK+开发环境搭建(Centos+Netbeans)
  2. python选择法_新手小白如何学习Python 选对方法很重要(附教程)
  3. 一步一步学习Git(2)——Git基本操作
  4. HttpClient模拟客户端请求实例
  5. keras分类器模型
  6. 矩阵论作业4,5,6讲
  7. 用FlyMcu和USB转TTL给stm32中烧录程序(stm32C8/C6)
  8. cfa equity
  9. python牛顿法寻找极值_使用Python实现牛顿法求极值
  10. 嵌入式 AXD调试经验,使用及问题
  11. 记录第一次面试的体会(字节跳动实习生招聘)
  12. 数字图像处理艺术化效果——彩色图像转化为灰度图像(黑白照片)
  13. 台式计算机快捷键大全,电脑常用快捷键有哪些
  14. python爬虫从企查查获取企业信息-手工绕开企查查的登录验证
  15. plsql odbc导入器dsn没有下拉选项
  16. 2020-06-29
  17. 诸葛io分享:真正的产品运营就是直面人的七情六欲!
  18. Python破解滑动验证码(极验/无背景图)
  19. ★《唐琅探案》后记【1】
  20. 分布式锁(Distributed Lock)理论介绍

热门文章

  1. 张小龙唯一推荐的贝索斯演讲:善良比聪明更重要
  2. Launching xxxx has encountered a problem Kaki的博客
  3. 查看tom猫进程linux,分享|在 Linux 命令行中观看彩虹猫来稍事休息
  4. 实施CMMI具体要做什么——点评
  5. Git 奇幻之旅⌛️
  6. PROTEUS电子仿真软件的使用——流水灯
  7. matlab中离散点连成闭合曲线
  8. Arduino 声音传感器 实验
  9. APB总线详解及手撕代码
  10. 电源锁WakeLock不起作用