深入理解7816(2)---关于ATR【转】
本文转载自:http://blog.sina.com.cn/s/blog_4df8400a0102vcrk.html
深入理解7816(2)---关于ATR
智能卡(此处主要指接触式CPU卡)本身始终处于被动的状态,所以终端设备在和智能卡进行数据交互的时候,需要首先给智能卡发指令,智能卡才会对应地给出应答。而智能卡告诉终端的第一句话就是ATR,亦即“复位应答”。
想象一下,如果让你为智能卡设计一个通讯协议,该怎么设计?
因为ATR是智能卡上电后说的第一句话,所以一定要确保这句话被准确地接收。在设计通讯协议的时候有必要设计一个可以让收发双方进行“握手”的“同步头”,如果接收方能够正确解析同步头数据,那么双方就可以在默认的参数下正确地进行后续的通讯。ATR里面的第一个字符TS就相当于这个“同步头”。如果终端给卡片上电后,能够收到第一个字符并解析出“3B”或者“3F”就表示卡和终端在默认参数下的通讯已经建立起来了。
既然ATR是卡片和终端说的第一句话,终端自然希望卡片能多透露些信息,以免让终端在后续的对话中茫然无措。从终端的角度看,主要想了解的就是如下信息:1)卡片支持的通讯协议是T=0还是T=1,或者是其他的T = X ?2)除了默认参数卡片是否还支持其他的通讯参数?3)和某些行业应用有关的特殊信息。
在ATR的第二个字符T0中就给出了这些必要的信息是如何在ATR中存在的。T0的高4位用来指出是否存在表示通讯协议以及通讯参数的“接口字节”TA、TB、TC、TD(当然如果不存在接口字节,则使用默认的协议与通讯参数),T0的低4位则用来指出可以反映卡片自定义信息的历史字节个数。
在某些行业应用规范里会对历史字节有明确的规定,用来区分芯片商、卡商、COS版本等,同时可能还会规定用某些历史字节来作为卡片密钥分散的分散因子。
那么这些通讯参数有哪些呢?主要包括通讯协议,字符传输速率,以及超时等待时间和数据块的大小等。
接口字节采用逐层嵌套的方式来表示的,第一层TA1、TB1、TC1、TD1是否存在由T0的高4位决定,第二层TA2、TB2、TC2、TD2是否存在则由TD1的高4位决定,依此类推,每层的TDi的高4位都决定了下一层的TA(i+1)、TB(i+1)、TC(i+1)、TD(i+1)是否存在。
如果卡片在ATR里给出的信息表明其可以支持若干种通讯协议,终端该如何和它打交道呢?相当于卡片用默认的“英语”告诉终端“I can speak English, Chinese, Japanese, French。”
这个时候终端可以进行协议选择(PPS)也可以不选择直接使用默认协议,如果进行协议选择的话,那么PPS就是终端在收到ATR后发出的第一个指令,相当于终端告诉卡片“OK, Let’s speak in Chinese !”,然后它们“就可以用中文拉呱了”。如果不进行协议选择的话,终端则使用默认的协议给卡片发送其他的APDU指令,相当于二者使用默认的英语进行后续对话,“Could you please bring me a cup of coffee? ”,“OK, What’s your prefer? ”,“Cappuccino”,“Here you are. ”。。。。。。
深入理解7816(2)---关于ATR【转】的更多相关文章
- 深入理解7816(1)---- 关于F/D和etu【转】
本文转载自:http://blog.sina.com.cn/s/blog_4df8400a0101gkss.html 深入理解7816(1)---- 关于F/D和etu 对于刚接触智能卡的工程师来说, ...
- 深入理解7816(3)-----关于T=0 【转】
本文转载自:http://blog.sina.com.cn/s/blog_4df8400a0102vcyp.html 深入理解7816(3)-----关于T=0 卡片和终端之间的数据传输是通过命令响应 ...
- 深入理解7816(2)---关于ATR
智能卡(此处主要指接触式CPU卡)本身始终处于被动的状态,所以终端设备在和智能卡进行数据交互的时候,需要首先给智能卡发指令,智能卡才会对应地给出应答.而智能卡告诉终端的第一句话就是ATR,亦即“复位应 ...
- 深入理解7816(1)---- 关于F/D和etu
对于刚接触智能卡的工程师来说,在阅读7816-3规范的时候,常常被其中的一些术语迷惑,读起来会觉得有些别扭.尤其是在看到复位应答中的F和D设置,以及对应的etu的时候,会觉得有些复杂和难以理解. 其实 ...
- 深入理解7816(4)---关于T=1
之前说过的T=0协议,基本上相当于是透明的数据,也就是说从应用的角度看,通过T=0传递的TPDU数据信息大都可以直接转换为对应的APD命令响应数据,“字节”是T=0协议最小的数据传输单元. 对于T=1 ...
- 深入理解7816(3)-----关于T=0
卡片和终端之间的数据传输是通过命令响应的方式进行的,卡片只能被动地接收命令,并且给出响应.所有的命令都是以命令头开始,而该命令被完整地执行后(无论结果对错),必须以包含状态字(SW1 SW2)的响应结 ...
- 深入理解7816(5)-----关于文件DF/EF/MF/FID/AID/SFI
刚开始接触CPU卡的时候,对于各种文件.应用的定义容易模糊不清,通常不能准确地界定什么是文件?什么是应用?DF和EF的区别真的就像计算机里的目录和文档那样吗?FID.AID.SFI这些概念都在什么时候 ...
- ATR的计算
TR=∣最高价-最低价∣和∣最高价-昨收∣和∣昨收-最低价∣的最大值 TR = max(high-low, abs(last-high), abs(last-low)) ATR = MA(TR, N) ...
- Java知识总结:Java反射机制(用实例理解)
概念理解: 反射是指一类应用,它们能够自描述和自控制.也就是说,这类应用通过采用某种机制来 实现对自己行为的描述( self-representation )和检测( examination) ,并能 ...
随机推荐
- ansible结合playbook批量部署war包项目上线
批量部署jenkins.war包实现上线 用于测试war包上线 [root~localhost]~#vim /etc/ansible/test.yml - hosts: test vars: ...
- Getting start with dbus in systemd (01) - Interface, method, path
Getting start with dbus in systemd (01) 基本概念 几个概念 dbus name: connetion: 如下,第一行,看到的就是 "dbus name ...
- 我的MYSQL学习心得链接
http://www.cnblogs.com/lyhabc/p/3793524.html
- 洛谷——P3871 [TJOI2010]中位数
P3871 [TJOI2010]中位数 一眼秒掉,这不是splay水题吗,套模板 #include<bits/stdc++.h> #define IL inline #define N 1 ...
- c++运行程序闪退
以最简单程序为例 法一:在主函数末尾下一行getchar();即可.需要注意的是这种方法并不适合所有程序, 法二:<1>先在程序开头加上头文件#includ ...
- CCF201604-1 折点计数 java(100分)
试题编号: 201604-1 试题名称: 折点计数 时间限制: 1.0s 内存限制: 256.0MB 问题描述: 问题描述 给定n个整数表示一个商店连续n天的销售量.如果某天之前销售量在增长,而后一天 ...
- 版本优化-test
版本优化 标签(空格分隔): 测试 需求经手人太多,直接提bug,开发不乐意,跟Leader确认不靠谱,跟PM确认,不熟悉流程,跟第三方PM确认靠谱了,结果被开发三言两语,变成了不改bug 而改需求 ...
- linux下使用tomcat下载中文文件报404not find
首先,大神指路:http://bbs.csdn.net/topics/391065011?page=1 相关的一些命令: 查看当前系统字符编码:env locale 查看系统支持的字符编码:local ...
- Leetcode 95.不同的二叉搜索树II
不同的二叉搜索树2 给定一个整数 n,生成所有由 1 ... n 为节点所组成的二叉搜索树. 示例: 输入: 3 输出: [ [1,null,3,2], [3,2,null,1], [3,1,null ...
- bzoj 1664 (贪心)
[Usaco2006 Open]County Fair Events 参加节日庆祝 Time Limit: 5 Sec Memory Limit: 64 MBSubmit: 487 Solved: ...