智能卡安全环境的控制方法

文档序号:6623838阅读:146来源:国知局
专利名称:智能卡安全环境的控制方法
技术领域
本发明涉及一种对智能卡安全环境进行控制的方法,具体地说,是指一种Java智能卡的安全环境管理系统的控制方法。
背景技术
随着Java智能卡的广泛应用,对于Java智能卡技术的研究也逐步展开。如何通过Java智能卡来提供一个安全计算环境,这包括代码安全性校验、下载过程的安全保证等多方面的问题。
Java智能卡技术是Java虚拟机技术向有限资源设备平台的移植。Java智能卡的Applet经过编译和转换后生成虚拟机指令集的字节码程序。这些字节码再由卡上虚拟机来运行。Java虚拟机早期的运行技术主要是解释执行机制,即将字节码通过解释程序翻译为相应的本地执行代码来运行,它适合于在资源较少的设备中使用。而后,为了提高字节码的执行速度,又相继提出了编译为本地代码执行、动态编译和JIT编译执行、HotSpot技术及直接的专用硬件结构执行等运行技术。编译为本地代码的方法虽然显著地提高了速度,但却一定程度地影响了Java语言的安全机制和可移植性,这在高安全性要求的智能卡应用中显然并不适合。动态编译、JIT编译技术和HotSpot技术是在运行时将字节码编译为本地代码,这需要大量的运行时的存储资源,这在通常只有2K左右RAM的智能卡中也不具可行性。
为了通过Java智能卡来提供一个安全计算环境,必须解决代码安全性校验、运行环境中的应用防火墙机制、下载过程的安全保证等多方面的问题。Java智能卡中的Applet经过编译和转换后生成Java智能卡虚拟机能够识别的字节码指令,而后再通过读写器下载到智能卡上。为了防止恶意Applet下载到Java卡上运行,必须对生成的字节码指令进行安全性校验。这主要包括防止Applet运行过程中出现栈溢出、非法的跳转指令以及非法的类型转换如将整数转换为对象引用、不兼容的对象引用间的转换等。这一过程必须在对Java卡指令类型系统形式化描述的基础上,结合Java卡虚拟机的特点,采用卡外生成代码证书卡内校验的方法来执行。

发明内容
本发明的目的是提供一种智能卡安全环境的管理方法,该管理方法为了给有限计算资源环境下的智能卡平台提供一个安全的计算环境,在Java卡卡内、卡外虚拟机结构的基础上,设计并实现了椭圆曲线数字签名的方法,卡外代码证书(CodeCertificate)的生成法和卡上字节码的安全校验法。
本发明的一种智能卡安全环境的控制方法,所述智能卡包括有智能卡硬件系统以及硬件系统相关的本地方法集、Java卡虚拟机、Java卡运行环境、Java卡类库和Java卡应用管理组件组成,下载至智能卡中的应用程序经过编译和转换后生成Java卡虚拟机指令集的字节码序列,所述字节码序列通过Java卡虚拟机来运行;所述Java卡虚拟机有卡内虚拟机和卡外虚拟机,卡外虚拟机实现对编译后的文件进行转换,生成CAP文件;卡内虚拟机实现执行CAP文件中的所述字节码序列;在卡内安全环境的控制中首先将由卡外虚拟机的转换器输出的所述字节码序列进行类型划界,得到第一校验类型和第二校验类型;然后采用校验规则对所述校验类型进行安全校验。
所述的智能卡安全环境的控制方法,其类型划界包括第一校验类型和第二校验类型。相对于校验类型的校验规则有第一校验规则和第二校验规则。
本发明的优点(一)加快了类型校验的速度,因为避免了指令分支交汇处的类型推断和反复叠代。(二)降低了对存储资源的要求。因为代码证书为只读信息,可存储在卡内容量较大的EEPROM中,校验完成后可删除。从而避免了在RAM中存储大量的需进行读写操作的类型推断的中间过程。(三)由于增加了卡内校验部分,所以提高了系统的安全性,避免了卡外校验采用签名加密机制所存在的单点安全失败问题(签名密钥泄漏)。


图1是Java智能卡的内部结构示意图。
图2是Java智能卡虚拟机的结构框图。
图3是基于proof-carrying机制的字节码安全校验结构。
图4是字节码安全校验的流程图。
图5是Java Card类型偏序集哈斯结构图。
具体实施例方式
下面将结合附图对本发明作进一步的详细说明。
Java智能卡中的Applet(应用程序)经过编译和转换后生成Java智能卡虚拟机能够识别的字节码指令,而后再通过读写器下载到智能卡上。为了防止恶意Applet下载到Java卡上运行,必须对生成的字节码指令进行安全性校验。
本发明的一种智能卡安全环境的控制方法,所述智能卡包括有智能卡硬件系统以及硬件系统相关的本地方法集、Java卡虚拟机、Java卡运行环境、Java卡类库和Java卡应用管理组件组成,下载至智能卡中的应用程序经过编译和转换后生成Java卡虚拟机指令集的字节码序列,所述字节码序列通过Java卡虚拟机来运行;所述Java卡虚拟机有卡内虚拟机和卡外虚拟机,卡外虚拟机实现对编译后的文件进行转换,生成CAP文件;卡内虚拟机实现执行CAP文件中的所述字节码序列;在卡内安全环境的控制中首先将由卡外虚拟机的转换器输出的所述字节码序列进行类型划界,得到第一校验类型和第二校验类型;然后采用校验规则对所述校验类型进行安全校验。根据对字节码序列的类型划界得到第一校验类型和第二校验类型,对于校验类型的校验规则有第一校验规则和第二校验规则。
本发明中的第一校验类型为实现所述CAP文件中的下载组件的结构化校验;第二校验类型为实现所述卡外虚拟机输出的字节码序列的类型校验。第一校验规则,对所述第一校验类型中的下载组件进行椭圆曲线数字签名,所述签名后的下载组件中含有基于椭圆曲线机制的数字签名信息,智能卡卡内的结构化校验器将对所述数字签名信息进行验证;第二校验规则,对所述第二校验类型中的字节码序列采用基于proof-carrying机制的字节码序列安全校验方法。
在本发明中,Java卡上的字节码安全校验可分为两个过程第一个过程为下载组件的结构化校验过程,即第一校验类型。第二个过程为字节码的类型校验过程,即第二校验类型。
对于第一校验类型过程而言,主要是用于校验下载组件的完整性和一致性。为了保证下载过程的安全,本发明中采取了对组件进行椭圆曲线数字签名的方法,在下载组件中含有基于椭圆曲线机制的数字签名信息,卡上结构化校验器会验证此签名信息,以防止下载过程中对组件的篡改。此外,第一校验类型还包括对于各个组件长度、格式、组成元素定义一致性的检查,以保证组件结构的正确性。
由于智能卡内有限的计算资源(2K RAM),因此在目前的硬件平台上无法完成全部的字节码安全校验过程,尤其是在类型偏序集合上的类型推断计算,因此我们结合Java智能卡卡内、卡外虚拟机的结构特点,采取了嵌入式设备上得到广泛应用的基于proof-carrying机制的字节码安全校验算法。即在卡外生成用于卡内校验使用的代码证书(Certificate),作为定制组件同字节码一起下载到卡内虚拟机。卡内虚拟机的字节码类型校验器使用证书作为辅助信息进行第二类型的校验,以加快整个卡内虚拟机的校验速度。
将JCVM程序P定义为方法的集合{m1,m2,…mn}。其中mi为对应于每个方法的唯一方法引用。我们使用H来代表JCVM中的堆,其中用于存放实例化对象,因此H可表示为实例化对象引用到实例化对象存储结构的映射,即H={...,objref <context,fieldToken=val,...>,...}。其中objref代表对象引用,fieldToken代表对象域,context代表对象上下文。将Java栈结构中的局部变量区定义为L={i vali,0≤i<n},并且定义L[k val]等于L,除了其中的k映射到val。我们将Java栈结构中的操作数栈定义为列表S={val0,val1...,valn-1},并且用S+val表示将值val压入栈S中。局部变量和操作数栈中的元素均为一个字(short类型的宽度)宽。使用J来表示JCVM中的Java栈。J中存储的帧表示为属性组(context,L,S,rpc),其中context表示当前的执行上下文,L表示局部变量区,S表示操作数栈,rpc表示当前方法执行结束后的返回地址。我们将运行状态表示为R=(bc,pc,J,L,S,H)。其中bc表示当前的异常处理状态,它只含有两个值throw和notThrow,分别表示已抛出异常和未抛出异常。程序P的执行可表示为一系列的运行状态R的转换。
此外,定义用于类型推断系统的类型信息,其定义如下类类型 cls=…类类型…接口类型 interface=…接口类型…引用为空类型 Null=空引用引用类型 ref=cls|interface|Null基本类型 prim=byte|short|boolean字节数组类型 byteArray=字节或布尔数组类型短整型数组类型 shortArray=短整型数组类型布尔数组类型 booleanArray=布尔数组类型引用数组类型 refArray=引用数组类型基本类型数组类型 primArray=byteArray|shortArray|booleanArray数组类型 array=primArray|refArrayreturnAddress类型returnAddress=返回地址类型不可用类型 unusable同时,在Java智能卡字节码指令类型集合上定义了一个自反、反对称、传递的关系≤对于α,β∈{clsn‾},]]>如果α≤β,则α扩展了(extends)β。若α∈{arrayn‾},]]>β为object类,则α≤β。若β为unusable,则α≤β。则在≤关系的定义下,JavaCard语言类型集合构成了一个偏序集,其哈斯图结构如图5所示。图中类型下的数字为相应类型的编码,这种编码规则主要用于加速偏序集上运算的速度。在类型推断系统中,经常需计算两种类型的最小上界LUB(α,β)。在此编码规则下,最小上界的运算可转换为相应类型编码的与(Λ)操作。
为了有效地表示字节码指令的形式化规范,我们引入了一些辅助类型的定义接口类型集合int ers={int erfacen‾}(n>0)]]>空类型 void数据类型ty=ref|prim数据类型或空类型tyOrVoid=ty|void未初始化的对象类型 raw=unin(pc,cls)|init(pc,cls)引用或数组类型 refOrArray=ref|array引用或未初始化对象类型 refOrRaw=ref|raw引用、数组或未初始化对象类型refOrAyyayOrRaw=ref|raw|array引用、未初始化对象、返回地址类型refOrRawOrAds=ref|raw|returnAddress引用、数组、未初始化对象、返回地址类型refOrArrayOrRawOrAds=ref|raw|returnAddress可用类型 usuable=ty|raw|returnAddress任意类型 any=usuable|unusable字节码安全校验算法的一个主要任务就是推断(在编译时)局部变量区和操作数栈中的运行时数据类型从而保证在运行时指令不会使用错误的数据类型。为此首先给出局部变量区类型表LT的形式化描述为LT={i anyi|0≤i<max_local},其中max_local为当前方法中局部变量的个数。并且定义LT[k any]等于LT,除了其中的k映射到any。此外,定义操作数栈类型表为ST=[usable0,usable1,...,usabletop],若使用max_stack表示当前方法中操作数栈的最大长度,则索引top<max_local。为了构建类型推断系统,我们将运行时的状态类型定义为∏=(LT,ST,Contour),其中Contour为一集合。并且将关系≤的定义扩展到运行时的状态类型集合上若LT={i anyi|0≤i<max_local},LT`={i any`i|0≤i<max_local},如果下式成立anymax_local-1≤anymax_local-1′‾,]]>则LT≤LT`。
若ST=[usablen‾],]]>ST′=[usable′n‾],]]>如果下式成立usablen≤usable′n‾,]]>则ST≤ST`。
若∏=(ST,LT,Contour),∏`=(ST`,LT`,Contour`),如果下列条件成立ST≤ST`,LT≤LT`,ContourContour`,则∏≤∏`。∏≤∏`意味着对于所有可应用于状态类型∏`的指令均适用于状态类型∏。
对于类型推断系统,我们使用pc⊥∏来表示在地址pc处所具有的编译时状态类型∏。由于pc地址处的状态类型不仅依赖于指令本身,而且还依赖于到达pc处的指令执行路径,即对于一个pc地址会存在多个状态类型,因此我们使用pc⊥≤∏来表示其中的一种状态类型,这表示pc处所有可应用于状态类型∏`的指令均适用于状态类型∏。
在本发明中引入基于proof-carrying机制的字节码安全校验算法前,我们首先介绍传统的字节码校验算法。通常,卡内类型校验器采用数据流分析(Data FlowAnalysis)方法来进行字节码安全性校验。整个分析过程以单个方法为单位进行,相当于一个类型层面上的抽象解释器。方法入口处的类型信息由字节码所携带的证书来提供,并使用这些信息来初始化函数入口处的局部变量区类型。对于方法中的每条指令,设置标志位“Changed”,在一个新的方法校验开始时,只有第一条指令的标志位为1。接下来进入数据流分析的主循环过程步骤一查找到一条标志位为1的字节码指令,并置标志位为0。如果不存在标志位为1的指令,则方法校验过程成功结束,退出主循环过程。
步骤二依据当前指令的类型规则(在上一节中已定义)来执行指令,如果当前指令不能满足类型规则,则指令执行失败,方法校验过程失败,退出主循环过程。
步骤三确定当前指令的后续指令,可为如下的任一指令a.如果当前指令为非跳转指令、返回指令和抛出异常指令,则为当前指令的下一条指令。如果超出了当前方法的指令地址空间,则指令执行失败,方法校验过程失败,退出主循环过程。
b.如果当前指令为跳转指令,则为跳转指令目的地址处的字节码指令。
c.当前指令所对应的异常处理句柄。
步骤四合并当前指令执行结束后的类型状态到后续指令中a.如果后续指令未被访问过,则将当前指令执行结束后的类型状态作为后续指令的前续类型状态,置后续指令的标志位为1。
b.如果后续指令已被访问过,则合并当前的类型状态和已有的后续指令的前续类型状态,如果类型状态发生改变,则置后续指令的标志位为1。
c.类型信息合并的过程即为求两个类型LUB的过程,对于操作数栈,合并后不能存在unusable类型,并且合并的操作数栈必须具有相同的高度。否则方法校验过程失败,退出主循环过程。
d.对于通过jsr调用的子过程(Subroutine)我们另行考虑,在下文中有更详细的讨论。
步骤五跳转到步骤一。
由于子过程的调用相对比较复杂,存在多条执行路径同时到达的问题,并且会存在在同一局部变量中存储不同数据类型而不能进行类型合并的问题。因此,为了正确地描述子过程的处理,在参考Sun提供的Java卡开发工具的方法中,本发明采用在类型推断系统中引入了Contour,其定义如下pc⊥∏[ST,LT,Contour] 在子过程中进行类型推断时,具有不同Contour的指令不进行类型合并,即来自不同执行路径的指令的类型信息之间互不影响,并且会将不同路径的类型信息在子过程结束后正确地带给后续指令。
如果上述主循环过程成功结束,则表示当前方法的字节码通过了安全性校验,否则表示校验失败。如果当前包中全部的方法均通过校验,则表示当前包是安全可用的,否则拒绝执行当前包中的程序。
在上述的主循环校验过程中可见,其中的第四步骤必须按照4.c中的规则进行类型偏序集合上的类型推断计算,并且如果发生了类型信息的改变,必须执行4.b进行新一轮的叠代。这对于存储资源和执行速度都提出了较高的要求,因此,为了避免这一问题,基于proof-carrying机制的字节码安全校验算法对程序分支交汇地址处的类型信息进行判断,如果发生类型推断过程(求两个类型信息的LUB),则首先通过卡外的校验过程生成此信息,存储在代码证书(Certificate)中,并将证书作为用户定制组件(Custom component),同其他组件一起下载到智能卡上。为了节约存储空间,在证书中只存储相应的需进行类型推断并发生了改变的元素信息和方法入口处的元素信息,证书的数据结构定义如下 其中pc为程序分支的交汇地址(或方法入口地址),LT用于存储局部变量区中的变化类型信息(或方法入口的局部变量类型信息),ST用于存储操作数栈中的变化类型信息。因此,校验过程中的第四步骤改写为4.a如果后续指令未被访问过且在证书中存在后续指令的pc地址,则将当前指令执行结束后的类型∏c同证书中的类型∏δ相比较,如果∏c≤∏δ,则采用∏δ作为合并后的类型状态,置后续指令的标志位为1。否则校验失败,退出主循环过程。如果后续指令未被访问过且在证书中不存在后续指令的pc地址,则将当前指令执行结束后的类型状态作为后续指令的前续类型状态,置后续指令的标志位为1。
4.b如果后续指令已被访问过,则将当前指令执行结束后的类型∏c同证书中后续指令pc处的类型∏δ相比较,如果∏c≤∏δ,跳转到步骤5。否则校验失败,退出主循环过程。
4.c此步骤取消。
4.d此步骤不变。
这一算法具有如下的三个优点(1)加快了类型校验的速度,因为避免了指令分支交汇处的类型推断和反复叠代。
(2)降低了对存储资源的要求。因为代码证书为只读信息,可存储在卡内容量较大的EEPROM中,校验完成后可删除。从而避免了在RAM中存储大量的需进行读写操作的类型推断的中间过程。
(3)由于增加了卡内校验部分,所以提高了系统的安全性,避免了卡外校验采用签名加密机制所存在的单点安全失败问题(签名密钥泄漏)。
权利要求
1.一种智能卡安全环境的控制方法,所述智能卡包括有智能卡硬件系统以及硬件系统相关的本地方法集,其特征在于还包括有Java卡虚拟机、Java卡运行环境、Java卡类库和Java卡应用管理组件组成,下载至智能卡中的应用程序经过编译和转换后生成Java卡虚拟机指令集的字节码序列,所述字节码序列通过Java卡虚拟机来运行;所述Java卡虚拟机有卡内虚拟机和卡外虚拟机,卡外虚拟机实现对编译后的文件进行转换,生成CAP文件;卡内虚拟机实现执行CAP文件中的所述字节码序列;在卡内安全环境的控制中首先将由卡外虚拟机的转换器输出的所述字节码序列进行类型划界,得到第一校验类型和第二校验类型;然后采用校验规则对所述校验类型进行安全校验。
2.根据权利要求1所述的智能卡安全环境的控制方法,其特征在于第一校验类型为实现所述CAP文件中的下载组件的结构化校验;第二校验类型为实现所述卡外虚拟机输出的字节码序列的类型校验。
3.根据权利要求1所述的智能卡安全环境的控制方法,其特征在于第一校验规则,对所述第一校验类型中的下载组件进行椭圆曲线数字签名,所述签名后的下载组件中含有基于椭圆曲线机制的数字签名信息,智能卡卡内的结构化校验器将对所述数字签名信息进行验证;第二校验规则,对所述第二校验类型中的字节码序列采用基于proof-carrying机制的字节码序列安全校验方法。
4.根据权利要求1所述的智能卡安全环境的控制方法,其特征在于在第二校验规则中对所述第二校验类型依照基于proof-carrying机制的字节码安全校验方法是对程序分支交汇地址处的元素信息进行判断,对所述智能卡的类型推断进行卡外校验生成所述卡外校验信息,并存储在代码证书(Certificate)中;对所述代码证书制定成用户定制组件(Custom component),并对所述用户定制组件与所述下载组件一并下载到智能卡上。
5.根据权利要求4所述的智能卡安全环境的控制方法,其特征在于基于proof-carrying机制的字节码安全校验方法中数据流分析的主循环过程为步骤一查找到一条标志位为1的字节码指令,并置标志位为O。如果不存在标志位为1的指令,则方法校验过程成功结束,退出主循环过程;步骤二依据当前指令的类型规则来执行指令,如果当前指令不能满足类型规则,则指令执行失败,方法校验过程失败,退出主循环过程;步骤三确定当前指令的后续指令;步骤四合并当前指令执行结束后的类型状态到后续指令中;步骤五跳转到步骤一。
6.根据权利要求4所述的智能卡安全环境的控制方法,其特征在于所述代码证书中存储的所述卡外校验信息为进行所述类型推断改变后的元素信息和所述程序分支交汇地址处的元素信息。
全文摘要
本发明公开了一种智能卡安全环境的控制方法,下载至智能卡中的应用程序经过编译和转换后生成Java卡虚拟机指令集的字节码序列,所述字节码序列通过Java卡虚拟机来运行;所述Java卡虚拟机有卡内虚拟机和卡外虚拟机,卡外虚拟机实现对编译后的文件进行转换,生成CAP文件;卡内虚拟机实现执行CAP文件中的所述字节码序列;在卡内安全环境的控制中首先将由卡外虚拟机的转换器输出的所述字节码序列进行类型划界,得到第一校验类型和第二校验类型;然后采用校验规则对所述校验类型进行安全校验。本发明的智能卡安全环境控制方法,在Java卡卡内、卡外虚拟机结构的基础上,设计并实现了椭圆曲线数字签名以及卡外代码证书的生成法和卡上字节码序列的安全校验。
文档编号G06F1/00GK1687862SQ20051007716
公开日2005年10月26日 申请日期2005年6月16日 优先权日2005年6月16日
发明者杨东凯, 张其善, 姚黎明, 吴鑫山 申请人:北京航空航天大学
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1