智能卡操作系统的测试技术
文章出处:http://www.nexussmartsolutions.com 作者:谢晶晶, 李代平, 郭琨 人气: 发表时间:2011年09月01日
引 言
具有稳定、可靠的卡内操作系统是智能卡正常工作的基础,智能卡操作系统控制外界与智能卡之间的通信,管理卡片的存储空间,并且在卡内对于各种命令进行处理,所以在COS 开发过程中有必要对COS 进行充分且全面的测试。COS 的主要特点: 它是一个专用系统; COS 一般是根据某种卡片的特点以及应用范围来设计开发的,具有高可靠性; COS 所要完成的功能需遵循相关的国际规范以及行业规范; 支持同一应用类型的COS 往往遵循同样的规范,这使得COS 的测试有一定的重用性。
以上特点决定了常规的软件测试方法不能直接用于COS 测试。
1 智能卡操作系统
1. 1 COS 组成结构
COS 的主要功能是从智能卡传出和传入数据,控制执行相关的命令,管理维护文件系统,管理与执行加密算法。其结构可划分为两个层次: 功能层和微内核层。
功能层主要实现COS 的业务逻辑,包含通信管理、安全管理、命令解释、文件管理四大模块。
1) 通信管理模块: 对输入缓冲区中收到的数据进行奇偶校验,以及对分组长度等进行正确性判断,但不对信息的内容进行判断,以ISO/ IEC 7816- 4 中有关命令结构作为判断的标准; 接收经过命令处理、文件管理处理、安全认证后的数据,并按照ISO/ IEC 7816- 4中有关命令结构要求将其打包成完整的结果报文,放入到输出缓冲区,发送结果报文。
2) 安全管理模块: 接受通信管理模块的调度,并将处理后的信息返回给通信管理模块; 对通信管理模块接收的数据进行安全验证,但不对数据内容进行验证,若安全验证失败,则直接返回验证失败。
3)命令解释模块: 接受安全管理模块的调度,并将处理后的数据信息( 与命令相对应的响应代码) 返回给安全管理模块; 需要作数据内容上的鉴别( 检查命令的各项参数是否正确) ,然后执行相应的操作,完成对卡内有关数据的操作,若对数据内容鉴别未通过,则直接返回错误码给通信管理模块。
4)文件管理模块: 接受命令管理模块的调度; 数据在卡内是以文件形式存在的,文件管理模块须提供文件的建立、修改、删除等基本操作,文件访问的安全控制等。
微内核的主要功能: 为上层的功能层提供硬件支持,实现终端与卡内硬件的通信。微内核分为接口层、驱动层,接口层为功能层提供服务,将功能层的服务请求转化成对驱动层的调用,为功能层提供统一的接口。驱动层主要实现对底层硬件的各种驱动操作。
1. 2 COS 的状态转移过程
各功能模块在完成特定请求的过程中可能还需要向其他功能模块发出请求。各模块之间是调度请求和数据响应的关系,在一对关系中调度请求表现为模块的输出,数据响应表现为模块的输入,调度和响应都用事务表示,事务所代表的是一组数据,以及对数据的操作。
系统请求/ 响应过程中的状态转换图,如图1 所示。
与其相对应的状态表,如表1 所示。
事务1: 智能卡收到终端的APDU 请求;
事务2: 智能卡向终端发出的APDU 响应;
事务3: 通信管理模块接收到APDU 命令,进行校验后,调用命令解释模块对APDU 指令进行处理;
事务4: 命令解释模块向通信管理模块返回处理后的数据或异常事件;
事务5: 命令解释模块在APDU 命令的处理过程中,需要访问文件而调用文件系统模块;
事务6: 文件系统模块将处理后的信息返回给命令解释模块;
事务7: 文件系统模块在对文件操作时需要进行安全控制时调用安全模块;
事务8: 安全管理模块在涉及安全性相关的文件时调用文件系统模块;
事务9: 命令解释模块向安全管理模块发出的响应事件;
事务10: 安全管理模块向命令解释模块发出的处理数据请求;
事务11: 安全管理模块向通信管理模块发出的响应事件或异常事件;
事务12: 通信管理模块为完成终端发出的APDU请求,向COS 微内核发出的调用底层硬件接口请求;
事务13: 命令解释模块为完成安全管理模块请求,向COS 微内核发出的调用底层硬件接口请求;
事务14: 文件系统模块为完成安全管理模块请求,向COS 微内核发出的调用底层硬件接口请求;
事务15: 安全管理模块为完成安全管理模块请求,向COS 微内核发出的调用底层硬件接口请求。
1. 3 智能卡通信过程
智能卡与终端之间的通信是通过命令--响应对实现的。终端向卡发送命令( 以C- APDU 形式) ,卡收到命令后,由COS 对接收的命令报文进行处理,然后将处理结果打包成响应报文( 以R- APDU 形式) 返回给终端。
C- APDU 由两部分组成 : 一个必备的连续4 字节的命令头,用CLA、I NS、P1 和P2 表示,以及一个可选的长度可变的条件体。在C- APDU 中发送的数据的字节数由1 字节的L c 定义,期望卡回送的R- AP􀀁DU 数据字段的最大字节数由1 字节的L e 指定,格式见图2。
R- APDU 由两部分组成[: 可选的条件体以及必备的2 字节状态码SW1| SW2,格式见图3。
在智能卡上电复位之后,COS 便运行起来,开始执行卡片的初始化工作,完成初始化的COS 处于接收准备状态。COS 一旦查询到有命令输入,就采用已经被初始化了的通信协议参数接收数据,数据全部接收后,存放在内存中命令的缓冲区中,启动命令处理流程,对命令报文进行语法检查,然后根据命令的类别以及应用的类别去执行相应的命令处理程序,命令处理完成后,将需要返回的数据存放在响应数据缓冲区中,与命令处理结果的响应状态码一起回送给终端。
2 智能卡操作系统测试方案
COS 测试主要包括基本功能、防拔插、兼容性以及耐久性测试:
(1) COS 基本功能的测试,主要包括文件的测试、命令功能、命令的执行情况、命令出错处理等;
( 2) 由于智能卡在应用中往往会涉及到对一些敏感数据的操作,因此必须针对在COS 与终端进行交互的过程中被意外事件中断时其自动恢复能力进行测试,即防拔插测试;
( 3) 智能卡的使用寿命是有限的,对存储介质的过度损耗是导致智能卡损坏的主要原因,但可以采用软件优化来均衡对存储介质的访问从而延长智能卡的使用寿命,因此在COS 测试中需要对智能卡进行耐久性测试;
( 4) 智能卡与终端之间进行正常通信的前提是它们遵循相同的协议,因此在COS 的测试中需对协议的实现情况进行测试,即协议测试。
COS 测试总体上采用增量测试的方法,各项内容与测试阶段对应见表2。
2. 1 COS 基本功能测试
灰盒测试结合了白盒测试和黑盒测试,软件需求规格说明书是测试用例[ 7,8] 的设计依据,也是验证软件满足其功能需求的依据,在对需求和结构进行覆盖分析时须使用同样的测试用例。灰盒测试是发现软件潜在缺陷的非常有效的技术手段。对于COS 基本功能的灰盒测试方法如下: 测试人员根据ISO/ IEC7816- 4 标准以及具体的需求规范进行测试用例设计,对已有测试进行覆盖分析来进一步扩充测试用例以确保测试的充分性,对于需求的覆盖率一般要达到100%,而对于结构的覆盖率达到所要求的即可。从智能卡所遵循的ISO/ IEC 7816- 4 规范入手设计COS 的测试用例,ISO/ IEC 7816- 4 规范的主要内容包括: 在接口设备与智能卡之间的通信中所传送的报文、命令和响应的内容; 在处理交换用的行业间命令时,在接口处所看到的数据文件的结构; 卡内数据文件的访问方法; 定义卡内数据文件访问权限的安全体系结构。这些都可用模拟终端发送特定的命令序列给COS,然后根据COS 执行命令的结果来进行测试。
智能卡与终端是以APDU 为基本单元通信的,COS 功能测试主要关注工作流程、命令参数、安全状态、状态码和响应数据。因而对COS 基本功能测试的对象就是APDU 序列。
首先需要针对标准以及需求规范中描述的每个命令的APDU 设计测试用例,由于命令解释模块首先对命令缓冲区中APDU 的4 个字节的必备头进行接受分析处理,因此对各个命令可依据图4 所示的测试用例树来设计测试用例。
测试时,判断命令执行结果是否正确的主要依据是COS 执行APDU 命令后返回的状态码,在COS 中定义了4 种状态:
1) St ate- Response: 命令执行完后,把命令执行的结果存储在Get Response 专用缓冲区中,并且卡回送的状态码被设为61XX,它通知终端发出Get Response命令来获取数据;
2) St ate- Success: 命令成功执行时返回的状态,该状态不需要终端再使用Get Response 命令来获取数据;
3) St ate- Error: 在执行命令过程中出现了异常情况时返回的状态,这时会向终端回送错误代码,包括命令的参数出错和在执行命令过程中出现的存储空间、安全状态等错误;
4) State- T imeout: 在接收Lc 长度的数据的过程中发生超时,则返回该状态,此时不需要向终端回送错误代码。
第1页第2页
在EVDO 卡的测试中,以SELECT 命令为例,依据图4 设计测试用例,如表3 所示。
对命令功能的测试主要是测试各命令之间的相互关系以及命令序列所完成的功能。根据ISO 7816- 4中规定的命令执行时需要满足的条件及有关命令间的相互关系,描述执行命令序列的过程,然后以非正常和正常事件作为输入来设计测试用例。
在EVDO 卡的测试过程中,利用团队自主开发的自动化测试工具,引入脚本技术,实现COS 测试的自动化,大大地提高了测试的效率。引入自动化测试技术具有如下优势:
1)使测试可以快速准确地进行,减少人为的操作失误,更多更频繁地运行测试脚本,使得脚本的执行效率高于手工测试,缩短发布产品的时间;
2)对新版本的程序运行已有的测试脚本,特别是在程序更新较频繁时,自动化测试可以在短时间内测试已有的脚本;
3)更好地利用资源,使繁琐的任务自动化可提高测试的准确性以及测试人员的积极性,从而使测试人员能有更多精力来设计更好的测试用例;
4) 自动化测试可通过重复执行相同的测试脚本来获得测试的可重复性和一致性。
2. 2 防拔插和耐久性测试
防拔插测试主要检测因突然断电而使操作中断后智能卡能否自动恢复。主要涉及的是在正常环境下执行正确的命令序列,COS 写FLASH 时,突然断电,智能卡能够保证卡内的数据依然具有完整性。若命令未能成功执行,验证卡内数据与命令执行前是否完全一致,若一致则表示卡片的防插拔功能是有效的。智能卡的使用寿命是有限的,对智能卡的插拔次数决定了智能卡的物理寿命,一般来说,约在1 万次左右; 而数据存储器的擦写次数决定了集成电路芯片的寿命,各厂家生产的芯片其指标是不同的。故而必须对智能卡实施耐久性测试,检验存储器的擦写次数是否会因为日常使用而超出芯片存储器擦写的最大值。对文件的操作是使用智能卡时主要涉及的内容,因而需要模拟日常使用智能卡的行为,对所有文件的访问频率进行统计,找出具有相对较高访问频率的那些文件,在个人化过程中分散存储这些文件,避免某一块存储区域擦写过度,均衡整个存储器的擦写。
3 结束语
根据COS 的特点给出了COS 的测试方案,对于每个测试项给出了其测试的方法和技术。在测试中,结合对测试结果的分析,进一步补充测试用例。在EVDO 卡的开发中按照文中的测试方案进行了测试,经反复测试,开发的EVDO 卡通过了第3 方测试,该卡正应用于生产。