智能卡(此处主要指接触式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的更多相关文章

  1. 深入理解7816(2)---关于ATR【转】

    本文转载自:http://blog.sina.com.cn/s/blog_4df8400a0102vcrk.html 深入理解7816(2)---关于ATR 智能卡(此处主要指接触式CPU卡)本身始终 ...

  2. 深入理解7816(1)---- 关于F/D和etu【转】

    本文转载自:http://blog.sina.com.cn/s/blog_4df8400a0101gkss.html 深入理解7816(1)---- 关于F/D和etu 对于刚接触智能卡的工程师来说, ...

  3. 深入理解7816(3)-----关于T=0 【转】

    本文转载自:http://blog.sina.com.cn/s/blog_4df8400a0102vcyp.html 深入理解7816(3)-----关于T=0 卡片和终端之间的数据传输是通过命令响应 ...

  4. 深入理解7816(1)---- 关于F/D和etu

    对于刚接触智能卡的工程师来说,在阅读7816-3规范的时候,常常被其中的一些术语迷惑,读起来会觉得有些别扭.尤其是在看到复位应答中的F和D设置,以及对应的etu的时候,会觉得有些复杂和难以理解. 其实 ...

  5. 深入理解7816(4)---关于T=1

    之前说过的T=0协议,基本上相当于是透明的数据,也就是说从应用的角度看,通过T=0传递的TPDU数据信息大都可以直接转换为对应的APD命令响应数据,“字节”是T=0协议最小的数据传输单元. 对于T=1 ...

  6. 深入理解7816(3)-----关于T=0

    卡片和终端之间的数据传输是通过命令响应的方式进行的,卡片只能被动地接收命令,并且给出响应.所有的命令都是以命令头开始,而该命令被完整地执行后(无论结果对错),必须以包含状态字(SW1 SW2)的响应结 ...

  7. 深入理解7816(5)-----关于文件DF/EF/MF/FID/AID/SFI

    刚开始接触CPU卡的时候,对于各种文件.应用的定义容易模糊不清,通常不能准确地界定什么是文件?什么是应用?DF和EF的区别真的就像计算机里的目录和文档那样吗?FID.AID.SFI这些概念都在什么时候 ...

  8. ATR的计算

    TR=∣最高价-最低价∣和∣最高价-昨收∣和∣昨收-最低价∣的最大值 TR = max(high-low, abs(last-high), abs(last-low)) ATR = MA(TR, N) ...

  9. Java知识总结:Java反射机制(用实例理解)

    概念理解: 反射是指一类应用,它们能够自描述和自控制.也就是说,这类应用通过采用某种机制来 实现对自己行为的描述( self-representation )和检测( examination) ,并能 ...

随机推荐

  1. mongodb sort limit和skip用法

    > db.mediaCollection.find().skip().toArray() [ { "_id" : ObjectId("5353463193efef0 ...

  2. HDU_2049——部分错位排列,概率论

    Problem Description 国庆期间,省城HZ刚刚举行了一场盛大的集体婚礼,为了使婚礼进行的丰富一些,司仪临时想出了有一个有意思的节目,叫做"考新郎",具体的操作是这样 ...

  3. POJ 1979 深度优先搜索

    题意:有红色和黑色的格子,只能走黑色的,问从起始位置出发,最多能走到达多少块黑色格子. 分析:相当于走迷宫,黑色格子是路,红色格子是墙,每次到达一个未到达过的格子时计数,原点也算是一个.每次可以走上下 ...

  4. 动态sql语句

    当需要根据外部输入的参数来决定要执行的SQL语句时,常常需要动态来构造SQL查询语句,个人觉得用得比较多的地方就是执行搜索查询的SQL语句.对于搜索,可能要根据搜索条件判断来动态执行SQL语句. 在S ...

  5. Android笔记(三):View一些值得注意的地方

    Button android:textAllCaps="false" // Button上的英文字符不转成大写 EditText android:maxLines="2& ...

  6. 控制反转(IOC)/依赖注入(DI)理解

    个人学习笔记,来自Acode. 1.术语 控制反转/反向控制,英文全称“Inversion of Control”,简称IoC. 依赖注入,英文全称“Dependency Injection”,简称D ...

  7. HTML与CSS简单页面效果实例

    本篇博客实现一个HTML与CSS简单页面效果实例 index.html <!DOCTYPE html> <html> <head> <meta charset ...

  8. synchronized 与 Lock 的那点事

    最近在做一个监控系统,该系统主要包括对数据实时分析和存储两个部分,由于并发量比较高,所以不可避免的使用到了一些并发的知识.为了实现这些要求,后台使用一个队列作为缓存,对于请求只管往缓存里写数据.同时启 ...

  9. HTML5 简单实现刮刮乐效果

    <!doctype html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  10. TTTAttributedLabel使用介绍(转)

    TTTAttributedLabel 库地址 https://github.com/TTTAttributedLabel/TTTAttributedLabel 可以实现电话  地址  链接自动查找显示 ...