已编译程序的安装,尤其是在芯片卡中的安装 本发明涉及到对以中间语言进行编译的程序的安装,例如以面向对象的高级语言进行初始编写,并且必须下载和运行在低存储容量和数据处理容量的数据处理设备中的业务应用程序或程序库。数据处理设备例如是诸如芯片卡之类的便携式电子对象。
更特别地,本发明涉及在数据处理设备中安装已编译程序时,检验加载到数据处理设备中的已编译程序的过程。
为人们所周知的是,数据处理设备中的代码检验器检验在所加载已编译程序中的低级安全特性,以确保加载的代码不会对处理装置地安全机制产生影响,特别是对包含在解释器和存储管理装置中的处理装置的安全机制产生影响。检验主要包括分析加载的代码,比较包含在已编译程序中的信息并保存其中的一些信息。但是,在诸如芯片卡之类的其资源相对有限的处理设备中代码检验器的集成在以下方面会会产生问题,即存储器的大小以及执行检验操作所需的时间这两个方面。
为了改进以中间语言编译的程序检验器的集成,可以在处理设备的外部修改已编译程序,同时还确保该程序具有相同含义,但是便于检验。然而,修改已编译程序使该程序与能接收初始未修改的已编译程序的处理设备不相兼容。
本发明的目的是使已编译程序能够更快捷地在数据处理设备中安装,而不需要对程序的解释进行修改。
为了实现该目标,本发明提供了一种安装由若干个组件组成的程序的方法,并且该程序是在数据处理设备外部编译以便在该数据处理设备中运行,其特征在于包括步骤:
-在数据处理设备的外部检测在已编译程序的组件中的预定安装信息,
-构造第一和第二附加组件,它们包含检测到的预定信息,分别是:被重新形成(reformulate)并且也是在数据处理设备中安装其它程序所必需的信息,以及是重新形成并且仅仅是安装所述已编译程序所必需的信息,
-从外部将已编译程序以及第一和第二附加组件加载到数据处理设备中,
-根据在第一和第二附加组件中重新形成的预定信息来安装所加载的已编译程序。
这样本发明不用将信息附加到要运行的已编译程序上,并且由于在检验已编译程序过程的访问时间和存储容量方面的最优化,本发明是用于快速访问安装程序所必需的信息的高效技术方案。
为了减少安装之后由已编译程序所占用的存储位置的大小,该方法包括在运行任何已编译程序之前,删除在数据处理设备中的第二附加组件的步骤。
另外,在加载的已编译程序中的预定信息可以不被部分的存储。
根据本发明的另一个方面,为了适配于诸如芯片卡之类的一个范畴内的任何数据处理设备,本发明的方法,特别是已编译程序的预处理,包括在处理设备外部执行的检测步骤和构造步骤,该方法包括识别在数据处理设备中的第一和第二附加组件,以便如果数据处理设备不能识别出第一和第二附加组件,就仅仅存储所加载的已编译程序而不存储附加组件,如果数据处理设备识别出第一和第二附加组件,就存储不具有检测到的预定信息但具有附加组件的已编译程序。
根据本发明的一个优选实施例,被检测的预定信息可以涉及到已编译程序的格式和类型(typologisation),并且安装步骤包括依据重新形成的预定信息来检验所加载已编译程序的格式,和检验所加载已编译程序的类型的步骤。
本发明的其它特征和优点将从下文参考图1对几个优选实施例的叙述中更加清楚的表现,图1是在接收终端中芯片卡类型的服务器和客户机系统的框图,其中显示了根据本发明安装已编译程序的主要方法步骤。
图1中是一个常规方式的客户机/服务器系统,它包括用于执行根据本发明的程序安装方法的软件装置。客户机和服务器通过RES因特网类型的电信网络连接起来。
客户机是具有低存储容量和数据处理容量的数据处理设备。典型地,客户机是芯片卡类型CP的便携式电子对象,也称为微控制器卡或集成电路卡,它可拆卸地封装在接收终端TE的读出装置中。在下文中作为数据处理设备实例进行引用的芯片卡是任何公知类型的带有或不带有触点的芯片卡,也可以是支付卡、电话卡、附加卡、游戏卡等。
电子终端TE可以是个人电子计算机PC或银行终端或销售终端的点。根据本发明另一个变型,终端TE和芯片卡CA可以是移动蜂窝式无线电话终端和可拆卸的电话用户识别模块SIM(用户识别模块)。根据本发明的再一个变型,数据处理设备可以是诸如个人数字助理PDA(个人数字助理)的便携式电子对象,或者是通过调制解调器连接到电信网络RES的电子钱包。
图1中叙述的功能块涉及到与本发明之间具有链接的功能,以及可以分别植入服务器SE和芯片卡CP中的软件和/或硬件模块。
图1也显示了根据本发明安装已编译程序的步骤,这些步骤分别由服务器和芯片卡CP中的功能单元来执行。
接收终端TE被认为对安装过程透明,也就是说它不会直接干预与已编译程序安装有关的处理。服务器SE是作为在芯片卡CP外部的电子装置,可以是例如因特网站点的服务器,该站点属于芯片卡CP的编辑器或属于在芯片卡CP中下载的源程序PG的编辑器。
下文中假定要在芯片卡CP中加载和运行的源程序PG是以面向对象类型的高级语言初始编写的,例如是以Java语言,或更特别地以Java Card语言来初始编写。
采用周知的方式,服务器SE包括编译器CM,该编译器将以JavaCard源语言的程序PG转换成以中间语言的已编译程序PGC,也称为伪代码,它包括由字节构成的指令字,被称为字节码,它们准备由构成芯片卡CP中的Java Card虚拟机的解释器IT来执行。
在本发明的含义中,已编译程序PGC是应用程序,也就是说一个已编译文件是由若干个软件组件CO所构成,该软件组件可以各自对应于一个对象的类,或者对应以包的形式聚合在一起的多个对象的类,或是对应一个接口。
诸如类之类的组件包括预定信息IP,根据本发明,该预定信息IP是在芯片卡CP中安装已编译程序所必需的。该信息IP有助于在加载过程中和在芯片卡CP中运行任何已编译程序之前检验所编译的程序PGC。信息IP基本上是涉及已编译程序PGC的格式和类型。格式检验基本上是涉及已编译程序的语法和/或结构,例如属性域的正确长度,指令的正确格式,等等。类型涉及到在已编译程序PGC的组件中代码的语义和语法,以便确保在组件内部以及在已编译程序的组件和其他程序的组件之间的指令相关性(一致性)。
如图1所示,为了实现本发明,服务器SE包括已编译程序预处理模块PT,它基本上是在芯片卡CP的外部执行本发明的两个方法步骤:检测步骤S1,用于检测与已编译程序PGC的组件CO中的格式和类型相关的预定信息IP,和构造步骤S2,用于构造两个附加组件CAD1和CAD2。
在步骤S1,预处理模块PT检测在已编译程序PGC的组件CO中的预定信息IP,该信息涉及到程序PGC的格式和类型,并将随后在芯片卡CP中用于对该格式和类型的检验。检测到的信息不从组件CO中提取出来,而只是在服务器的预定存储位置中进行复制,以便在下面的步骤S2中构造两个附加组件。这样,在已编译程序PGC中的组件CO就不会在预处理模块PT中被修改,从而使接收已编译程序PGC和不能识别附加组件CAD1和CAD2的任何芯片卡都能运行未经修改的已编译程序。
构造附加组件S2的步骤主要包括重新形成在组件CO中检测到的预定信息IP,以及将它们分为两类:随后检验其它程序所需的信息,以及只是检验该已编译程序所需的信息,后者可以至少部分地删除。
预处理模块PT分析所检测到的预定信息,以便对预定信息进行重新形成,从而在安装已编译程序时使它的访问更快速,并减少由检测的信息IP设置的存储空间的大小、更一般地是由已编译程序PGC设置的存储空间的大小。例如,模块PT消除了检测到的信息IP中的冗余,根据一个特定的实例,当两个标签识别出与表格中具有相同内容的两个结构有关的两个输入时,就在步骤S2删除两个输入中的一个,例如,该相同内容与constant_pool域相关。
依据重新形成的预定信息IP是否是唯一用于在芯片卡CP中安装已编译程序PGC,该信息被分类成两个附加组件CAD1和CAD2。
第一附加组件CAD1包含被输出的信息IP,也就是说,对于其他程序是可访问的。在安装了该已编译程序PGC之后,该第一重新形成的预定信息必须存储在芯片卡CP中。这是由于例如涉及到类域的第一信息可以用于检验特别是其它的应用程序或包或组件,也就是其它在芯片卡CP中随后输入的已编译程序,因此必须对于随后在卡中的检验是可访问的。这样,根据它们的输出特性,在第一附加组件CAD1中分类的重新形成的预定信息就对于所有的应用程序是可访问的,因此,对于在芯片卡CP中安装的这些程序的所有组件是可访问的。
另一方面,被分类在第二附加组件CAD2中的第二重新形成的预定信息是不被输出的信息,以便使它仅仅在所谈及的已编译程序PGC中是可见的,并使它不能由其它包或其它程序来访问。该第二重新形成的预定信息将只用于在芯片卡CP内安装已编译程序PGC,也就是说只用于检验程序PGC,因此在安装之后就不用被保存在卡内的存储器中,从而减少了程序PGC所占用的存储空间,这将在下文中叙述。
为了构造附加的两个组件CAD1和CAD2,预处理模块PT使用了由Java Card语言设计者提供的已知的编译程序扩展机制。
在一个变型中,不是检测与已编译程序PGC的组件CO中的格式和类型有关的预定信息IP,步骤S1复制称为“描述符”DES的特定组件,该“描述符”DES包含在程序PGC中,并且已经包含了随后检验所必需的预定信息IP。这种变型涉及Java Card语言环境,对Java Card语言的检验过程必须适合芯片卡CP中早已存在的执行环境,也就是说,后者中的虚拟机IT不能被修改。
根据Java Card语言的规范,包含在已编译程序PGC中的描述符组件DES足够用于分析和检验所有的已编译程序组件。然而,由于包含在描述符内的信息不是以特定的顺序来分类,因此就并不容易搜索包含在已编译程序中的描述符DES内的信息。因此,还是对于这种变型,步骤S2重新形成在描述符DES中设置的预定信息IP,并将它们分类为分别具有输出和非输出特性的两个附加组件CAD1和CAD2。第一附加组件CAD1包含预定的格式和类型信息,该类型信息被强制存储,以便检验其他的输入程序,这样就构成了一个描述符组件“输出”。第二附加组件CAD2包括预定的格式和类型信息,该类型信息是只用于检验已编译程序PGC,而对于其它的已编译程序是不可访问的,也就是说,对于不属于已编译程序PGC的其它类或其它包或接口是不可访问的,这样就构成了“内部”描述符组件。
在服务器SE内的后续步骤S3中,可能是安全的加载器CH将已编译程序PGC和两个附加组件CAD1和CAD2汇编在例如一个网页上,该网页通过因特网RES和终端TE被下载到芯片卡CP中。
从服务器SE中下载已编译程序PGC是以透明的方式通过浏览器和终端TE的插件类型或代理类型的中间软件模块来执行。
如图1中所示,在芯片卡CP内包含的检验器VER执行根据本发明的已编译程序安装方法的其它步骤C1到C5。
正如我们所知道的,芯片卡CP也包括链接编辑器ED和构成Java Card虚拟机的解释器IT。所有这些软件模块被设置在芯片卡的非改写存储器ROM和非易失性存储器EEPROM中。
检验器VER检验下载的已编译程序PGC的格式和类型,链接编辑器ED提供在下载的程序PGC的组件CO与已经安装在芯片卡CP中的应用程序的那些组件之间的链接。解释器IT例如是一个虚拟机,它解释已编译程序PGC的标准化指令,以便通过卡的微处理器PR以本机代码的形式来运行后者。
在步骤C1中,检验器VER通过检验在程序PGC扩展部分中的附加组件CAD1和CAD2的识别符,开始对加载的已编译程序PGC进行检验。如果检验器不能识别出附加组件,在步骤C11中,如已编译程序的格式所规定的,芯片卡的ROM和EEPROM存储器就记录具有非重新形成预定信息IP或未改变的描述符DES的已编译程序PGC,并且ROM和EEPROM存储器并不记录芯片卡所忽略的附加组件CAD1和CAD2。这种情况下,芯片卡将随后以已知的方式执行未改变的程序PGC。
另一个方面,如果检验器VER在步骤C1中识别出附加组件CAD1和CAD2,也就是说如果解释器IT能够使用附加组件,在步骤C2,芯片卡的非易失性存储器就存储已编译程序PGC,并只部分存储包含在程序PGC内的非重新形成的检测到的预定信息IP,或不存储包含在程序PGC内非重新形成的检测到的描述符DES,并存储附加组件CAD1和CAD2。
然后检验器VER使用包含在附加组件CAD1和CAD2内的重新形成预定信息IP,来继续进行两个适当的检验步骤C3和C4。
步骤C3是结构检验,用于确保已编译程序PGC中的所有数据都具有正确的格式以便随后由解释器IT执行。步骤C3不仅检查已编译程序PGC的域格式,而且还检查其它的诸如姓名、属性、标签和指令之类的特性的格式,以及检查这些特性在表格中的正确对应。通过更容易因而更快捷地访问与在附加组件CAD1和CAD2中重新形成的格式相关的信息IP,这些检查得以简化。如果在步骤C3中检查到格式之一不正确,则检验器VER就在步骤C34中停止当前的检验,并删除在芯片卡CP的存储器内的已编译程序PGC和附加组件CAD1和CAD2。
如果上面的结构检验被成功执行,在下面的步骤C4中检验器VER检验该已编译程序是否遵守在编程语言中定义的类型规则,在这种情况下是Java Card语言中定义的类型规则。与在先前的步骤C3中一样,类型检验通过组织和重新形成预定数据IP而得以简化,这些预定数据IP与包含在组件CAD1和CAD2中的类型有关。特别地,该类型检验包括对已编译程序的各个域的语义检验,对域和参数特征标记(parameter signature)的语法检验,对支持指令的每个代码行的一致性的检验,其中该指令由操作码和可能的一个或多个操作数组成,对constant_pool域的引用的检验,对在程序的软件组件CO之间的指令一致性的检验,等等。如果类型的检验指示已编译程序PGC中有任何的不一致性或错误,检验器VER就在步骤C34中停止检验,并删除芯片卡存储器内的已编译程序PGC和附加组件CAD1和CAD2。
在这个阶段中,如果加载的已编译程序PGC在步骤C3和C4中的检验是肯定的,芯片卡CP就接受该已编译程序PGC,以便随后由解释器IT来运行。
然而,具有附加组件CAD1和CAD2的整个已编译程序PGC包含了很多不是随后运行该程序所必需的信息,例如分类在私用性质的第二附加组件CAD2中的类型信息。在后面的步骤C5中,检验器直接删除在芯片卡CP的非易失存储器中结合在第二附加组件CAD2中的私用预定信息。对组件CAD2的删除减少了由程序PGC和第一附加组件CAD1所占用的存储空间的大小。
由于第一组件CAD1包含了将在随后用于检验特别是在后面下载的其它已编译程序的公共预定信息,因此该第一组件CAD1被存储在存储器中。根据在服务器SE的模块PT中的预处理,检验器VER不需要搜寻在已编译程序中被分散的以及需要用于随后执行的信息。除了当在编辑器ED中编辑链接时某些在第一附加组件CAD1中的数据可以被修改但对该组件CAD1的结构不施加改变之外,没有必要作结构修改以便存储第一附加组件CAD1。然后准备在解释器IT中来执行已编译程序。
尽管步骤C1到C5是在链接编辑器ED之前的检验器VER中显示,但加载、检验、链接编辑和解释可以以流的方式来执行,几乎是与已编译程序PGC加载到卡CP同时进行。在解释之前,可以提供对具有组件CAD1和CAD2的已编译程序的压缩,准备它或者执行它可以部分或完全在服务器SE中、或在卡CP中、或在两者中同时进行。
本发明并不局限于上面叙述的优选实施例,而是涉及以面向对象的源语言来初始表示的所有程序,和除了芯片卡之外的具有相对小存储和处理容量的任何数据处理设备。