ISO-7816-3规范
集成电路卡 part3 电气接口及传输协议
引用协议
ISO/IEC 7816-2
ISO/IEC 7816-4
电气特性
待补充。
卡片操作流程
激活
- RST设置成状态L。
- VCC供电。
- IO设置成接收状态(接口设备在RST为L状态时应该忽视IO状态)。
- CLK提供1-55MHz的时钟信号。
冷复位
- 如上图所示, 在时钟信号生效之后(Ta),卡应该在200个时钟周期之内(ta)将IO状态设置为H。
- 在时钟信号生效之后(Ta),处在状态L的RST应该在400个时钟周期之内(tb)将状态设为H。
- 在Tb,RST状态已经被设置成H, IO应该在400-40000个时钟周期之内(tc)进行应答。如果在40000个时钟周期之内都没有进行应答, 接口设备应该进行去激活操作。
热复位
在VCC保持供电和CLK持续供应有效的时钟信号期间,将RST设置成状态L持续至少400个时钟周期,如上图所示,卡应该在Tc之后的200个时钟周期之内(td)将IO状态设置为H, 在RST状态变回H之后(Td),卡应该在400-40000个时钟周期之内进行应答,否则接口设备应该进行去激活操作。
时钟停止
- 在接口设备不希望再跟卡进行传输,并且IO状态保持在H状态至少1860个时钟周期之后。
- 接口设备可以在保持VCC供电和RST为状态H的时候,将CLK在时间Te停止, 在时钟信号停止期间,CLK应当保持H或者L状态。
- 在时钟信号恢复之后(Tf),接口设备和卡之间的数据交换可能在700个时钟周期之后才能恢复。
去激活
- RST设置为状态L。
- CLK设置为状态L,除非时钟信号已经停止,并且在状态L。
- IO设置为状态L。
- VCC停用。
异步字符
基本时间单元(Elementary time unit, etu)
参数 | 含义 |
---|---|
F | 时钟速率换算因子 |
D | 波特率调整因子 |
在非同步通信中:
1
e
t
u
=
F
D
×
1
f
1 etu = \frac{F}{D} \times \frac{1}{f}
1etu=DF×f1
在同步通信中:
1
e
t
u
=
G
×
1
f
1 etu = G \times \frac{1}{f}
1etu=G×f1
- 在ATR期间, F设置为372,D设置为1, 即该卡最初使用的etu等于372个时钟周期。
- 在传输协议期间,无论处于非同步通信或者同步通信中,在切换到一个同步通信之前必须进行一次成功的PPS协商。
字符帧
在一个字符帧的开始,IO应该被设置成状态H。如上图所示,一个字符帧包含10个片段。
- 片段1应该被设置成状态L,以为着字符的开始。
- 片段2-9依据编码约定对字符进行编码。
- 片段10为奇偶校验位。
两个字符开始之间至少间隔12etu,该段时间由字符传输时间和保护时间组成。在保护时间,接口设备和卡都应该位于接收模式,因此IO被设置为状态H。
在ATR期间,两个连续字符的延时不应该超过9600etu,这个最大延时叫做初始等待时间。
错误信号和字符重发
如上图所示,当奇偶校验位不正确时,接收方需要传输一个错误信号,并且期望字符重发。
- 在异步通信中, 接收者将IO状态设置为L, 至少持续1etu,至多持续2etu。
- 在同步通信中, 假设G = 1,接收者应该在F11设置IO状态为L, 在F13设置IO状态为H。
初始字符, 字符编码和字节帧
初始化字符TS会在任何成功的复位操作之后发送。
- 片段1-4应该设置为LHHL, 序列(H)LHHL是一个用来同步的部分,取两次下降沿的1/3作为最初的etu。
- 片段5-7应该设置为LLL或者HHH,用来表示编码解码约定。
- 片段8-10应该设置为LLH。
初始化字符TS的两种可能的形式:
- (H)LHHL LLL LLH 表示逆惯例约定,状态L编码1,并且片段2表示最高有效位(msb优先),传输的字节为3F。
- (H)LHHL HHH LLH 表示直接约定,状态H编码1, 并且片段2表示最低有效位(lsb优先),传输的字节为3B。
卡使用任意一种编码约定,接口设备两种都需要支持。
ATR (Answer-to-Reset)
在初始化字符 TS 之后,最多允许32个字符(按照上图顺序),这最多32个字符的序列被定义为 ATR。
T0 字节格式
- 如上图所示,bit8-bit5表示Y1,每一个被设置成1的bit表示存在一个进一步的接口字节。
- bit4-bit1是历史字节的编码(historical bytes),表示为K,值从0-15。
接口字节 TD
所有TD的结构都如上图所示
- bit8-bit5 表示 Yi+1,每一个被设置成1的bit表示存在一个进一步的接口字节。
- bit4-bit1 表示参数 T,值从 0-15。
因此 T0 可以得到 Y1,TDi 可以得到 Yi+1 , Yi 的 bit5, bit6, bit7, bit8, 分别代表着 TAi , TBi, TCi, TDi 是否存在(1表示存在)。
如果 TDi 不存在,则 TAi+1, TBi+1, TCi+1, TDi+1 都不存在。
参数 T
参数T指定传输协议或者限定接口字节。
- T=0 表示字符的半双工传输。
- T=1 表示块的半双工传输。
- T=2 和 T=3 为将来的全双工操作保留。
- T=4 保留用于增强的半双工字符传输。
- T=5 至 T=13 保留给 ISO/IEC JTC 1/SC 17 使用。
- T=14 是指没有被 ISO/IEC JTC 1/SC 17 标准化的传输协议。
- T=15 不是指传输协议,而是只限定全局接口字节。
在 TA2 和 PPS0, bits 4-1 也是参数 T。
如果两个或更多参数T出现在 TD1, TD2 … 它们应按递增的数字顺序出现,T=0 优先,T=15 最后。TD1 中禁止使用 T=15。
第一个提供的传输协议被定义如下:
- 如果 TD1 出现,则第一个提供的是 T。
- 如果 TD1 不出现, 则第一个提供的是 T=0。
接口字节 TA TB TC
每一个接口字节 TA TB TC 是全局的(global)或是特定的(specific)。
- 全局接口字节指的是整张卡的参数。
- 特定的接口字节是指的卡提供的传输协议的参数。
TA1, TC1 和 TA2 是全局的,TC2是 T=0 传输协议特有的。
TB1 和 TB2 不建议使用,卡也不应该传输它们, 接口设备应该忽视它们。
对于 i>2 时的 TAi, TBi, TCi 的解释取决于 TDi 中的参数 T:
- 如果 T 属于 0-14,TAi, TBi, TCi 都是特定针对指定的传输协议。
- 如果 T=15,TAi, TBi, TCi 都是全局的。
历史字节 T1 T2… TK
历史字节描述卡的操作特性。ISO/IEC 7816-4 规定了历史字节的结构和内容。
如果 K 不为0,则 ATR 将会有 K 个历史字节。
检查字节 TCK
TCK字符是检查字符,它的值验证ATR中发送的数据的完整性。TCK可以是任何值,只要从T0到TCK(包括TCK)的所有字节的异或为零即可。T=0时不使用TCK,但在所有其他情况下,TCK将在ATR中出现。
全局字节
全局字节有 TA1, TC1, TA2, T=15的第一个TA和TB。
TA编码:
- FI 时钟转换因子 bits 8-5。
- DI 波特率调整因子 bit 4-1。
TC1 编码N, 额外保护时间。
TA2 是专有模式字节。
T=15 的第一个 TA:
- XI 时钟停止标志 bits 8-7。
- UI 类标志 bits 6-1。
T=15 的第一个 TB:
- GI 时钟分频系数 bits 4-1(当bits 8-5 为0时)。
- 接触点C6的专有引用 (当 bits 8-5 不为0)。
传输参数 F,D 和 G
异步通信使用参数 F, D。同步传输使用参数G。
如上图所示,FI 和 DI 规定了卡上支持的 Fi 和 Di的值。FI还指明了卡上所支持的最大频率,最小值是1MHz。f 默认的最大值是5MHz。
如上图所示,GI 指明了是否支持同步通信(GI 不为 0000),当支持同步通信时,
表示最小数量的时钟周期在一个片段中,GI的默认值是0000,即不支持同步通信。
计算异步通信的etu,参数对 F 和 D 有以下三种情况:
- Fd 和 Dd,默认值为 372 和 1。
- Fi 和 Di,具体数值由 TA1 指明,如果没有 TA1,则使用默认值。
- Fn 和 Dn,这两个值是经过一次成功的PPS协商得出,范围在 Fd-Fi,Dd-Di。
在 ATR 期间 F 和 D 均使用默认值。
在ATR之后,F 和 D 的值取决于操作模式。
- 在协商模式,Fd 和 Dd 继续在 PPS 协商中应用。Fn 和 Dn 会在一个成功的 PPS 协商之后立刻应用。
- 在专有模式,TA2的 bit5 如果为 0,Fi 和 Di 会在一个成功完整的 ATR 之后立刻应用。如果不为 0,则使用 TA2 中指明的 F 和 D。
计算同步通信的etu,需要在一次成功的 PPS 协商之后得到时钟分频参数 G。
额外保护时间 N
参数 N 是从设备传输字符到卡的额外保护时间,从卡传输字符到设备不需要额外保护时间。N 的默认值为 0。
从 0-254,N 指明,卡在准备接收下一个字符时,该卡需要从前一个字符的传输前沿延迟以下时间。
12
e
t
u
=
(
Q
×
N
f
)
12 etu = (Q \times \frac{N}{f})
12etu=(Q×fN)
在上面公式中,Q取以下两个值中的其中一个:
- 如果 T=15 没有出现在 ATR 中,Q = F/D。
- 如果 T=15 出现在ATR中,Q = Fi/Di。
N=255 指明在同一种传输协议中,两个连续字符前沿之间的最小间隔在两种传输方向中是相同的,最小传输延时取决于使用的传输协议:
- T=0 12etu。
- T=1 11etu。
时钟停止标志 X
如上图所示,参数 X 指明卡是否支持时钟停止,以及在支持情况下,CLK的电状态是高还是低。
类标志 U
如上图所示,参数 U 表示卡接受的操作条件类。
PPS (Protocol and parameters selection)
在任意ATR之后,卡将会进入以下两种模式之一:
- TA2 存在,专有模式。
- TA2 不存在,协商模式。
专有模式
TA2 相关 bit 定义:
- bit8 表示是否有改变操作模式的能力,如果 bit8 为 1,则有能力;如果为 0,则不能改变操作模式。
- bits 7-6 保留,设置为0。
- bit5 表示参数的定义,如果为 0 则表示接口字节定义,如果为 1 则表示隐式定义。
- bits 4-1 为参数 T。
在专有模式,ATR 之后直接使用 TA2 规定的传输协议,F 和 D。
如果 TA2 bit5 为0,则使用 Fi 和 Di,否则使用固定值。
协商模式
在协商模式下,只要接口设备到卡的第一个字节可以在 PPS 和传输协议清楚地区分,就可以进行一个隐式选择。
如果在一个 ATR 之后,没有立刻传输一个 PPS 请求,则应该立即应用第一个提供的传输协议,Fd 和 Dd 也应该应用。
如果在一个ATR之后,有 PPS 请求,在 PPS 交换之后至少在 PCK-Response 前沿之后的 16 个 etu 再建立起异步或者同步通信(使用 Fn 和 Dn 或者使用 G)。
如果一个 ATR 只提供一种传输协议和 Fd,Dd,并且不支持同步通信,则该传输协议在 ATR 后就应该立即使用 Fd 和 Dd,这种卡不需要 PPS 交换。
一个既不支持 PPS 交换,也不支持最先提供的传输协议的接口设备,应该复位并选择专有模式,或者直接拒绝该卡。
PPS 交换
PPS 协议
PPS 请求和回应应该使用和 ATR 相同的传输方法。
只有接口设备才被允许发起 PPS 交换。
- 接口设备应该传输一个 PPS 请求到卡。
- 如果卡接收到一个错误的 PPS 请求,则卡不回应。
- 如果卡收到一个正确的 PPS 请求,卡应该传输一个 PPS 应答,否则会超过初始等待时间。
- 如果超过了初始等待时间,接口设备应该复位或者拒绝该卡。
- 如果接口设备接收到了一个错误的 PPS应答,则应该复位或者拒绝该卡。
- 如果一个 PPS 交换没有成功,则接口设备应该复位或者拒绝该卡。
PPS 请求和应答
PPS 请求和 PPS 应答都有一个初始字节 PPSS,接下来是一个 PPS0字节,还有可选的参数字节 PPS1,PPS2,PPS3,最后一个校验字节 PCK。
- PPSS 是 PPS 的开始,值为‘FF’。
- 在 PPS0,bit 5,6,7设置为1表明接下来分别存在 PPS1,PPS2,PPS3。Bits4-1 定义参数 T 指明传输协议,bit8 保留。
- PPS1 允许接口设备向卡提出 F 和 D 的值。编码和 TA1 一样,值的范围应该在 Fd-Fi 和 Dd-Di之间,如果接口设备没有传输 PPS1,它建议继续使用 Fd 和 Dd。如果卡接受 PPS1 提出的 F 和 D(这些值将会变为 Fn 和 Dn),则它会重复 PPS1,如果没有重复 PPS1 则继续使用 Fd,Dd。(Fn 为372,Dn 为 1)。
- PPS2 允许切换成同步通信。PPS2 编码方式与 T = 15 的第一个 TB 相同,位8至5设置为0000。如果接口设备不发送 PPS2,或者 PPS2 为‘00’,则卡建议继续使用异步通信。
PPS2 | G | Gi |
---|---|---|
03 | 4 | 4,2,1 |
02 | 2 | 2,1 |
01 | 1 | 1 |
- PPS3 保留。
- 从 PPSS 到 PCK 的异或值为 0。
成功的 PPS 交换
- PPSS 应答 = PPSS 请求.
- PPS0 应答:
- bits 1-4 重复。
- bit5 应该重复或者设置为0。如果设置为1,PPS1 应答 = PPS1 请求;如果设置为0,则 PPS1 应答不出现,默认使用 Fd 和 Dd。
- Bit6 应该重复或者设置为0。如果设置为1,PPS2 应答 = PPS2 请求;如果设置为0,则 PPS2 应答和 PPS2 请求都不出现。
- Bit7 应该重复或者设置为0。如果设置为1,PPS3 应答 = PPS3 请求;如果设置为0,则 PPS3 应答和 PPS3 请求都不出现。
所有其他的 PPS 交换都被视为不成功的。
T=0, 半双工字符传输
协议在一个 ATR 或者 一次成功的 PPS 交换之后开始。
命令的结构和处理
接口设备从一个五字节的头开始一条命令,并且在头的控制下继续向该方向上传输指定数量字符。
现定义:
- 输入数据命令表示有数据进入卡。
- 输出数据命令表示有数据从卡出去。
命令头
命令头是一个连续的五字节,表示为 CLA, INS, P1, P2, P3。
- CLA 表示命令,‘FF’是无效的,它被 PPS 交换使用。
- INS 表示命令编码,‘6X’ 和 ‘9X’ 是无效的。
- P1 和 P2 表示命令参数。
- P3 表示剩余还要传输的数据字节长度,在一个输出数据命令中,P3=‘00’ 表示有256字节数据从卡中传出;在一个输入数据命令中,P3=‘00’ 表示没有数据传输。
过程字节
概述
有三种过程字节,见下表。
NULL | '60' | 无操作 | 过程字节 |
Bytes | Value | 数据传输操作 | 后续字节 |
ACK | INS | 所有剩余字节 | 过程字节 |
INS xor ‘FF’ | 下一个数据字节 | 过程字节 | |
SW1 | '6X'(≠'60'),'9X' | 无操作 | SW2 |
- 如果 ACK 等于 INS,则剩下的所有数据字节都会按照顺序全部传输。
- 如果 ACK 等于 INS ⊕ \oplus ⊕’FF’,则只会传输一个字节
状态字节
在接收到 SW1 之后,接口设备应该等待 SW2 的到来。SW2 的值没有严格的限制。SW1 SW2 代表着一个命令的结束。SW1 SW2 等于 ‘9000’ 代表命令的正常完成。
- SW1 的 bits 8-5 如果设置成 ‘9’,具体含义依赖应用本身。
- 如果SW1 的 bits 8-5 如果设置成 ‘6’,含义则独立于应用。
‘6E’ 不支持的命令CLA
‘6D’ 不支持的INS
‘6B’ P1 P2 参数错误
‘67’ 长度 P3 错误
‘6F’ 未知错误
如果 SW1 不是以上几种,则说明卡支持该条命令。
半双工块传输
待补充
命令应答对
定义
一个 APDU 包含命令 APDU 和 应答 APDU。
符号缩写 | 解释 |
---|---|
APDU | 应用协议数据单元 |
CLA | 类型字节 |
INS | 命令字节 |
Lc | Nc 的长度 |
Le | Ne 的长度 |
Nc | 命令数据字段的字节数 |
Ne | 应答数据字段中期望的最大字节数 |
Nr | 应答数据字段中的字节数 |
P1 P2 | 参数字节 |
SW1 SW2 | 状态字节 |
TPDU | 传输协议数据单元 |
APDU
命令 APDU
命令 APDU 包含前四字节和一个长度可变的条件体。
CLA INS P1 P2 + [Lc] [DATA] [Le]
应答 APDU
应答 APDU 包含一个可变长度的条件体和必须的两字节 SW1 SW2。
[DATA] + SW1 SW2
如果命令处理过程中断了,可能会没有应答 APDU;如果有应答 APDU,则 SW 将指出发生的错误。
APDU中的数据字段
每一个命令应答对都可能携带有命令数据字段和应答数据字段。
- NC表示命令数据字段的字节数,如果 Nc 不为0,则 Lc 是 Nc的编码;如果 Nc 等于 0,则 Lc 和命令数据字段都不出现。
- Ne 表示应答数据字段的最大期待字节数,如果 Ne 不为 0,则 Le 是 Ne 数的编码;如果为 0,则 Le 不出现。
- Nr 表示应答数据字段的字节数,Nr 的值应该从 0-Ne,如果 Nr 等于 0,则应答数据字段不出现。
APDU 一共分为四种类型:
类型 | 命令数据字段 | 应答数据字段 |
---|---|---|
Case1 | 没有 | 没有 |
Case2 | 没有 | 有 |
Case3 | 有 | 没有 |
Case4 | 有 | 有 |
注:个人学习记录 转载请注明出处