以下内容整理自网络,留作备用。
ISO/IEC 7816-3标准中对ATR的数据串和数据元做了规定和描述。
ATR的数据元和它们的意义:
|
数据元 |
说明 |
|
TS |
起始字符 |
|
T0 |
格式字符 |
|
TA1,TB1,TC1,TD1,... |
接口字符 |
|
T1,T2,... ,TK |
历史字符 |
|
TCK |
校验字符 |
复位应答ATR的基本数据结构和数据元如下:
一、起始字符TS
起始字符规定了用于在ATR中的所有数据和后继通信过程的约定。此外,TS字节含有特殊的位模式可由终端用以识别分频值。终端测量TS中前两个下降沿之间的时间并除以3,其结果就是一个etu的持续时间。然而,由于ATR的分频值固定在372,终端通常并不评估同步模式。
TS是ATR的强制部分,总是必须存在。
此字节只允许有两种编码:3B为正向约定,3F为反向约定。
使用3F反向逻辑约定时, I/O的低电平状态等效于逻辑1,且该数据字节的最高位在起始位之后首先发送。
使用3B正向逻辑约定时, I/O的高电平状态等效于逻辑1,且该数据字节的最低位在起始位之后首先发送。
正向约定的波形如下,一般终端读取到的字符为3B:
反向约定的波形,一般终端读取到的字符为03:
二、格式字符T0
格式字符T0含有一组位表明将要传送哪个接口字符,它同时也指出后继历史字符的个数。每个ATR中都必须有这个字节。
高半字节( b5-b8) 表示后续字符TA1到TD1是否存在。(b5对应TA1,b8对应TD1);
低半字节( b1-b4) 表明可选历史字符的数目( 0到15);
终端应接受包含任何T0值的ATR。一般情况下,基本ATR中,当仅选择T=0时, IC卡应回送T0=6x,表示字符TB1和TC1存在;当仅选择T=1时, IC卡应回送T0=Ex,表示字符TB1到TD1存在。
三、接口字符
接口字符规定所用协议的所用传输参数,它们包含TAi、TBi、TCi、TDi各字节。然而,这些字节在ATR中是可选的,它们也可以被略去。由于对协议的所用参数的缺省值都做了规定,对于一般的通信处理可以不需要ATR中的接口字符。
接口字符可以分为全局接口字符和专用接口字符。
全局接口字符规定基本传输协议参数,诸如分频值,它们用于所有后继的协议;
专用接口字符则是用于指明特定的传输协议参数。“工作等待时间(work waiting time)”就是T=0协议中这类参数的典型例子。
全局接口字符基本上用于所有协议,出于历史原因(因为在ISO标准中,最初仅包含有T=0协议),这些字符中的几个仅和T=0协议有关。如果没有实现T=0协议,可以忽略它们,这这种情况下将使用缺省值。
TDi字节仅用于对任何跟随接口字符的链接保护,TDi字节的高4位组合有一个指示后继接口字符的存在的位模式。它类似于格式字符T0的编码,TDi字节的低4位则标识现行使用的传输协议。如果没有TDi字节的存在,则TAi+1、TBi+1、TCi+1和TDi+1都不传送。
其他接口字符(TAi、TBi、TCi)它们都不用于链接,而是规定了可用的传输协议,按照ISO/IEC 7816-3标准,它们的含义如下:
1. 全局接口字符TA1:(重要)
TA1高半字节 FI 用于确定 F 的值, F 为时钟速率转换因子。用于修改复位应答之后终端所提供的时钟频率。低半字节 DI 用于确定 D 的值, D 为位速率调节因子。用于调整复位应答之后所使用的位持续时间。etu =F/D * (1/f)
FI和DI编码如下:
|
FI |
0000 |
0001 |
0010 |
0011 |
0100 |
0101 |
0110 |
0111 |
|
F |
372 |
372 |
558 |
744 |
1116 |
1488 |
1860 |
RFU |
|
FI |
1000 |
1001 |
1010 |
1011 |
1100 |
1101 |
1110 |
1111 |
|
F |
RFU |
512 |
768 |
1024 |
1536 |
2048 |
RFU |
RFU |
|
DI |
0000 |
0001 |
0010 |
0011 |
0100 |
0101 |
0110 |
0111 |
|
D |
RFU |
1 |
2 |
4 |
8 |
16 |
32 |
RFU |
|
DI |
1000 |
1001 |
1010 |
1011 |
1100 |
1101 |
1110 |
1111 |
|
D |
12 |
20 |
RFU |
RFU |
RFU |
RFU |
RFU |
RFU |
2. 全局接口字符TB1:(没有意义了)
TB1传送PI1和II的值,PI1 在 b1 到 b5 位中定义,用于确定 IC 卡所需的编程电压 P 值;II 在 b6 和 b7 位中定义,用于确定 IC 卡所需的最大编程电流 I 值。一般情况下ATR中必须包含TB1=00,表示IC卡不使用VPP。
3. 全局接口字符TC1
TC1传送N值,N用于表示增加到最小持续时间的额外保护时间,此处的最小持续时间表示从终端发送到IC卡的、作为后续信息交换的两个连续字符的起始位下降沿之间的时间。N在TC1的b1-b8位为二进制编码,其值作为额外保护时间表示增加的etu数目,其值可在0到255之间任选。N=255具有特殊含义,表示在使用T=0协议时,两个连续字符的起始位下降沿之间的最小延迟时间可减少到12个etu,而在使用T=1协议时可减小到11个etu。
如果TC1值在00到FE之间,增加到字符间最小持续时间的额外保护时间为0到254个etu。对于后续传输,额外保护时间必须在12到266个etu之间。如果TC1=FF,则后续传输的字符间最小持续时间在使用T=0协议时为12个etu,使用T=1协议时为11个etu。
TC1只适用于终端向IC卡发送的两个连续字符间的时序,而不适用于IC卡向终端发送字符的情况,也不适用于在相反方向发送字符的情况。
4. 全局接口字符TB2:(没有意义了)
TB2传送PI2, PI2用于确定IC卡所需的编程电压P的值,当PI2出现时,它将取代TB1中回送的PI1的值。通常在ATR中不再使用。
5. T=0传输协议专用的接口字符:
1) 专用接口字符TC2
TC2专用于T=0协议, 传输工作等待时间整数(WI),WI用来确定由IC卡发送的任意一个字符起始位下降沿与IC卡或终端发送的前一个字符起始位下降沿之间的最大时间间隔。工作等待时间为:960×D×WI etu。
若TC2字符不出现在ATR中,则使用工作等待时间的缺省值WI=10。
6. T=1传输协议专用的接口字符:
1) 专用接口字符TA3
TA3(如果TD2中指明T=1)回送IC卡的信息域大小整数(IFSI),IFSI决定了IFSC,并指明了卡片可接收的块信息域的最大长度(INF)。 TA3以字节形式表示IFSC的长度,其取值范围从01到FE。 00和FF预留(RFU)。
2) 专用接口字符TB3
TB3(如果TD2中指明T=1)表明了用来计算字符等待时间CWT和字组等待时间BWT的CWI和BWI值, TB3由两部分组成。低半字节(b1-b4)用于表明CWI值,而高半字节(b5-b8)用于表明BWI值。
3) 专用接口字符TC3
TC3(如果TD2中指明T=1)指明了所用的块错误校验码的类型,所用代码类型用b1位表示, b2到b8位未使用。
4) 全局接口字符TA2
TA2的存在与否表示IC卡是以特定模式还是以协商模式工作。TA2的低半字节表明的协议类型正是ATR中第一次表明的协议类型。
四、历史字符
很长一段时间,没有任何标准对历史字符做出规定,结果是随操作系统生产者而不同,它们包含了变化广泛的数据。
以下内容摘自7816-4 第8节
目的和一般结构
当按照本规范7816-3确定传输协议时,历史字节告诉外界如何使用该卡。
历史字节数(至多15个字节)按本规范7816-3进行规定并编码。
历史字节所运载的信息也可以在ATR文件(默认EF标识符=‘2F01’)中找到。
如果存在,历史字节可由3个数据字段组成:
——一个必备的种类指示符(1个字节),
——任选的压缩TLV数据对象,
——一个有条件的状态指示符(13个字节)。
8.2 种类指示符(必备的)
种类指示符是第1个历史字节。如果种类指示符等于‘00’,‘10’或‘8X’,则历史字节的格式应符合本规范本部分。
表78 种类指示符的编码
|
值 |
含义 |
|
‘00’
‘10’ |
状态信息应呈现在历史字节的结束处(不在TLV中)。 在本部分规范8.5中规定 |
|
‘80’
‘81’至‘8F’ 其他值 |
状态信息(如果存在)包含在任选的压缩TLV数据对象中。 RFU 专有的 |
8.3 任选的压缩TLV数据对象
压缩TLV数据对象的编码可从适合于带有标记=‘4X’及长度=‘0Y’的RER-TLV数据对象的ASN.1基本编码规则(见ISO8825和附录D)推导出。这种数据对象的编码用‘XY’来代替,后面紧跟数据的Y字节。在本章中,‘X’系指标记号,‘Y’系指长度。
除本章中定义的数据对象外,历史字节还可以包含有本规范第5部分定义的数据对象。在这种情况下,在本规范第5部分中定义的标记和长度字段的编码应按上述要求进行修改。
当在本章中定义的压缩TLV数据对象出现在ATR文件中时,它们应按照ASN.1的基本编码规则进行编码(即标记=‘4X’,长度=‘0Y’)。
在本规范中未定义的所有应用类别标记被保留供ISO用。
8.3.1 国家/发行者指示符
当存在时,该数据对象表示一个国家或一个发行者。
该数据对象可通过‘1Y’或‘2Y’来引入。
表79 国家/发行者指示符的编码
|
标记 |
长度 |
值 |
|
‘1’ ‘2’ |
可变 可变 |
国家代码和国家数据 发行者标识号 |
标记‘1’后面紧跟着适合的长度(1个4位字节)以及紧跟着ISO3166定义的表示国家的3个数字。后面紧跟着(奇数个4位字节)的数据由相关的国家标准团体进行选择。
标记‘2’后面紧跟着适合的长度(1个4位字节)以紧跟着ISO7812第1部分定义的发行者标识号。如果发行者标识号包含有奇数个数字,则它应使用值为‘F’的4位字节正确地进行填充。
8.3.2 卡服务数据
该数据对象表示为了支持第9章描述的服务在卡内有效的方法。
该数据对象通过‘31’来引入。
当该数据对象不存在时,卡仅支持显式应用选择。
表80 与应用无关的卡服务用的卡轮廓
|
b8 b7 b6 b5 b4 b3 b2 b1 |
含义 |
|
1 - - - - - - -
- 1 - - - - - - |
——通过全DF名称的直接应用选择 ——通过部分DF名称的选择(见9.3.2) |
|
续表80 与应用无关的卡服务用的卡轮廓 |
|
|
b8 b7 b6 b5 b4 b3 b2 b1 |
含义 |
|
- - 1 - - - - - - - - 1 - - - - |
数据对象有效 ——在DIR文件中 ——在ATR文件中 |
|
- - - - 1 - - - - - - - 0 - - - |
文件I/O服务,通过: READ RECORD命令 READ BINARY命令 |
|
- - - - - × × × |
‘000’(其他值为RFU) |
注:DIR文件和ATR文件的内容可以给出关于选择方法的信息。
8.3.3 初始访问数据
该任选的数据对象允许检索在本规范中定义的数据对象串。该数据对象所检索的串称作“初始数据串”。
该数据对象通过‘41’,‘42’或‘45’来引入。
在本章中所描述的任何命令APDU被假定为是在复位应答之后所发送的第1个命令。因此,在该点的有效数据不是可以以后可检索的。
8.3.3.1 长度=‘1’
当仅提供1个字节的信息时,它表示为了检索初始数据串而执行的命令长度。执行的命令是按如下结构的READ BINARY命令。
表81 当长度=‘1’时,命令的编码
|
CLA INS P1-P2 Lc字段 数据字段 Le字段 |
‘00’(5.4.1) ‘BO’ ‘0000’ 空 空 初始访问数据中的值字段的第1个字节并且是唯一的字节(表示被读的字节数) |
8.3.3.2 长度=‘2’
当提供2个字节的信息时,第1个字节表示文件结构(透明或记录)和被读的EF的短标识符。第2个字节表示为了检索初始数据串而执行的读命令长度。
表82 第1个字节的结构
|
b8 b7-b6 b5-b1 |
=0面向记录的文件=1透明文件 ‘00’(其他值为RFU) EF短标识符 |
当b8=0时,执行的命令是按如下结构的READ RECORD命令。
表83 当b8=0时,命令的编码
|
CLA INS P1 P2 |
‘00’(见5.4.1) ‘B2’ ‘01’ 短EF标识符(来自初始访问数据的第1个字节)后面紧跟着b3-b2-b1=110 |
|
Lc字段 数据字段 Le字段 |
空 空 初始访问数据中的值字段的第2个字节和最后一个字节(表示被读的字节数) |
当b8=1时,执行的命令是按如下结构的READ BINARY命令。
表84 当b8=1时,命令的编码
|
CLA INS P1 P2 Lc 数据字段 Le字段 |
‘00’(见5.4.1) ‘B0’ 初始访问数据中的第1个字节的值 ‘00’ 字段空 空 初始访问数据中的值字段的第2个字节和最后一个字节(表示被读的字节数) |
8.3.3.3 长度=‘5’
在初始访问数据中找到的值由执行的命令APDU组成。当执行时,该命令在其响应数据字段中提供初始数据串。
8.3.4 卡发行者数据
该数据对象是任选的并且为可变长度。结构和编码由卡发行者进行定义。
该数据对象通过‘5Y’来引入。
8.3.5 预先发行的数据
该数据对象是任选的并且为可变长度。结构和编码在本规范本部分中不予定义。它可以用来表示:
——卡制造商
——集成电路类型
——集成电路制造商
——ROM掩模版本
——操作系统版本
该数据对象通过‘6Y’来引入。
8.3.6 卡能力
该数据对象是任选的并且为可变长度。其值字段由第1个软件功能表,或者由前面的2个软件功能表,或者由3个软件功能表组成。
该数据对象通过‘71’,‘72’或‘73’来引入。
表85 第1个软件功能表
|
b8 b7 b6 b5 b4 b3 b2 b1 |
含义 |
|
1 - - - - - - - - 1 - - - - - - - - 1 - - - - - - - - 1 - - - - - - - - 1 - - -
- - - - - 1 - - - - - - - - 1 - - - - - - - - 1 |
DF选择 ——通过全DF名称 ——通过部分DF名称 ——通过路径 ——通过文件标识符 ——隐式地 EF管理 ——所支持的短EF标识符 ——所支持的记录号 ——所支持的记录标识符 |
表86示出了第2个软件功能表,它是数据编码类型。该数据编码类型也可以作为带有标记‘82’的文件控制参数中的第2个数据元而存在(见5.1.5中的表2)
表86 第2个软件功能表
(数据编码类型)
|
b8 b7 b6 b5 b4 b3 b2 b1 |
含义 |
|
- × × - - - - - - 0 0 - - - - - - 0 1 - - - - - - 1 0 - - - - - - 1 1 - - - - - |
写功能的行为 ——一次写 ——专有 ——写‘或’ ——写‘和’ |
|
- - - - - × × × |
数据单元长度(以4位字节Nibble位单位) (幂为2,例如,001=2 Nibble)(默认值=1个字节byte) |
|
- - - × × - - - |
0...00...(其他值为RFU) |
表87示出了第三个软件功能表
表87 第三个软件功能表
|
b8 b7 b6 b5 b4 b3 b2 b1 |
含义 |
|
X - - - - - - - - 1 - - - - - - - - X - - - - - - - - X X - - - 1 1 - - - 0 0 - - - - - - - - X - - - - - - - - X Y |
0(1为RFU) ——扩充的Lc和Le字段 0(1为RFU) 逻辑信道管理 ——通过卡 ——通过接口设备 无逻辑信道 0(1为RFU) 逻辑信道的最大数(=2X+Y+1) |
8.4 状态信息
状态信息由3个字节组成:卡生存状态(1个字节)和2个状态字节SW1-SW2。
卡生存状态的值‘00’表示没有卡生存状态被提供。值‘80’至‘FE’为专有的。所有其他值为RFU。
SW1-SW2的值‘9000’表示按5.4.5定义的进行正常处理。
SW1-SW2的值‘0000’表示该状态未予表示。
如果种类指示符的值为‘80’,则状态信息可以呈现在压缩TLV数据对象中。在这种情况下,标记号为‘8’。当长度为‘1’时,则值为卡生存状态。当长度为‘2’时,则值为SW1-SW2。当长度为‘3’时,则值为卡生存状态后紧跟着SW1-SW2。长度的其他值被保留供ISO用。
8.5 DIR数据引用
如果种类指示符为‘10’,则后随字节为DIR数据引用。该字节的编码及含义超出了本规范本部分的范围。
五、 校验字符TCK
TCK具有一个检验复位应答期间所发送数据完整性的值。TCK的值应使从T0到包括TCK在内的所有字节进行异或运算的结果为零。
如果在ATR中仅指出了T=0协议,TCK校验和可以不在ATR的尾部出现。在这种情况下,完全没有发送它,因为用奇偶校验已经知道了差错字节而在T=0协议中重复发送出错字节又是强制性的。相反,在T=1协议中,TCK字节必须出现,校验和的计算从字节T0开始,结束于最后的接口字符,如果有则是最后的历史字符。
举例:
3B9F96801FC78031E073FE211B634D402783009000ED
3B - 正向, 3F反向
9F - T0, 高半字节表示TA1~TD1是否存在,低半字节表示历史字节长度
96 - TA1和TD1存在
80 - TD1:其他bits没用,表示TD2存在
1F - TD2:协议F,TA3存在
C7 - TA3
以下为历史字符
80-状态信息(如果存在)包含在任选的压缩TLV数据对象中。
31 E0
73 FE211B //7X引入卡能力,例如:DF选择、EF管理、写功能的行为、数据单元长度、扩充的Lc和Le字段、逻辑信道管理、逻辑信道的最大数(=2X+Y+1)
63 4D4027 //6X引入预先发行的数据,例如:卡制造商、集成电路类型、集成电路制造商、ROM掩模版本、COS版本等
83 009000
ED - 校验值