当前位置:文档之家› COS的命令处理流程

COS的命令处理流程

COS的命令处理流程(图) 发布时间:2008-10-20 13:38:58
技术类别:软件开发
1、工作原理

命令处理流程是命令执行的高度过程,它根据命令的类别以及应用的类别调用不同的命令处理模块进行命令的处理。

它的主要功能是根据命令报文输入缓冲区中的命令参数和输入数据。继续响应的操作,并且将执行结果和响应数据放在响应数据输出缓冲区中。

对命令处理模块的调用有两种不同的方式:

* 函数调用方式;
* 中断方式。

根据芯片平台的编程环境,两种方式都可以选用,主要区别在于:

* 函数调用方式中,参数和结果的传递通过堆栈来进行,对堆栈的大小有一定要求,而且不能够传递太大的数据对象。

* 中断方式调用,参数和结果的传递通过固定的缓冲区进行,减少堆栈的使用,更为灵活,但是需要程序自解释缓冲区的数据结构。

下面进行中断方式设计示例介绍。

2、命令处理流程的设计示例

如图1所示,整个流程分为如下几个步骤:


图1 命令处理流程示例

1)CLA合法性检查

对于命令输入缓冲区的命令报文,首先检查命令CLA字节是否合法,合法的CLA字节只有0x00、0x04、0x80和0x84四种情况,如果CLA非法的话,返回错误码。

2)根据INS查找命令处理模块入口地址

根据INS查找命令处理模块的入口地址,查找方式见下文。

* 如果查找失败,表示对应的INS错误,返回错误码。
* 如果查找成功,继续下一步骤。

3)命令处理

根据找到的命令处理模块入口地址,调用相应的模块。默认的,将命令输入缓冲区作为模块的输入数据,命令响应缓冲区作为模块的输出数据。

命令的处理结果直接存放在命令响应输出缓冲区中,由主守护流程来完成响应数据的输出。

下面来看看一个根据INS来查找命令入口地址的设计示例。

如图2所示,整个流程可以分为如下几个步骤:


图2 命令入口地址查找流程示例

1)查看当前应用的类型

在当前应用对应的DF的文件描述块中读取应用类型字节。

2)查找当前应用对应的命令入口表

根据当前应用的应用类型字节查找其对应的命令入口表,非特殊应用使用默认的命令入口表。

3)在命令入口表中查找命令入口地址

根据INS在命令入口表中查找命令入口地址。

以上采用的是两层检索方式,第一层采用应用类型查找应用命令入口地址表,第二层使用INS查找命令入口地址,同一应用的所有命令入口地址存储在同一个应用命令入口地址表中。



IC卡COS系

统I/0模块通讯协议实现原理 发布时间:2008-10-20 13:38:22
技术类别:软件开发
数据I/O流程也就是IC卡数据通信协议的实现,下面以IC卡中最常用的接触方式ISO7816-3 T="0方式为例"。

I/O的工作流程可以分为数据输入和数据输出两部分。根据I/O模块的层次,数据输入分为字符帧的输入和命令报文的输入;数据输出分为命令响应报文的输出、ATR的输出和字符帧的输出。

1、命令报文的输入流程

命令报文分为命令头和命令数据域两个部分,CLA、INS、P1、P2和P3是所有命令共有的部分,根据命令的不同类型,P3可能对应Lc,也可能对应Le。如果P3对应的是Lc的话,命令报文中还含有数据域。

2、字符帧的输入流程

命令报文的输入最终由命令报文各个字节的输入组成。每一个字节的I/O表现为一个字符帧的输入,字符帧的输入是I/O模块数据输入的基本单位。

数据的输入方式是单工串行输入,在默认的通信速率下,一个字符帧的接收需要12个etu来完成,每个etu时间段内完成一个字符位的接收。

一个字符帧的接收包含了如下主要步骤:

* 检测帧的起始位;
* 接收8个数据位;
* 接收奇偶校验位;
* 检查奇偶校验位是否正确;
* 接收结果返回。

字符帧接收成功之后将顺序保存在命令缓冲区中组成一个完整的命令报文。

3、命令响应报文的输出流程

命令响应报文分为响应数据和响应状态码两个部分。根据命令执行情况的不同,命令数据可能不存在。

4、ATR的输出流程

ATR的输出可以分解为若干个ATR字节的输出。

5、字符帧的输出流程

字符帧的输出是I/O模块数据输出的基本单位。数据的输出方式是单工串行输出,在默认的通信速率下,一个字符帧的发送需要12个etu来完成,每个etu时间段内完成一个字符位的传送。

一个字符帧的发送包含了如下主要步骤:

* 帧的起始位发送;
* 帧的数据位发送;
* 帧的奇偶校验位计算;
* 帧的奇偶校验位发送;
* 等待中断接收结果返回;
* 判断重发字符帧或者发送完毕。

每一个字符帧发送之后IC卡都能够收到终端的响应,如果发送失败,将进行该字符帧的重发,连续重发的最大次数一般为3次,如果连续发送失败的话,本次数据的输出将中断。



支持多应用的COS设计 发布时间:2008-10-20 13:36:20
技术类别:软件开发
1、生命周期的维护

在文件描述块中,保留了一个文件状态字节,用于记录该DF文件所处的生命周期状态。

如下所示是该状态字节可能的取值:

编码 对应状态
0x01

建立状态
0x04 使用状态的正常子状态
0x05 使用状态的临时锁定子状态
0x08 终止状态
0x80 删除状态

在对ADF及其子EF执行相关命令时都需要事先检查该状态字节,如果状态字节和要求的值相符,可以执行相关命令,否则返回相应的错误码。

执行删除文件命令,COS进行的操作主要包括了如下步骤:

* COS将ADF文件的数据区,包括其子EF的所有空间,全部清除。
* 保留文件的描述块。将状态字节置为0x80,表明文件已经处于逻辑删除状态。

在进行空间回收操作时,逆向依次检查文件描述块中的状态字节,将相连的处于逻辑删除状态的文件空间回收,实现对该文件的物理删除。

2、应用间的保护

支持多应用的COS在应用安全方面最重要的一项工作就是保证应用之间的独立性。

应用的独立性也就是不同应用之间对数据访问的控制,每一个应用只能够使用自己的应用代码,在自己的数据空间内工作。

应用之间的独立性包含了两个方面的内容:一是应用数据的独立性,二是应用代码的独立性。

对应用独立性的保证通过如下一些方法来进行:

* 文件系统的层次设计,应用和ADF相对应,同一应用的数据可以存放在同一个ADF下。

* 数据访问只能在当前文件空间内进行,在IC卡中,选择应用的过程也就是将对应的ADF置为当前文件的过程,所有的后续操作都只能够在当前文件的范围内进行。

* 应用代码的调用由COS来管理,COS根据当前应用的类型选择相应的应用代码。

* 在RAM空间的使用上,COS内核和应用代码使用两个不同的分区,不同分区互相独立,并且COS内核和应用代码也不能相互访问对方的RAM空间。

3、安全状态的维护

在多应用状态下,安全状态分层次来维护,一般包括全局安全状态和当前安全状态。

当前安全状态和应用安全的关系最为密切,其实现上和ADF结合在一起。其实现上与应用的关系是:

* 当前安全状态在初始化时,也就是最初卡片上电复位阶段,被置为最低级别,对应了MF的安全状态。

* 在MF下进行应用选择时,当前安全状态将对应被选的DF的安全状态。

* 在应用切换阶段,也就是选择其他DF时,当前DF的安全状态值丢失,当前安全状态对应了被选的新DF安全状态。

* 建立DF成功以后,COS自动选择该DF作为当前文件,当前安全状态对应了新建的DF,设置为最低状态。

* 在应用建立阶段,所有的操作都将忽略安全机制,也就是对应用的初始化操作可以在没有安全保护

的情况下进行,COS不进行任何的安全属性检查。这个主要是考虑到应用的初始化过程通常都是集中进行,在可信任的终端上完成,额外的安全控制将加大系统的复杂度,延长卡片操作时间。

* 应用的安全状态只记录当前值,状态切换以后旧的状态自动丢失不进行缓存,没有可回溯性。

* 如果在当前应用状态下重复选择当前应用的话,可以将当前安全状态保留,也可以将当前全部环境包括安全环境置为默认值,具体的实现方式由COS设计者来定义。

全局安全状态只和MF相关,从卡片上电复位一直到重新复位或者卡片关闭,MF的安全状态一般不需要重新置位。

相关主题
文本预览
相关文档 最新文档