Smartcard中PPS数据交换分析
相关文章: 《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 response
和unsuccessfull 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数据交换分析相关推荐
- HBase建表高级属性,hbase应用案例看行键设计,HBase和mapreduce结合,从Hbase中读取数据、分析,写入hdfs,从hdfs中读取数据写入Hbase,协处理器和二级索引
1. Hbase高级应用 1.1建表高级属性 下面几个shell 命令在hbase操作中可以起到很到的作用,且主要体现在建表的过程中,看下面几个create 属性 1. BLOOMFILTER 默认是 ...
- 软件系统开发中的数据交换协议
在很多地方都有"数据交换"这个概念,本文所说的"数据交换" 是指在计算机网络中,一个系统把数据传递给另外一个系统.这非常类似于一个人要告诉另外一个人一件事情. ...
- 计算机网络FMD是什么,计算机网络中的数据交换
计算机网络中,数据交换的类型有:电路交换.报文交换.分组交换. ☞数据交换--电路交换 Q:如何实现数据通过网络核心从源主机到达目的主机? A:数据交换.(现在网络主要采用的技术是数据交换) 2台主机 ...
- Nmap中NSE数据文件分析
Nmap中NSE数据文件分析 1.Nmap中数据文件所在的位置 2.暴力穷举时所使用的用户名和密码列表数据文件 3.Web应用审计数据文件 http-fingerprints.lua http-sql ...
- iOS 中 XML 数据交换格式
XML 是一种自描述的数据交换格式,但是 XML 的数据交换格式并没有 JSON 来的轻便,但是无可否认的是,XML 的应用范围也是非常广泛的,比如在 ROS(一个开源机器人操作系统)中利用 ...
- 使用 conda 和 Jupyter 在 R 中实现数据科学分析
前两篇文章我们介绍了 Jupyter Notebook 的一些基础用法,今天我们来介绍一下如何使用 conda 和 Jupyter 在 R 中开始一个数据科学项目. 在开始之前我们先要明确一个概念:K ...
- 报表模板 — 在项目管理中应用数据报表分析
项目管理是在项目活动中运用专门的知识.技能.工具和方法,使项目能在有限资源下,实现或超过设定的需求和期望的过程,是对成功地达成一系列目标相关的活动的整体监测和管控. 无论是在大型工程.软件开发.系统制 ...
- VC++中对话框数据交换【十全十美】
如果使用 DDX 机制,则通常在 OnInitDialog 处理程序或对话框构造函数中设置对话框对象成员变量的初始值.在对话框即将显示前,框架的 DDX 机制将成员变量的值传输给对话框中的控件,当对话 ...
- 纯新手DSP编程--5.31--DSP/BIOS中的数据交换
DSP/BIOS内核提供了丰富的数据交换途径.利用DSP/BIOS,用户不仅可以方便的实现DSP应用程序与主机的CCS或其他Windows程序之间的数据交换(RTDX和HST),而且还可以利用PIP或 ...
最新文章
- GTK+开发环境搭建(Centos+Netbeans)
- python选择法_新手小白如何学习Python 选对方法很重要(附教程)
- 一步一步学习Git(2)——Git基本操作
- HttpClient模拟客户端请求实例
- keras分类器模型
- 矩阵论作业4,5,6讲
- 用FlyMcu和USB转TTL给stm32中烧录程序(stm32C8/C6)
- cfa equity
- python牛顿法寻找极值_使用Python实现牛顿法求极值
- 嵌入式 AXD调试经验,使用及问题
- 记录第一次面试的体会(字节跳动实习生招聘)
- 数字图像处理艺术化效果——彩色图像转化为灰度图像(黑白照片)
- 台式计算机快捷键大全,电脑常用快捷键有哪些
- python爬虫从企查查获取企业信息-手工绕开企查查的登录验证
- plsql odbc导入器dsn没有下拉选项
- 2020-06-29
- 诸葛io分享:真正的产品运营就是直面人的七情六欲!
- Python破解滑动验证码(极验/无背景图)
- ★《唐琅探案》后记【1】
- 分布式锁(Distributed Lock)理论介绍