用于管理可重编程板载系统中下载的可执行代码的方法

文档序号:6663838阅读:159来源:国知局
专利名称:用于管理可重编程板载系统中下载的可执行代码的方法
技术领域
本发明涉及管理设计用于具体下载到板载微处理器计算机系统中的可执行代码的方法。
一般来说,本发明适用于通过下载由板载系统的微处理器可执行的一系列指令的形式的可执行代码组成的程序可重编程的任何板载系统。在可执行代码由中间对象代码构成的上下文中,本发明得到极有利的应用,中间对象代码可由板载系统的微处理器借助于通常称作虚拟机的中间代码解释器来执行,解释器配备了执行栈和由这些指令操纵的操作数的寄存器,并且使得能够解释这种中间代码。
更具体来说,以下描述涉及本发明在JavaCard类型的可重编程微处理器卡的上下文中的应用。
JavaCard类型的微处理器卡实际上通过下载英语术语中称为“applet(小应用程序)”的小程序的操作可重编程。
因为不同的板载计算机系统之间的可移植性,小应用程序采取标准虚拟机所用的代码的形式。以二进制形式编写的这种代码用作源代码与可执行二进制代码之间的中介,并且例如通过采用Java编译器来获得。因此,按英语术语为“bytecode(字节码)”的这种中间代码不是卡的微处理器直接可执行的,而是必须通过称作虚拟机的二进制代码解释器以软件方式来解释。让其中执行中间语言编写的小应用程序的卡配备组成构成虚拟机的程序的最小的特定数据处理资源是足够的。在JavaCard类型的卡的上述实例中,所使用的虚拟机是Java虚拟机的组件。
把小应用程序下载到配备了中间代码解释器的板载计算机系统上的操作引起一定数量的安全性问题。因此,无意间不良编写的小应用程序可能不正确地修改系统中已经存在的数据,阻碍主程序正确运行,或者通过使先前下载的其它小应用程序不可用或有害来对其进行修改。
另外,使用恶意编写的小应用程序,还可能在卡中执行复制存储区的操作和/或危害芯片卡的正确工作。然后则可能有权访问系统中存储的保密或者未授权数据,例如在银行卡的情况下的访问代码,或者攻击卡中存在的一个或多个应用程序的完整性。最后,如果卡连接到外部,则所导致的不正常工作可能传播到卡外。
因此,已经提出解决方案来补救把中间代码(字节码)下载到配备了中间代码解释器的板载计算机系统、如JavaCard的上述实例上的操作中涉及的安全性问题。
一种解决方案包括在小应用程序的运行过程中执行动态访问和定型检查。虚拟机则在小应用程序的运行过程中执行一定数量的检查,例如对存储器的存取的控制在存储区中每次读取或写入时,虚拟机检查小应用程序对相应数据的存取权;数据类型的动态检验在来自小应用程序的各指令上,虚拟机检验是否满足对数据类型的约束;栈溢出以及对虚拟机的执行栈的非法存取的检测。
但是,这个解决方案确实具有由所有动态检查引起的运行中极明显的速度降低的缺点。由于与所操作的数据关联所需的类型的附加信息,这类检查还增加了系统的随机存取和永久存储器方面的要求。
另一种解决方案则包括指定中间代码(字节码),以便能够检查程序是静态下(也就是说在下载操作中以及在其运行之前)无害的。这通过称作检验器的安全装置来执行。由于安全性原因,JavaCard卡必须具有板载检验器。
虽然它允许与动态检验过程相比更为迅速的中间代码的执行,但这种静态检验过程确实具有在进行这个过程所需的代码大小方面以及在包含检验的中间结果所需的随机存取存储器大小方面以及在计算时间方面昂贵的缺点。
从后一种解决方案中所述的原理开始,专利申请FR 2797963(D1)提供一种用于在其下载过程中管理与这个中间代码的静态检验的过程关联的下载中间代码的协议,它允许由板载计算机系统安全执行静态检验。这样,有利的是,获得检验器,它在所需代码大小方面更简单且更低廉。
D1的中心思想是在中间代码被下载之前对其进行卡外转换,以便简化它在下载及存储于卡中时的检验。因此,卡外执行中间代码的变换的阶段,因而下载到卡中的是修改后标准化中间代码,而不是通过使用Java编译器得到的原始中间代码。这样,卡外变换的中间代码将更易于根据预定检验过程以静态模式来检验,因为它已经变换为事先满足作为D1的对象的预定义检验过程的检验标准的标准化中间代码。因此,这个卡外执行的事先变换阶段有利地加速了检验过程。关于这种解决方案的详细描述,参考D1的原文。
但是,D1中提出的方法的一个缺点在于,它不能使它所基于的中间代码的检验过程与这个中间代码的签名系统共存。因此,D1不可能具有首先以简单迅速方式可检验、然后被签署的中间代码。这是因为D1所提出的方法为如上所述在下载之前卡外变换中间代码作准备,而因此在对中间代码实行卡外变换之前实现的代码的开发人员(或被授权签署该代码的其他任何人)的签名因这种修改的事实而变为无效。因此,签名则不再是卡可检验的。
但是,让卡能够检验下载中间代码的签名的可能性在安全性方面也是极为重要的。这是因为中间代码被运行之前对其的事先检验不能够确保中间代码不包含任何“特洛伊木马”。这是因为只有人工分析才有可能即使在对于检验是正确时检查中间代码不是侵略性的,这种检查无法由卡来执行。更准确地说,卡实际上只能检验签名的有效性,证实对于中间代码的这种人工检查被正确执行。因此,重要的是能够实现具有有效签名的中间代码的下载。
基于这些不同调查结果的本发明的目标是减少与作为D1的对象的检验方法的使用相关的上述缺陷。
考虑这个目的,本发明更具体地针对在中间代码下载到配备了中间代码解释器的可重编程板载计算机系统的过程中使签名系统与D1提出的检验系统共存,但没有免除根据D1的检验系统取得的优点,尤其是在简单性和速度方面。
更一般来说,本发明的一个目的是使用管理要下载的、无论是否为中间代码的可执行代码的方法,它允许由板载计算机系统、如微处理器卡对这个代码的签名进行检验,同时保持为预定的特定用途对可执行代码进行变换的可能性。例如,原始可执行代码的变换可能希望针对在借助于虚拟机来执行中间代码的情况下、在根据D1中阐述的检验过程的原理下载时改进其检验,或者改进它由卡的微处理器执行的速度,而这种变换不会损害签名的有效性,因而不会损害卡对它的检验。
为此,本发明因而涉及管理组成要用于下载到可重编程板载计算机系统、如微处理器卡中的程序的原始可执行代码的方法,所述代码具有加密签名,并且在由板载系统的微处理器对所述签名的有效性进行检验之后可由板载系统的微处理器执行,所述方法包括由至少以下步骤组成的步骤-卡外-标识与原始代码对应的、适合预定特定用途的已修改可执行代码;-根据原始代码与相应的修改代码的数据之间的差异,计算软件组件,它在应用于原始代码时,使得能够重构已修改代码;以及-签署所述软件组件;-把已签署原始代码和已签署软件组件下载到卡中;-卡上-分别检验原始代码和软件组件的签名;-把软件组件应用于原始代码,从而重构已修改代码以便由微处理器运行。
在一个变体中,原始可执行代码由中间代码构成,可由板载系统微处理器借助于使得能够解释这个中间代码的虚拟机来执行。
根据第一实施例,关于所述变体,虚拟机配备了执行栈,以及卡上应用于原始中间代码的下载软件组件使得能够重构事先满足所述中间代码的检验标准的已修改中间代码,根据它,所述代码的各指令的操作数属于这个指令操作的数据类型,以及在各目标开关指令,虚拟机的执行栈为空。
通过应用软件组件获得的已修改中间代码最好是在由微处理器借助于虚拟机执行之前,根据检验已修改中间代码是否满足检验标准的过程进行检验。
根据另一个实施例,在卡上应用于原始代码的下载软件组件使得能够重构已修改代码,使得它的执行比原始代码的执行更快。
根据另一个实施例,在卡上应用于原始代码的下载软件组件使得能够重构已修改代码,使得与原始代码相比,取得大小方面的优化。
通过下面参照以下附图作为说明而不是限制的描述,本发明的其它特征和优点将会更加清晰,附图包括

图1示意说明卡外执行的方法的步骤;图2示意说明将专用于预定的特定用途的原始中间代码及关联软件组件下载到卡中的步骤,以及图3示意说明卡上执行的方法的步骤。
以下描述更具体地针对本发明在开放式系统上下文中的应用,以及更具体地针对本发明在如图2所示的JavaCard CP类型的可重编程微处理器卡中的应用,其中,下载的原始代码是微处理器借助于虚拟机执行的中间代码。但不能忘记以下事实根据本发明的方法也适用于已下载卡不是中间代码、而是板载系统的微处理器可直接执行的代码的上下文中。
因此,这类可重编程系统增加了在系统投入使用之后通过下载小应用程序的操作增强可执行程序的可能性。要下载的小应用程序采取原始可执行代码CI的形式,在本例中包含驻留在卡的存储器中、通常为Java虚拟机的组件的虚拟机所用的中间代码。因此,一旦产生中间代码CI,则调用审计器,以便检验中间代码CI没有包含特洛伊木马。
在中间代码CI实际上没有包含这种类型的任何恶意程序的情况下,审计器签署中间代码CI。加密签名SIGN可采用本领域的技术人员可得到的任何电子签名机制来制作。已签署的中间代码CI则可用于任何JavaCard,因而具有证实其无害且在下载时能够由卡检验的签名SIGN。电子签名的检验包括检验签名是否有效。
本发明的一个基本特征包括把原始中间代码CI、也就是说未经修改的CI下载到卡CP中;以及对它添加软件组件CL,使得在它应用于原始中间代码时能够计算适合于预定特定用途的已修改中间代码CI’。在图中,原始中间代码CI通过连续线的代码行图解表示,而相应的已修改中间代码CI’则通过连续线和虚线的代码行图解表示。
根据本发明,根据原始中间代码CI以及为预定特定用途标识的相应已修改中间代码,在卡外计算要应用于已签署原始中间代码CI的补充软件CL。通过与对于原始中间代码CI的相同方式,软件组件CL经过签署,因而具有能够被检验的签名SIGN’。
本发明的主要应用是能够在中间代码下载到卡中的过程中使签名系统与D1提出的检验系统共存。因此,在这种应用的上下文中,中间代码CI’是适合于预定特定用途、包含事先满足作为D1的对象的检验过程的检验标准的已修改中间代码。因此,在本发明的主要应用中,软件组件经过计算,使得一旦应用于原始中间代码CI,得到已修改中间代码CI’,它根据D1的理论经过标准化,从而事先满足作为D1的对象的检验过程的检验标准。具体来说,根据D1的标准化中间代码使得各指令的操作数属于这个指令操作的数据的类型,以及在各目标开关指令,虚拟机的执行栈为空。关于更详细的描述,读者可有效地参考D1的原文。但是,在此详细说明使得能够以所定义的软件组件结束的计算,超出了本申请的范围,这些计算是本领域的技术人员更清楚的。
然后,原始中间代码CI及关联组件CL被下载到卡CP中,参见图2。因此,软件组件CL随原始中间代码CI传播,并且一旦与原始中间代码一起存储在卡的可重写永久存储器中时,用来在卡上应用于原始中间代码。
卡首先检验中间代码CI的签名SIGN是否有效,以便保证中间代码CI不包含任何特洛伊木马,也不包含相同类型的其它任何恶意代码。卡还检验软件组件CL的签名SIGN’的有效性,以便保证它也没有包含特洛伊木马。
一旦已经成功执行这些先前签名检验操作,卡把软件组件CL应用于原始中间代码CI,参见图3,以便重构适合于预定特定用途、在本发明的主要实施例中包含事先满足作为D1的对象的检验过程的检验标准的已修改代码CI’。
然后,在已修改中间代码由微处理器借助于虚拟机执行之前,卡可采用在作为D1的对象的程序段的静态检验过程中使用的检验技术来检验已修改中间代码。因此,检验过程包括检验已修改代码CI’是否满足上述检验标准,即,已修改代码的各指令的操作数属于这个指令操作的数据的类型,以及在各目标开关指令,虚拟机的执行栈为空。请读者参考D1的原文以获取更多详细情况,它们在本申请的上下文中是多余的。
然后,一旦已经根据作为D1的对象的检验器的原理进行了已修改中间代码的检验,已修改中间代码由微处理器借助于虚拟机来执行。
因此,根据本发明的方法使得能够在中间代码下载到可重编程板载计算机系统的过程中有利地使签名系统与D1提出的检验系统共存。因此,能够把已签署小应用程序下载到卡中,以及使卡能够检验这个签名,同时得到D1所公开的检验过程。这依靠要与已签署原始中间代码同时下载的软件组件成为可能,它在卡上应用于已签署原始中间代码时使得能够获得符合D1所公开的简单快速检验器的原理的已修改中间代码。
根据本发明下载到卡中的中间代码为原始中间代码,其签名不会通过卡外进行的任何修改过程而变为无效,因而卡能够在中间代码执行之前检验其签名。
但是,虽然所提出的主要应用涉及适用于根据D1所公开的原理的中间代码的检验,但本发明决不局限于这种应用。
一般来说,本发明适用于无论对于系统是否为中间代码的原始可执行代码以及关联软件组件到可重编程板载系统的下载,使得它在卡上应用于原始代码时,软件组件使得能够重构适合于预定特定用途的已修改代码。因此,目的可不同于获取允许根据D1的检验过程的应用的已修改代码。
具体来说,已修改代码所对应的预定特定用途可对应于代码的执行在时间方面的优化。因此,随原始代码一起下载的软件组件可经过计算,使得原始代码在通过组件的应用经过卡上修改后更快地被执行。在本发明的这个应用中,在卡上应用于原始代码的下载软件组件因而使得能够重构已修改代码,使得它的执行与原始代码相比更迅速。
同样,随原始代码一起下载的软件组件可经过计算,使得原始代码在通过组件的应用经过卡上修改后占用更少存储空间。在本发明的这个应用中,在卡上应用于原始代码的下载软件组件因而使得能够重构已修改代码,使得与原始代码相比,取得大小方面的优化。
下面通过说明提供的实例涉及目的在于获得已下载原始代码的执行速度和大小方面的优化的、软件组件在卡上应用于原始中间代码的具体情况。在这个实例中,已下载原始中间代码描述芯片卡程序中执行的正常操作,其中包括恢复设置在栈中的16位字的最低有效字节。
因此,设下列原始中间代码(符号表示和Java操作码)为
0x11 sspush 2550x000xFF0x53 sand;这个代码使得能够恢复设置在栈中的16位字的最低有效字节。对此,需要堆栈16位字,它的最高有效字节为0x00,它的最低有效字节为0xFF(sspush 255),然后在栈中的两个16位字之间进行逻辑“与”(sand)。
以及设相应的置换码为0xC9 Xsand 255;在这个具体实例中,要用来在卡上应用于原始中间代码的已下载软件组件的功能是采用置换码0xC9来置换指令系列0x11、0x00、0xFF、0x53,以便因而获得用于执行相同操作、但与原始中间代码相比取得6字节的节省、因此取得在由微处理器借助于虚拟机执行时大小和速度方面的优化的已修改中间代码。
无疑可设计其它应用,尽管如此,也没有背离本发明的范围。
权利要求
1.一种管理组成要用于下载到可重编程板载计算机系统、如微处理器卡(CP)中的程序的原始可执行代码的方法,所述代码具有加密签名(SIGN),并且在由板载系统的微处理器对所述签名的有效性进行检验之后可由板载系统的微处理器执行,所述方法包括由至少以下步骤组成的步骤-卡外-标识与原始代码对应的、适合预定特定用途的已修改可执行代码(CI’);-根据原始代码(CI)与相应的已修改代码(CI’)的数据之间的差异,计算软件组件(CL),它在应用于原始代码时,使得能够重构已修改代码;以及-签署所述软件组件(CL);-把已签署原始代码和已签署软件组件下载到卡中;-卡上-分别检验原始代码(CI)和软件组件(CL)的签名(SIGN,SIGN’);-把软件组件(CL)应用于原始代码(CI),从而重构已修改代码(CI’),以便由微处理器执行。
2.如权利要求1所述的方法,其特征在于,原始可执行代码(CI)由中间代码构成,可由板载系统微处理器借助于用于解释这个中间代码的虚拟机来执行。
3.如权利要求2所述的方法,其特征在于,虚拟机配备了执行栈,以及在卡上应用于原始中间代码(CI)的下载软件组件(CL)使得能够重构事先满足所述中间代码的检验标准的已修改中间代码(CI’),根据它,所述代码的各指令的操作数属于这个指令操作的数据类型,以及在各目标开关指令,虚拟机的执行栈为空。
4.如权利要求3所述的方法,其特征在于,通过应用软件组件获得的已修改中间代码(CI’)在由微处理器借助于虚拟机执行之前,根据检验已修改中间代码(CI’)是否满足检验标准的过程进行检验。
5.如权利要求1或2所述的方法,其特征在于,在卡上应用于原始代码(CI)的下载软件组件(CL)使得能够重构已修改代码,使得它的执行与原始代码的执行相比更快。
6.如权利要求1或2所述的方法,其特征在于,在卡上应用于原始代码(CI)的下载软件组件(CL)使得能够重构已修改代码,使得它与原始代码相比,取得在大小方面的优化。
全文摘要
本发明涉及用于管理下载到可重编程计算机板载系统、如微处理器卡(CP)的原始可执行代码(CI)的方法,所述代码包含加密签名(SIGN)并且在所述签名的有效性被检查之后可由微处理器执行。本发明方法包括以下步骤在卡外,标识与原始代码对应的适合预定特定用途的已修改可执行代码(CI’),计算软件组件(CL),它在应用于原始代码时使已修改代码能够重构,签署所述软件组件,把已签署原始代码和已签署软件组件下载到卡中;然后在卡上,检查原始代码和软件组件的签名(SIGN,SIGN’),把软件组件应用于原始代码,以便重构已修改代码,以便借助于微处理器执行。
文档编号G07F7/10GK1802631SQ200480015910
公开日2006年7月12日 申请日期2004年4月2日 优先权日2003年4月14日
发明者A·伯努瓦, L·鲁索 申请人:格姆普拉斯公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1