一种可信密码模块的测试用例生成方法及其测试系统转让专利

申请号 : CN200810104596.4

文献号 : CN100583057C

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 陈小峰冯登国张敏初晓博李昊

申请人 : 中国科学院软件研究所

摘要 :

本发明公开了一种可信密码模块的测试用例生成方法及其测试系统,属于计算机技术领域。本发明的方法为:在可信密码模块划分的子系统内部进行建模,生成该子系统的扩展有限状态机,然后通过扩展有限状态机生成测试用例;本发明的测试系统包括:脚本解析引擎、结果分析引擎和通信模块。与现有技术相比,本发明的测试用例可以以自动化的方式生成,避免了手工测试用例无法保证测试完整性无法保证从而造成测试结果的可信度不高的问题,并且本发明给出的系统是一个自动化的测试系统,减少了一些人工的干预,节省了成本。

权利要求 :

1.一种可信密码模块的测试用例生成方法,其步骤为:

1)将可信密码模块划分为多个子系统;

2)对各子系统内的状态进行划分,形成子系统内部的状态;所述对子系统内的状态进 行划分的方法为:a)初始状态空间为:

其中x1.xi.xn,A1..Aj..Al为决定状态空间的状态变量,xi表示的是单值变量,类型分别 为T1,...,Tn,Aj是一集合变量,集合中的元素类型为TT1,...,TTl;

b)根据状态变量的不同对状态进行划分;

c)组合划分后的状态变量;

d)根据约束条件缩减组合后的状态变量;

3)根据子系统内部的命令执行顺序建立该子系统内命令之间的执行顺序依赖图;

4)根据子系统内的状态,从初始状态出发,按照命令的执行先后顺序,在对应的状态 上应用某个可执行命令,造成状态的迁移,从而提取出迁移路径;

5)根据子系统内部的状态和提取的迁移路径生成扩展有限状态机;

6)根据生成的扩展有限状态机生成该子系统的测试用例。

2.如权利要求1所述的方法,其特征在于所述子系统包括:密码子系统,TCM管理子系统, 平台身份表识管理子系统,存储保护子系统,标识和鉴别子系统,完整性保护子系统, 可信路径子系统。

3.如权利要求1所述的方法,其特征在于对所述单值变量采用基于策略policy的划分方 法对状态取值进行划分;对所述集合变量采用基于类型的划分方法进行状态空间的划 分。

4.如权利要求1所述的方法,其特征在于对所述集合变量采用基于函数的集合划分方法 进行状态空间的划分:由集合T到类型V的函数f:T→V,且类型V是有限集, ran(f)={v1,v2...vn},则集合T的函数值划分为: π = { { t : T | f ( t ) = v 1 } , { t : T | f ( t ) = v 2 } , . . . , { t : T | f ( t ) = v n } } .

5.一种检测如权利要求1所述的测试用例生成方法所生成的测试用例的测试系统,其包 括:脚本解析引擎:分析描述测试用例的脚本,并对其进行解析,调用可信密码模块的命 令执行脚本;

结果分析引擎:对测试生成的结果进行分析,产生统计数据和统计报表,并生成综合 报告文档;

通信模块:与可信密码模块和数据库进行通信。

6.如权利要求5所述的系统,其特征在于所述脚本解析引擎所能识别的测试用例的脚本 语言为一种过程语言。

说明书 :

技术领域

本发明涉及一种嵌入式系统的测试方法及其系统,尤其涉及一种可信密码模块的测试 用例生成方法及其测试系统,属于计算机技术领域。

背景技术

可信计算平台技术是一种通过硬件信任根解决安全问题的新技术,可信平台模块(简称 TPM)是可信计算平台的核心和基础,是可信计算平台推广和应用的关键。可信计算平台的 发展与应用是和相应的技术规范分不开的,为了促进可信计算平台的发展,2003年,可信 计算组织(Trusted Computing Group,简称TCG)给出了可信平台模块(Trusted Platform Moduel,简称TPM)1.2规范,详细界定了TPM的功能。同时为了促进国内可信计算平台产 业的发展,国家商用密码管理办公室发布了国产可信密码模块(Trsuted Cryphographic Module,简称TCM)的相关标准,详细界定了国产TCM的功能。为可信计算平台在国内的 发展奠定了基础。
在可信平台模块的形式化分析和建模方面,Matthew Barrett对TPM的一些关键安全 机制进行了形式化分析,其建立的模型主要是用于安全性分析。同时Danilo Bruschi等 人对TPM的授权协议进行了形式化的分析,并且通过模型检测技术分析该协议存在的攻击 方法。
可信密码模块的测试方法和测试系统对可信密码模块的功能和符合性方面的要求进行 全面而完整的测试,需要一种完善的方案支持测试的实施。Ahmad-Reza Sadeghi等人针对 TPM给出了一个详细的测试方案并且给出了测试结果,对测试的结果进行了详细的分析。
所有这些针对TPM或者TCM的分析和测试方法都没有给出一个完整的系统,并且没有 给出一种如何从规范生成测试用例的方法。

发明内容

针对可信密码模块的测试需求,本发明提供了一种可信密码模块的测试用例生成方法 及其测试系统,其通过利用扩展有限状态机对可信密码模块进行建模,然后通过扩展有限 状态机生成测试用例,将测试用例输入到测试系统中对可信密码模块进行完整的测试,本 发明提高了测试的准确性和覆盖率,本发明提出的方法与系统能解决如下的问题:
(1)可信密码模块的形式化建模
目前国家商用密码管理办公室给出的TCM规范是描述性的,容易造成歧义,不利于产 品开发,因此给出一个准确的形式化模型是十分必要的,同时准确的形式化模型可以给TCM 的功能验证、分析以及形式化测试提供基础。
(2)一致性测试的测试用例的数量和质量问题
目前针对可信密码模块的测试用例都是手工来完成的,而手工测试最大的问题在于测 试的完整性和覆盖度问题无法解决,从而造成测试结果的可信度不高。此外,测试用例的 有效性将直接影响TCM的测试效率和测试成本,如何实现测试用例的自动生成成为亟需解 决的问题。
(3)可信密码模块的测试缺少自动化测试方案的支持
由于TCM规范涉及的内容广泛,纯手工的的测试需要大量的人力和物力,迫切需要一 种自动化的测试方案以支持测试的自动化,并提供相应的支撑系统。
测试用例的生成方法的步骤包括:
1、可信密码模块系统的划分
可信密码模块是一个完整的信息系统,其内部由多个有相互联系但并不十分紧密的系 统构成,首先根据可信密码模块系统内的功能进行划分,建立划分后的各个子系统的依赖 图。划分的粒度由具体情况而定;
2、子系统的扩展有限状态机的生成
在第1步子系统划分的基础上,针对各个子系统进行系统内部的建模,建立各个命令 之间的关系,生成子系统的扩展有限状态机;
3、测试用例的生成
根据生成的扩展有限状态机生成测试用例。
较佳地,第2步中生成扩展有限状态机可以采用如下的步骤和方法
1)对子系统内部的状态进行划分,形成子系统内部的状态;
2)建立子系统内的命令之间的执行顺序依赖图,
3)根据子系统内的状态,从初始状态出发,按照命令的执行先后顺序,在对应的状 态上应用某个可执行命令,造成状态的迁移,从而提取出迁移路径;
4)根据第1)、3)步生成的状态和迁移路径,即可形成扩展有限状态机。
较佳地,第1)步中的状态划分可以采用一种基于类型的状态划分方法,该状态提取 方法如下描述:
设决定状态空间的状态变量为x1.xi.xn,A1..Aj..Al,其中xi表示的是单值变量,类型分别为 T1,...,Tn,而Aj是一个集合变量,集合中的元素类型为TT1,...,TTl(类型决定了变量的取值 空间,本发明不区分类型和取值空间)
(a)初始状态空间为
S Initial Δ = { x 1 , . . . , x n , A 1 , . . . . , A l | x 1 T 1 , . . . , x n T n , A 1 P TT 1 , . . . , A l P TT l } ;
(b)状态的细分
下面根据状态变量的不同对状态进行细分:
■单值变量
基于一定的策略对单值变量xi的取值进行划分,如边界值分析法,类别划分方法。通 过这种方法可以将状态进一步的细分。基于策略policy,对状态S关于状态变量xi的划分 定义为:

其中ASj表示状态S经过状态变量xi细分之后的子状态,Pj是对xi变量进行约束的谓 词逻辑,如xi>=0;ASj1(xi)表示状态ASj1中状态变量xi的取值空间。
■集合变量
对集合变量,采用基于类型的划分方法进行状态空间的划分,先定义集合划分的概念:
定义3.2设A是一个非空集合,如果存在一个A的子集族π,满足以下条件:
1)
2)π中任意两个元素不相交;
3)π中所有元素的并集等于A;
则称π为集合A的一个划分。
■组合状态变量
如果内部存在的状态变量既包含单值变量x1,...xn,又包含集合变量A1,...,Al,那么最后 的状态空间是各个变量之间的完全组合。得到的状态数为
Π i = 1 , j = 1 i = n , j = l m i × ( 2 k j - 1 )
(c)状态的缩减
从上面的分析可以看出,如果状态变量的个数比较多,那么其存在的状态空间将会急 剧增加,一种解决办法是在状态细分这一步中,控制各个状态变量的划分粒度;另一种解 决办法是根据需求(如测试需求)对最后产生的状态空间进行限制,下面通过TCM状态的 提取来说明基于类型的状态划分方法。
较佳地,第(b)步中可以采用如下的一种基于函数的集合划分方法。
若存在由集合T到类型V的函数f:T→V,且类型V是有限集,ran(f)={v1,v2...vn}。 则集合T的函数值划分
π = { { t : T | f ( t ) = v 1 } , { t : T | f ( t ) = v 2 } , . . . , { t : T | f ( t ) = v n } } .
因此函数f按照状态集合变量Aj可对状态S进行划分,得到划分后的结果为:
Partition ( S , A j , f ) = { BS 1 , . . . , BS k j | { t : t BS 1 ( A j ) | f ( BS 1 ( A j ) ) = v 1 } . . . { t : t BS k j ( A j ) | f ( BS k j ( A j ) ) = v k j } }
其中BS1(Aj)表示状态BS1中集合变量Aj的取值空间中类型为TTj的元素集合。各个划分之 间互相组合得到最后的状态空间。划分之间进行状态组合得到状态空间的个数为:
C k j 1 + C k j 2 + . . . + C k j k j = 2 k j - 1 .
较佳地,第3步中生成测试用例时可以按照状态或者迁移标准为依据生成测试用例。
测试系统主要包括:
1、脚本解析引擎:分析描述测试用例的脚本,并对其进行解析,调用可信密码模块的 命令执行脚本;
2、结果分析引擎:对测试生成的结果进行分析,产生合适的统计数据和统计报表,并 生成综合报告文档;
3、通信模块:与可信密码模块和数据库进行通信。
较佳地,脚本解析引擎所能识别的测试用例的脚本语言采用一种过程语言,具体的脚 本语言可自行设计实现。
较佳地,可信密码模块与测试系统可以分布在不同的网络上,由通信模块完成数据的 交互与采集。
将生成的测试用例输入到测试系统中(以脚本的形式),由脚本解析引擎解释执行测试用 例就可以实现对测试用例进行测试。
本发明的积极效果:
采用本发明之后,测试用例可以以自动化的方式生成,避免了手工测试用例无法保证 测试完整性无法保证从而造成测试结果的可信度不高的问题。并且本发明给出的系统是一 个自动化的测试系统,减少了一些人工的干预,节省了成本。

附图说明

图1为可信密码模块测试用例生成方法;
图2为系统抽象状态和初始化定义;
图3为密钥生成,载入,载出操作模式;
图4为封装和解封操作模式;
图5为状态迁移的提取算法;
图6为密码子系统的EFSM图;
图7为可信密码模块测试系统结构图;
图8为TCM各个子系统依赖关系图;
图9为密码子系统内的命令依赖关系。

具体实施方式

下面结合附图详细描述本发明的具体实施方式。
首先对可信密码模块的子系统进行划分,根据各个子系统实现的功能进行严格划分, 这样各个划分后的子系统依赖程度低;这里可信密码模块可以分为如下各个子系统:密码 子系统,TCM管理子系统,平台身份表识管理子系统,存储保护子系统,标识和鉴别子系 统,完整性保护子系统,可信路径子系统。
各个子系统之间的依赖关系如图8所示,其中箭头指向表示依赖关系,如密码子系统 指向完整性保护子系统,表示密码子系统依赖完整性保护子系统。
其次分别对各个子系统进行EFSM建模,下面以可信密码模块的密码子系统为例说明 测试用例的生成方法,以TCM的密码子系统作为建模的对象。
在具体建模过程中,由于TCM规范中指定的具体数据结构比较复杂,需要进行一定程 度的数据抽象。从状态上看,TCM的初始状态是已经建立了属主身份(Take Owner),并 且TCM中将会保存有密钥的相关信息,最重要的是密钥的句柄以及密钥的属性(如类型), 引入如下的抽象数据类型和全局变量。
[KeyHandle,KeyType]
maxcount:N;
KeyType:=TCM_STORAGE|TCM_SIGN|TCM_BIND;
其中KeyHandle是TCM内部密钥的句柄类型;KeyType是密钥的类型,有三种不同的 密钥类型。
从操作上看,主要有创建密钥,销毁密钥,使用密钥等操作。密码子系统抽象状态以 及系统初始化定义的描述如图2所示,其中函数keyHasType将密钥句柄映射成不同的密钥 类型,初始时TCM内部有存储根密钥SRK。密钥生成,载入,载出操作模式如图3所示。
图4给出了TCM的封装操作以及解封操作的操作模式,其他关于TCM密钥的操作如解 密,签名操作可用类似的形式给出。
下面通过状态划分和迁移提取给出对应的扩展有限状态机(EFSM)图。密码子系统内的 状态根据Z规格说明的抽象状态进行划分。
1、密码子系统内状态的划分
在图2,图3给出的Z语言规格说明中,只有一个集合变量keys,并且存在一个约束 函数keyHasType。
(1)第一步:给出初始状态
S Initial Δ = { keys | # keys max count } ;
(2)第二步:状态的细分(集合变量)
Partition(SInitial,keys,keyHasType)={SSign,SStorage,SBind}
其中Ssign内的所有元素密钥句柄都为签名密钥,其他的定义类似。
(3)第三步:状态的组合
状态组合数 n = C 3 2 + C 3 1 + C 3 3 = 2 n - 1 = 7
因此最后给出的状态为:
s1={SSign},s2={SStorage},s3={SBind},s4={SSign,SStorage},s5={SStorage,SBind},
s6={SBind,SSign},s7={SBind,SSing,SStorage}
(4)第四步:状态的缩减
如果加上约束条件 P ( S ) A = { S | key keys , keyHasType ( key ) = TCW _ SIGn } , 状态空间 可以缩减为4个,分别为s1,s4,s6,s7。
2、建立密码子系统内的命令依赖关系
命令依赖关系如图9所示,其中箭头指向标识依赖关系,如TCMSeal指向TCMlocalkcy 表示TCMSeal依赖TCMlocalkey。
3、迁移的提取
图5给出了状态迁移的提取算法。
其中def(s)={key |key∈s},S为内部状态的集合,OP表示TCM操作的集合,在密码 子系统中,
OP={TCMCreateKey,TCMLoadKey,TCMEvictKey,TCMSeal,
TCMUnSeal,TCMSign,TCMVerify,TCMEncrypt,TCMDecrypt}
4、最后得到的EFSM图如图6所示:
具体的状态含义以及状态迁移见表1,表2所示,表1,表2中只给出了其中的一条 路径的迁移,其他路径的迁移是类似的。在迁移的标记(s-x,P/oP,y->s′)中,s表示当前 状态,x′表示迁移后的状态,x表示输入,P表示转移的条件,op表示转移中的操作,y 表示输出。其中涉及到的符号有,输入变量集合:xtag,xordinal,xKeyHandle,xkeyType;输出变量集 合:ytag,yretValue,yordinal,ykeyHandle,ykeyType。输入命令有:TCM_CWK(产生密钥), TCM_EK,TCM_LK,TCM_UB,TCM_Seal,TCM_UnSeal,TCM_Sign,符号ytag(value)表示对 变量ytag赋值value。环境变量和全局变量集合:keys(TCM中的句柄集合)等。
表1EFSM状态描述
  状态   描述   状态   描述   s0   初始状态,已经TakeOwner,拥有   SRK,并且TCM是enabled,处于   TCM的s1操作状态   s1   TCM内部都是加密密钥   s2   TCM内部都是签名密钥   s3   TCM内部都是存储密钥   s4   既有加密密钥,也有存储密钥   s5   内部既有签名密钥,又有   存储密钥   s6   既有加密密钥,又有签名密钥   s7   同时有加密密钥,签名密   钥,存储密钥
表2状态转换表
  状态迁移   描述   t1   {s0-TCM_CWK,Pt3/<yretValue(0),yordinal(TCM_CWK),ytag(RspTag),ykeyType(xkeyType)>,0->s0}   其中Pt3=(xtag(auth1Tag),xkeyHandle∈keys)   t2,t6,t11   {s2(s5,s7)-TCM_EK,Pt2/   <yretValue(0),yordinal(TCM_EK),ytag(RSPTag)>,0->s0(s2,s5)}   其中Pt2=<xtag(reqAuth),xkeyHandle∈keys>   t3,t5,t10   {s0(s2,s5)-TCM_LK,Pt3/<yretValue(0),yordinal(TCM_LK),ytag(resAuth1)>,其   0->s2(s5,s7)}   中Pt3=(xtag(reqA uth1),xpkeyHandle∈keys,xkeyType(SignKey))   t4,t7,t12   {s2(s5,s7)-TCM_Sign,Pt16/<ytag(rspAuth2),yretValue(0),yordinal(TCM_Sign)>,0->s2(s5,s7)}   其中Pt16=(xtag(reqAuth2))   t8,t13   {s5(s7)-TCM_Seal,Pt10/<ytag(rspAuth1),yretValue(0)>,0->s5(s7)}   其中Pt10=(xtag(reqAuth1),xkeyHandle ∈keys^xkeyType(TCM_STORAGE))   t9,t14   {s5(s7)-TCM_UnSeal,Pt11/<ytag(rspAuth2),yretValue(0),yordinal(TCM_UnSeal)>,0->s5(s7)}   其中Pt11=xtag(reqAuth2))   t15   {s7-TCM_UB,Pt9/<ytag(repAuth1),yretValue(0),yordinal(TCM_UB)>,0->s7}   其中Pt9=(xtag(reqAuth1),xKeyHandle∈keys)
最后通过EFSM图生成对应的测试用例,测试用例的生成遵循C.Bourhfir提出的生成 方法[参考:Automatic executable test case generation for EFSM specified protocols,C.Bourhfir, R.Dssouli,E.Aboulhamid,and N.Rico,IWTCS’97,pp.75-90,1997]。
测试系统的软件实现结构如图7所示,系统通过TDDL模块与可信密码模块进行交互, 其中测试系统、数据库、以及可信密码模块可以分布于不同的网络,通过网络通信协议进 行通信。