应用执行装置及应用执行装置的应用执行方法

文档序号:6656461阅读:207来源:国知局
专利名称:应用执行装置及应用执行装置的应用执行方法
技术领域
本发明涉及执行应用程序(特别是用Java(注册商标)语言描述的程序)的应用执行装置,涉及在执行从因特网或DVD等外部媒体下载的应用时防止应用被非法盗听、篡改的技术。
背景技术
在现有的数字TV或便携式电话机等电子设备中,搭载着下载并执行用Java(注册商标)语言描述的应用程序的功能的设备正在增加。例如,在便携式电话机中,NTT DoCoMo提供被称作i-appli(注册商标)的服务。该服务是便携式电话终端从位于因特网上的应用分发服务器下载Java(注册商标)程序,并在终端上执行。
而且在欧洲,确定了被称作DVB-MHP(Digital VideoBroadcasting-Multimedia Home Platform)的规格,并已经开始了基于规格的运用。在基于DVB-MHP规格的数字广播中,数字TV接收被复用在广播波上的Java(注册商标)程序,并执行该程序。
在这样的应用程序分发服务器中,被分发的应用程序必须用该应用程序的研发者的知识产权来保护,防止有恶意的攻击者盗听该应用程序。而且,必须防止被有恶意的攻击者篡改的应用程序进行使用者或程序制作者未打算的动作。
近年的电子设备有多个软件模块构成。如果是具有专业知识的人,则可能通过滥用这些软件模块的缺陷(bug)来篡改电子设备内的软件。而且,使用调试器(debugger)或IEC(In-Circuit Emulator)等工具也能够实现同样的事情。因此,例如在Java(注册商标)程序中包含有著作权管理功能或收费功能的情况下,发生使这些功能无效的问题。预料今后随着利用网络等的Java(注册商标)应用程序的分发业务正式化,这样的应用程序的盗听、篡改的问题将变得严重。
以前,为了防止滥用软件模块的缺陷或使用调试器、ICE等工具分析、篡改存储器上的程序,对原来的程序使用复杂化和加密的方法。
所谓“复杂化”是指通过实施处理的分割、出现顺序的交换、条件的插入等处理,虽然动作与原来的程序相同,但变换为更复杂的程序,使程序本体复杂的方法,所谓“加密”是将程序加密,仅在执行时解密的方法。
专利文献1(日本)特表2002-514333但是,无论实施怎样复杂的变换,通过花时间进行分析,复杂化的方法总会在某时被分析出来。如果程序的商业价值变高,则无论多么复杂的程序,必然会出现负担用于分析该程序的成本的人。
而且,由于程序在执行中被解密,所以加密的方法存在其间被分析、盗听的可能性。

发明内容
本发明用于解决上述问题,其目的在于提供一种应用执行装置,防止滥用软件模块的缺陷或使用专业工具进行的应用程序的盗听、篡改。
为了解决上述问题,本发明的应用执行装置,以类为单位执行已取得的应用,其特征在于,具备元信息存储单元,对类文件中所包含的元信息进行存储;指令序列存储单元,对类文件中所包含的指令序列进行存储;指令执行单元,没有要参照的信息时执行指令,有要参照的第1信息时请求并使用所通知的第2信息执行指令;以及元信息执行单元,按照上述指令执行单元的请求根据上述元信息生成第2信息,通知上述指令执行单元;仅上述元信息执行单元能读出存储在上述元信息存储单元中的元信息,上述元信息执行单元仅接受上述指令执行单元的请求。
本发明的效果如下。
通过上述构成,存在要参照的信息时,执行应用的指令的指令执行单元指示元信息执行单元通知需要的第2信息,所以例如即使使用调试器盗听指令执行单元,也不能看到存储在元信息存储单元中的元信息本身。因此,即使用指令执行单元盗听、篡改指令序列,应用的分析也是困难的,能防止盗听、篡改。
而且,上述元信息存储单元存储常数池和类结构信息,该常数池记载有索引和常数池的类型及其值,该类结构信息记载有项目及其值;上述指令序列存储单元存储由类定义的方法的字节码;在上述指令执行单元执行在字节码中指定作为第1信息的常数池的索引的指令时,上述元信息执行单元按照该指令的种类参照上述常数池和类结构信息生成第2信息。
这样一来,执行应用时也能防止应用被非法分析、篡改,保护强度提高。
而且,上述指令执行单元执行的字节码是新目标的生成时,上述元信息执行单元从上述常数池中检索与所指定的索引相对应的常数池的类型,参照上述类结构信息来生成存储器大小。
这样一来,指令执行单元得到目标的大小,成为目标的大小的计算的基础的、该类说明的元信息的域的数量和类型描述符,在指令执行单元中看不见。
而且,上述指令执行单元执行的字节码是方法的调用时,上述元信息执行单元从上述常数池中检索与所指定的索引相对应的常数池的类型,参照上述类结构信息来生成上述方法的地址。
这样一来,指令执行单元得到方法的地址,但在指令执行单元中看不见为了得到该地址而需要的元信息。
而且,上述指令执行单元执行的字节码是参照目标的域时,上述元信息执行单元从上述常数池中检索与所指定的索引相对应的常数池的类型,参照上述类结构信息来生成上述域的地址。
这样一来,指令执行单元得到方法的地址,但在指令执行单元中看不见为了得到该地址而需要的元信息。
而且,上述取得的应用被加密;还具备解密单元,该解密单元解密上述被加密的应用,将被解密的指令序列存储在上述指令序列存储单元中,将被解密的元信息存储在上述元信息存储单元中。
这样一来,在应用解密时,能保护应用的元信息,保护强度进一步提高。
而且,上述解密单元使用不能从外部直接访问的密钥存储单元中存储的解密密钥来解密上述应用。
这样一来,能防止应用被非法解密、分析、篡改,保护强度提高。
而且,上述应用是Java(注册商标)应用。
这样一来,能防止非法盗听、篡改Java(注册商标)应用。
而且,本发明的以类为单位执行已取得的应用的应用执行装置的应用执行方法,其特征在于,具备以下步骤元信息记录步骤,对类文件中所包含的元信息进行记录;指令序列记录步骤,对类文件中所包含的指令序列进行记录;指令执行步骤,没有要参照的信息时执行指令,有要参照的第1信息时请求并使用所通知的第2信息执行指令;以及元信息执行步骤,按照上述指令执行步骤的请求根据上述元信息生成第2信息,通知上述指令执行步骤;记录在上述元信息记录步骤中的信息,仅上述元信息执行步骤能读出,上述元信息执行步骤仅接受上述指令执行步骤的请求。
通过上述方法,在执行应用时,即使利用调试器等工具在存储器上盗听、篡改应用的指令,由于不能从调试器访问应用的元信息,所以也难以分析应用,可以防止盗听、篡改。


图1是本发明涉及的应用执行装置的实施方式1的构成图。
图2是表示上述实施方式的Java(注册商标)虚拟机的构成的图。
图3是表示上述实施方式的Java(注册商标)类文件的结构图。
图4是表示上述实施方式的第1ROM中存储的信息的一个例子的构成图。
图5是表示上述实施方式的应用取得程序的构成的一个例子的结构图。
图6是表示上述实施方式的元信息的处理步骤的流程图。
图7是表示上述实施方式的第2ROM中存储的信息的一个例子的构成图。
图8是表示上述实施方式的加载Java(注册商标)虚拟机的处理步骤的流程图。
图9是表示上述实施方式的解密的处理步骤的流程图。
图10是表示上述实施方式的加载类的处理步骤的流程图。
图11是表示上述实施方式的Java(注册商标)类的一个例子的图。
图12是表示上述实施方式的常数池的一个例子的图。
图13是表示上述实施方式的类结构信息的一个例子的图。
图14是表示上述实施方式的字节码的一个例子的图。
图15是表示上述实施方式的字节码的new指令的处理步骤的流程图。
图16是表示上述实施方式的类ID对应表的一个例子的图。
图17是表示上述实施方式的类ID对应表的另一个例子的图。
图18是表示上述实施方式的执行invokespecial指令时的字节码解释器和元信息管理部的流程图。
图19是表示上述实施方式的执行getfield指令时的字节码解释器和元信息管理部的流程图。
图20是表示本发明涉及的应用执行装置的实施方式2的构成图。
图21是表示上述实施方式的虚拟机的构成的图。
图22是表示上述实施方式的第1ROM中存储的信息的一个例子的构成图。
图23是表示上述实施方式的加载Java(注册商标)虚拟机的处理步骤的流程图。
图号说明100,2000 能下载的程序;110,2010 应用执行装置;120,2020 通常执行部;121,2021 应用取得程序;122Java(注册商标)虚拟机;123,2023 OS;124,2024 第1CPU;125,2025 第1RAM;126,2026 第1ROM;130,2030 安全执行部;131,2031 元信息(meta-information)管理部;132,2033 Java(注册商标)虚拟机加载器;133,2034 解密处理部;134,2035 第2CPU;135,2036 第2RAM;136,2037 第2ROM;201,2101 字节码解释器(bytecode interpreter);
202,2106 类加载器(class loader);203,2107 检验器;204,2103 Java(注册商标)堆(heap)管理部;205,2104 Java(注册商标)本机库(native library);206,2105 JIT编译器;300类文件;301类结构信息;302常数池(constant pool);303字节码(bytecode);401被加密的Java(注册商标)虚拟机;402被加密的应用取得程序;403被加密的元信息管理部;404启动类名;501被加密的子类;701解密密钥;1100 使用Java(注册商标)语言的类定义文件;1600 类ID对应表(例1);1700 类ID对应表(例2);2022 第1Java(注册商标)虚拟机;2032 第2Java(注册商标)虚拟机。
具体实施例方式
参照

本发明涉及的应用执行装置的实施方式。
(实施方式1)图1是本发明涉及的应用执行装置的实施方式1的构成图。
能下载的应用程序(以下简称为“应用”)100是能从应用执行装置110下载的应用,在本实施方式中,是被编译、被加密的Java(注册商标)的应用。
应用执行装置110具备通常执行部120和安全执行部130,由虚拟线140的上方的软件和下方的硬件构成。应用执行装置110被采用于例如数字电视机、置顶盒、DVD记录器、Blu-ray Disc(BD)记录器、汽车导航终端、便携式电话机、PDA等搭载了Java(注册商标)虚拟机的电子设备或终端。
通常执行部120由应用取得程序121、Java(注册商标)虚拟机122、OS123构成软件,由第1CPU124、第1RAM125、第1ROM126构成硬件。其中,应用取得程序121、Java(注册商标)虚拟机122、OS123的排列顺序表示从软件的阶层结构的上层开始的顺序,这些软件在第1CPU124中动作。
通常执行部120是与例如被搭载在通常的个人计算机或数字家电设备等中的程序执行单元相同的部件。而且,在权利要求的范围中,通常执行部120由指令执行单元和指令序列存储单元构成。
安全执行部130由元信息管理部131、Java(注册商标)虚拟机132、解密处理部133构成软件,由第2CPU134、第2RAM135、第2ROM136构成硬件。其中,元信息管理部131、Java(注册商标)虚拟机加载机132、解密处理部133的各软件在第2CPU124中动作。
安全执行部130能防御来自有恶意的第三者的攻击,同时安全地执行程序。也就是说,安全执行部130禁止从外部的装置直接访问,第2CPU134按照来自第1CPU124的指示将需要的信息通知给第1CPU124。而且,在权利要求的范围中,安全执行部130由元信息执行单元、元信息存储单元以及解密单元构成。
首先,说明有关各通常执行部120的各构成要素。
应用取得程序121从应用执行装置110的外部取得应用100,存储在第1RAM125中。应用取得程序121相当于例如从位于因特网上的服务器上依照TLS(Transport Layer SecUrity)、HTTP(Hyper TextTransfer Protocol)等协议下载Java(注册商标)应用100(被加密、类文件形式)的Java(注册商标)程序。
其中,TLS是通过加密来防止通信时的数据的盗听、篡改的数据传输方式。TLS详细记载在RFC2246中,在此省略详细的说明。
而且,HTTP是因特网上的数据通信中一般使用的数据传输方式。HTTP详细记载在RFC2216中,在此省略详细的说明。
而且,应用取得程序121也可以是作为数字广播的数据广播,将嵌入MPEG2传输流内的Java(注册商标)应用读出到应用执行装置110中的Java(注册商标)程序。MPEG2传输流详细记载在MPEG规格书ISO/IEC138181-1中,所以省略其说明。在MPEG2传输流内嵌入Java(注册商标)程序的方法,作为DSMCC方式描述在MPEG规格书ISO/IEC138181-6中。在此省略DSMCC的详细说明。DSMCC方式,在MPEG2传输流的包中,规定将由计算机使用的目录或文件构成的文件系统编码的方法。
而且,应用取得程序121也可以是将被记录在SD卡、CD-ROM、DVD、BD-ROM等可移动介质中的Java(注册商标)应用,写入第1RAM125中的Java(注册商标)程序。应用取得程序121使用OS123提供的文件操作功能,读出被记录在这些可移动介质中的Java(注册商标)应用。
而且,应用取得程序121也可以是将被记录在位于应用执行装置110内的第1ROM中的Java(注册商标)应用,写入第1RAM125中的Java(注册商标)程序。应用取得程序121使用OS123提供的文件操作功能,读出被记录在第1RAM126中的Java(注册商标)应用。
而且,在本实施方式中应用取得程序121为用Java(注册商标)语言描述的Java(注册商标)程序,但也可以用具有同等功能的、用本机(执行装置固有)语言描述的程序实现。
Java(注册商标)虚拟机122是逐次分析并执行用Java(注册商标)语言描述的程序的Java(注册商标)虚拟机。用Java(注册商标)语言描述的程序被编译为被称作字节码的、不依赖于硬件的中间码的指令序列(operation)。Java(注册商标)虚拟机122用分析、执行该字节码的软件实现。而且,一部分的Java(注册商标)虚拟机122是具有被称作将字节码翻译成第1CPU124能执行的执行形式的JIT(Just In Time)编译器的功能的部件。而且,一部分的Java(注册商标)虚拟机122由能直接执行一部分字节码的微处理器、及执行微处理器中不能直接执行的字节码的解释器构成。而且,在书籍《Java(注册商标)Language Specification(ISBN 0-201-63451-1)》等多部书籍中,详细地说明了Java(注册商标)语言,所以在此省略其详细说明。
Java(注册商标)虚拟机122由多个子程序构成。
图2是构成Java(注册商标)虚拟机122的子程序的一个例子。
如图2所示,Java(注册商标)虚拟机122由字节码解释器201、类加载器202、检验器203、Java(注册商标)堆管理器204、Java(注册商标)本机库205、JIT编译器206构成。
字节码解释器201是解释并执行被包含在类文件中的字节码的子程序,是在Java(注册商标)虚拟机122进行核心的处理的子程序。详细情况后述。
类加载器202从第1RAM125读出应用取得程序121已取得的Java(注册商标)应用100,变换成Java(注册商标)虚拟机122能执行的应用并再次写入第1RAM125,形成能执行类的状态。而且,类记载器202也进行类卸载处理。所谓“类卸载”处理,是从Java(注册商标)虚拟机122中去除执行结束而变为不需要的类的处理。
其中,所谓“类”是构成Java(注册商标)应用的基本单位,并被定义在书籍《Java(注册商标)Virtual Machine Specification(ISBN 0-201-63451-)》中。
图3是示出了被包含在类中的信息的概要的图。
在《Java(注册商标)Virtual Machine Specification》中的规定中,类也包括未表示在图3中的信息,但为了简化说明,在此仅说明与本发明有关的项目。
类结构信息301包括该类保持的域(field)、方法(method)、继承哪一类(class)等与类的结构有关的信息。
常数池302是将与用应用(类)定义的常数(constant)有关的数据汇总的数据,包含由类定义或从该类参照的其他类的域、方法、类的名称等信息。将类结构信息301和常数池302统称为类的元信息(或简单称作“元信息”)。
字节码303是将在类中执行的方法的处理描述为中间语言的指令的序列。在字节码303中不包含与应用所处理的数据有关的信息。因此,在Java(注册商标)应用的执行中,一般执行处理不能仅用字节码303,而是在具有定义了数据部分的常数池302后能够开始进行执行处理。有关类中包含的上述各信息的例子将以后说明。
返回图2,检验器203判断类的数据形式的不完备、或类中包含的字节码的安全性。由于用Java(注册商标)Virtual MachineSpecification定义,所以省略字节码的安全性的检查方法的详细说明。
类加载器202不加载被检验器203判断为不妥当的类。
Java(注册商标)堆管理部204进行被称作Java(注册商标)堆的、Java(注册商标)应用所使用的工作存储器的确保。Java(注册商标)堆被确保在第1RAM125内。而且,Java(注册商标)堆管理部204进行碎片收集。在此,所谓碎片收集(garbage collection),是指在应用执行中开放不需要的工作存储器、再用于其他用途的公知技术而言,省略其详细说明。
Java(注册商标)本机库205是由Java(注册商标)应用调用的库,向Java(注册商标)应用提供由OS123或应用执行装置110具备的图1中未记载的硬件、子程序等提供的功能。
JIT编译器206将字节码303翻译成第1CPU124或第2CPU134能理解的执行形式。
以上,结束了基于图2的Java(注册商标)虚拟机122的概要的说明。
再次回到图1,OS123是应用执行装置110的电源接通和第1CPU124启动的基本软件。OS123是操作系统的略语,Linux是一个例子。OS123是平行于程序并执行的内核和库构成的公知技术的总称,省略其详细说明。OS123将Java(注册商标)虚拟机122作为子程序执行。
第1CPU124按照Java(注册商标)虚拟机122、OS123、应用取得程序121、通过应用取得程序121的执行所取得的应用100的各程序执行处理。
第1RAM125将通过应用取得程序121的执行所取得的应用程序作为类文件存储,并存储被解密的Java(注册商标)虚拟机122。而且,第1CPU124进行处理时,暂时保存数据。而且,在从第1CPU124向第2CPU134委托执行时的、两CPU间的数据转交中使用。第1RAM125例如由SRAM、DRAM等一次存储构成。
第1ROM126对被加密的Java(注册商标)虚拟机401等进行存储。存储由第1CPU124指示的数据或程序。第1ROM126具体由闪速存储器或硬盘等非易失性存储器构成。
图4是表示第1ROM126存储着的内容的一个例子的图。
第1ROM126包括被加密的Java(注册商标)虚拟机401、被加密的应用取得程序402、被加密的元信息管理部403、启动类名404。
图5是表示应用取得程序402的构成的图。
应用取得程序402由子类501~503等多个类构成。各子类被加密。
启动类名404是作为Java(注册商标)虚拟机122启动时最初执行的程序的类的名称。在本实施方式中,在加密化启动类名404中指定着子类501。而且,第1ROM126也可以存储图4所示以外的数据。
接着,对安全执行部130的各构成要素进行说明。
元信息管理部131是对被加载到Java(注册商标)虚拟机122中的类所包含的元信息进行管理,根据字节码解释器201的请求来参照处理该信息,并提供其结果的程序。以后对元信息管理部131详细地说明。
Java(注册商标)虚拟机加载器132在应用执行装置110的电源接通后,第1CPU124进行用于成为能执行Java(注册商标)虚拟机122的状态的处理。以后对Java(注册商标)虚拟机加载器132详细地说明。
解密处理部133是对第1RAM125或第1ROM126存储的被加密的信息(应用、Java(注册商标)虚拟机122等)进行解密,并将解密结果写入第1RAM125的程序。用于加密的算法能使用任意的加密算法。
用于上述解密的密钥使用被存储在第2ROM136中的加密密钥701。
第2CPU134按照元信息管理部131、Java(注册商标)虚拟机加载器132、解密处理部133的各程序来执行处理。
第2RAM135存储后述的类结构信息301、常数池302和类ID对应表。而且,第2CPU134进行处理时,为了暂时保存数据而使用。
例如,仅能从由DRAM或SRAM等构成的第2CPU134访问第2RAM135,而不能从第1CPU124读取被存储在第2RAM135中的信息或者写入。而且,也可以在CPU134中混载着第2RAM135。
在通常执行部120动作的程序例如是在Java(注册商标)虚拟机122和安全执行部130动作的程序,例如,元信息管理部131为了共同动作而需要在两者之间交换信息。
图6是Java(注册商标)虚拟机122例如向元信息管理部131指示处理时的流程图。
在图6中,Java(注册商标)虚拟机122将交给元信息管理部131的信息存储到第1RAM125的预定地址(S601)。接着,Java(注册商标)虚拟机122通过第1CPU124向第2CPU134指示元信息管理部131的执行(S602)。元信息管理部131从第1RAM125的预定地址,读出Java(注册商标)虚拟机122在S601存储的数据(S603),使用该数据进行预定的处理(S604)。
接着,元信息管理部131将在S604得到的处理结果写入第1RAM125的预定地址(S605)。接着,元信息管理部131通过第2CPU134向第1CPU124指示Java(注册商标)虚拟机122的执行(S606)。接着,Java(注册商标)虚拟机122从第1RAM125的预定地址,读出元信息管理部131在S604进行的处理的结果。
通过如上所述地执行,将基于不能从第1CPU124直接参照的信息的处理,指示给在安全执行部130内动作的程序并接受信息。
第2ROM136由读出专用的非易失性存储器构成,保证不能从第2CPU134以外读出第2ROM136所存储的信息。
图7是表示第2ROM136存储的信息的一个例子的图。
在图7的第2ROM136中,第1ROM126存储的Java(注册商标)虚拟机401存储用于对被包含在应用取得程序402中的子类501~503进行解密的解密密钥701。在本实施方式中,解密Java(注册商标)虚拟机401、应用取得程序402、启动类名404的密钥仅为解密密钥701这一个,但本发明分别使用不同的密钥也能实施。而且,第2ROM136也可以存储图7未示出的其他数据。
而且,解密密钥701是为了对由应用取得程序121取得的被加密的应用100的解密用的被加密的解密密钥进行解密而使用的。应用100的被解密的解密密钥也存储在第2ROM136中。
而且,在本实施方式中,应用执行装置110虽然具备两个CPU,但一个CPU也可以通过切换动作模式等方法虚拟地实现两个CPU。在能改变动作模式的CPU中,例如有Intel公司的LaGrande。该CPU具有被称作通常模式和安全模式的两个动作模式。被构成为不能从以通常模式工作的程序盗听、篡改安全模式上动作的程序。ARM公司和AMD公司电发布了具有同样功能的CPU。
而且,在本实施方式中,元信息管理部131、Java(注册商标)虚拟机加载机132、解密处理部133作为在第2CPU134中执行的程序,但也可以用LSI实现这些功能。
而且,第1RAM125、第2RAM135也可以是将一个RAM虚拟地处理为两个RAM,而且,第1ROM126、第2ROM136也可以是将一个ROM虚拟地处理为两个ROM。
而且,也可以由硬件来实现安全执行部130的整体或部分。此时,第1CPU124和第2CPU134之间的数据通信加密进行,防止第三者的盗听。这通过将数据发送给连接两个CPU的数据总线(未图示)时进行加密并在发送数据后进行解密而进行。
而且,安全执行部130也可以像智能卡和IC卡那样是能从应用执行装置110取下的装置。智能卡、IC卡是卡内部包含CPU、存储器和安全电路的公知技术,省略其详细说明。此时,通常执行部120和安全执行部130之间的数据传输是使用SAC(Secure AuthenticatedChannel)等技术,防止第三者的盗听的同时进行的。SAC是用于安全地进行IC卡和外部设备的相互认证、以及加密密钥的共有的公知技术。
而且,安全执行部130的软件也可以是利用防篡改软件技术保护的软件。
接着,对应用执行装置110保护Java(注册商标)应用不被盗听、篡改的同时执行的方法进行说明。
Java(注册商标)应用执行装置110的电源通电后,第1CPU124启动OS123。OS123启动后,通过第1CPU124对第2CPU134指示加载Java(注册商标)虚拟机加载器132。通过第2CPU134启动的Java(注册商标)虚拟机加载器132按照一定顺序将Java(注册商标)虚拟机122加载至第1RAM125,将元信息管理部131加载至第2RAM135。
图8是表示加载Java(注册商标)虚拟机122和元信息管理部131的步骤的图。
在图8中,在S801,Java(注册商标)虚拟机加载器132使用解密处理部133,将被存储在第1ROM126中的Java(注册商标)虚拟机401解密至第1RAM125。
图9是表示解密处理部133对被加密的Java(注册商标)虚拟机401进行解密时的处理步骤的图。
在图9中,解密处理部133通过第2CPU133读出第1ROM126存储的被加密的Java(注册商标)虚拟机401(S901)。
解密处理部133从第2ROM136取得解密密钥701(S902),判定Java(注册商标)虚拟机401的解密结果的输出目的地(S903)。输出目的地是第1RAM时,将被解密的Java(注册商标)虚拟机122通过第2CPU134存储在第1RAM125中(S904),而输出目的地是第2RAM时,存储在第2RAM135中(S905)。
返回图8,Java(注册商标)虚拟机加载器132向解密处理部133指示,将被存储在第1RAM126中的元信息管理部404解密至第2RAM135(S802)。Java(注册商标)虚拟机加载器132向OS123通知加载的结束(S803)。
OS123从Java(注册商标)虚拟机加载器132接受加载结束通知,开始Java(注册商标)虚拟机122的执行。Java(注册商标)虚拟机122的执行开始时,调用类加载器202,类加载器202参照被存储在图4所示的第1RAM126中的启动类名404,加载由启动类名404指定的类。
图10是表示以指定了图5的应用取得程序402的子类501作为启动类名404时为例,类加载器202加载子类501的处理步骤的流程图。
首先,类加载器202向解密处理部133指示进行存储在第1RAM126中的被加密的子类501的解密处理(S1001)。接着,向检验器203指示检验第1RAM125的被解密的子类(S1002)。类加载器202从第1RAM125的被解密的子类抽取元信息(类结构信息301、常数池302)(S1003),抽取后从子类中删除元信息,将该元信息写出到第1RAM125,调用元信息管理部131(S1004)。元信息管理部131从第1RAM125读取元信息,复制至第2RAM135。基于元信息管理部131进行的元信息的复制结束时,类加载器202从第1RAM125中删除该元信息(S1005)。
如上所述,类加载器202不仅对应用取得程序,而且对由应用取得程序121取得的应用的类进行同样的处理,将类的元信息仅存储至安全的第2RAM135。
通过如上所述的构成,在应用执行时,类的元信息可以存储至不能用调试器等读出也不能写入的区域。
接着,对字节码解释器201、元信息管理部131保护类不被盗听、篡改的同时进行执行的处理的例子进行说明。而且,由于在《Java(注册商标)Virtual Machine Specification》中详细地说明了类的结构和字节码解释器201的动作,所以简单地说明与本实施方式关联深的地方。
图11是表示由Java(注册商标)语言描述的类文件的一个例子的图。
类名1101是该类的名称,例如类的名称是Sample。域1102是Sample类定义的域。域1102能作为对方法执行时的计算结果的值进行存储的区域。方法1103和方法1104是Sample类定义的两个域。其中,所谓“方法”是指定义了类的处理内容。
用Java(注册商标)语言定义了类的源文件1100通过Java(注册商标)编译器变换为类文件300。所变换的类文件300由类结构信息301、常数池302、字节码303构成。
图12是表示类1100被编译时的类文件300的常数池302的图。
列1201是表示常数池302的项目号码的索引,常数池302的参照由索引表现。列1202是常数池的类型。常数池根据记录的信息的种类确定类型。列1203是常数池的值。
例如,索引1意为在由索引3的类说明的类中,参照索引13表示的方法。索引3表示CONSTANT_Class参照类。索引3是参照具有索引15的名称的类,索引15的CONSTANT_Utf8表示类、方法、域的名称。在类15的例子中,类的名称是“Sample”。索引13的CONSTANT_NameAndType表示方法和域的名称与类型描述符的参照。所谓“类型描述符”是指用字符串来表现域的类型、方法的自变量、返回值的类型。在索引13的例子中,该常数池302的名称为索引18、类型描述符为索引18。其值分别为“<init>”、“()V”。也就是说,索引1的方法参照变为参照名称为“<init>”、类型描述符为“()V”的方法。而且,索引2的CONSTANT_FieldRef表示该常数池302参照域。索引2参照由类“Sample”定义的、名称为“field”、类型描述符为“I”的域。
图13是类1100的类结构信息301的一部分。this_class1301参照类1100的名称。类的名称被记录在常数池302的索引15中。super_class1302是类1100的母类。filed_count1303表示由类1100定义的域的数量。域是可以存储方法的处理结果等的区域。域信息1304记录着由类1100定义的域的名称、访问权等信息。method_count1305表示由类1100定义的方法的数量。方法信息1306记录着由类1100定义的方法的名称、字节码的地址等。
图14是由类1100定义的方法1104的字节码303。从字节码303使用常数池302访问类、域、方法。例如,指令1401参照索引3的常数池302。
在字节码303的执行时,若有参照常数池302的指令、即图14中通过#记号来指定常数池302的索引的指令,则字节码解释器201向元信息管理部131委托常数池解决处理,使用通过常数池解决处理得到的信息进行指令的处理。字节码解释器201单独地执行没有指定常数池302的索引的指令。其中,所谓“常数池解决处理”是指调查在常数池302中由字符串表现的类、域、分类存储在第1RAM125内的哪个地址的处理。
图15是执行图14的指令1401的处理的流程图。
在图15中,字节码解释器201取出指令1401。指令1402是生成被存储在常数池302的索引3的位置上的类型的目标的指令。由于第2RAM135存储着常数池302,所以字节码解释器201不能访问常数池302。因此,字节码解释器201向元信息管理部131通知指令1401的内容(S1501)。元信息管理部131读出指令1401,用指令1401参照的索引3,检索第2RAM135存储的常数池302(S1502)。在本实施方式中,得到类名“Sample”。
接着,元信息管理部131根据“Sample”类的类结构信息301计算目标的大小(S1503)。在此,根据该类说明的域的数量和类型描述符来计算目标的大小。例如,“Sample”类的情况下,具有一个int类型的域,所以目标大小变为4(字节)。
接着,元信息管理部131生成表示“Sample”类的类ID(S1504)。类ID是为了识别所生成的目标是从哪个类生成而使用的信息。类ID例如可以使用32比特的整数值实现。元信息管理部131将类ID与由类名代表的类结构信息301之间的对应关系,存储在第2RAM134所存储的类ID对应表中。
图16是表示类ID对应表的一个例子的图。列1610表示类名,列1611表示类ID。例如在行1601的例子中,由“Sample”的类名代表的类结构信息301表示类ID与“1”建立对应。
返回图15,元信息管理部131将在S1603计算的目标大小和在S1504生成的类ID存储至第1RAM126,通知至字节码解释器201(S1505)。然后,字节码解释器201确保所通知的目标大小的量的存储器(S1506),在目标头中记录所通知的类ID(S1507)。其中,目标头是记录与目标有关的各种信息的区域。
通过以上的处理,字节码解释器201不知道元信息而能执行指令1401。此时,即使有恶意的第三者尝试盗听常数池302的内容,由于常数池302记录在第2RAM135中,所以不能盗听。而且,即使有恶意的第三者尝试盗听字节码解释器201与元信息管理部131之间的通信内容,也仅能得到常数池302的索引和要确保的目标大小,常数池的内容不泄漏。也就是说,能对有恶意的第三者藏匿常数池302的内容。
而且,在类ID对应表1600中,类ID和类结构信息301的对应不需要一定一一对应。
图17是表示多个类ID对应于一个类结构信息301的例子的图。通过如上所述的构成,在调试器等工具盗听第1RAM125时,分析哪个目标对应于哪个类变得困难。
接着,指令1402~指令1403由于不含对常数池302的参照,所以字节码解释器201能不调用元信息管理部131地执行指令。指令1404是伴随对常数池132的参照的指令。指令1404是第2RAM135存储的常数池302的索引2的位置上的类名、用方法表示的方法的字节码的指令。
图18是字节码解释器201执行指令1404的处理的流程图。
字节码解释器201取得指令1404,向元信息管理部131通知指令1404的内容、接收目标的地址(S1801)。
在此,所谓“接收目标”是执行方法的对象的目标。在Java(注册商标)语言中,方法的处理使用接收目标存储的域进行。元信息管理部131从第2RAM134存储的类ID对应表1600中检索被存储在接收目标的目标头中的类ID,检索与类ID对应的类结构信息301(S1802)。如图16所示,由于类ID是“1”,所以图13的类结构信息301被检索。
接着,元信息管理部131从常数池302检索索引4,得到方法名“<init>”和类型描述符“()V”(S1803)。接着,元信息管理部131根据在S1802检索到的类结构信息301中所包含的方法信息1306,检索具有在S1803中检索到的方法名和类型描述符的方法,得到其字节码地址(S1804)。接着,元信息管理部131将在S1804中得到的字节码地址通知至解释器201(S1805)。字节码解释器201执行从元信息管理部131通知的字节码地址(S1806)。
通过以上的动作,字节码解释器201可以不知道元信息就能执行指令1404。此时,即使有恶意的第三者尝试盗听常数池302的内容,由于常数池302被记录在第2RAM135中,所以不能盗听。而且,即使有恶意的第三者盗听字节码解释器201和元信息管理部131间的通信内容,也仅得到常数池302的索引和接着要执行的字节码地址,常数池的内容不泄漏。也就是说,有恶意的第三者能藏匿常数池302的内容。
接着,指令1405~指令1406不含对常数池302的参照,所以字节码解释器201能不调用元信息管理部131地执行指令。
指令1407是伴随对常数池302的参照的指令。指令1407被存储在第2RAM135存储的常数池302的索引2的位置上。是读出类名、由域名表示的域的指令。由于第2RAM135存储常数池302,所以字节码解释器201不能访问常数池302。图19是字节码解释器201执行指令1407的处理的流程图。
字节码解释器取得指令1407后,调用元信息管理部131,通知指令1407的内容、以及处于指令1407即将执行之前的Java(注册商标)堆栈的最上位的目标的地址(S1901)。
在此,有关Java(注册商标)堆栈,请参照《Java(注册商标)Virtual Machine Specification》”。
元信息管理部131从第2RAM134存储的类ID对应表1600中检索所通知的目标的目标头中存储的类ID,检索与类ID对应的类结构信息301(S1902)。在本实施方式中,类ID是“1”,所以检索类结构信息301。
接着,元信息管理部131从常数池302检索索引2,得到域名“field”和类型描述符“I”(S1903)。接着,元信息管理部131根据在S1902中检索的类结构信息301中包含的域信息1304,检索具有在S1903中检索的域名和类型描述符的域,得到该域的地址(S1904)。接着,元信息管理部131向第1RAM125存储在S1904中得到的域地址,将该地址通知至字节码解释器201(S1905)。字节码解释器201读取从元信息管理部131通知的域地址(S1906)。
通过以上的动作,字节码解释器201不知道元信息也能执行指令1407。此时,即使有恶意的第三者尝试盗听常数池302的内容,由于常数池302被记录在第2RAM135中,所以不能盗听。而且,即使有恶意的第三者尝试盗听字节码解释器201和元信息管理部131间的通信的内容,也仅能得到常数池302的索引和用于读出数据的域的地址,常数池的内容不泄露。也就是说,可以对有恶意的第三者藏匿常数池302的内容。
如以上说明的那样,由于元信息(类结构信息301、常数池302)仅存储在调试器不能访问的第2RAM134中,所以即使有恶意的第三者使用调试器等工具尝试非法复制Java(注册商标)应用,也不能得到元信息。而且,在执行Java(注册商标)应用时,即使尝试盗听、篡改数据也不能读出元信息,所以无论盗听、篡改哪个方法和数据都可以,攻击变得非常困难。
而且,应用取得程序121、Java(注册商标)虚拟机122通过用第1CPU124执行的软件实现,但是当然也可以用LSI等硬件实现。
(实施方式2)在上述实施方式中,类加载器202和检验器203作为Java(注册商标)虚拟机122的子程序由通常执行部120动作。因此,图10所示的类加载处理的S1001结束后到S1005之间,用调试器等工具盗听第1RAM125,从而存在元信息泄漏的问题。在本实施方式2中,通过用安全执行部130使类加载器203、检验器203动作来解决该问题。
图20是表示本实施方式2的应用执行装置的构成的框图。
本实施方式的应用执行装置2010与实施方式1的应用执行装置110相比较,第1Java(注册商标)虚拟机2022、第2Java(注册商标)虚拟机2032、解密处理部2034不同。其他结构要素与实施方式1相同,所以省略说明。
图21是表示第1Java(注册商标)虚拟机2022、第2Java(注册商标)虚拟机2032的子程序的构成的图。
为了通过安全执行部2030执行,设定类加载器2106、检验器2107为第2Java(注册商标)虚拟机2032的子程序。
而且,如图22所示,第1ROM2026存储第1Java(注册商标)虚拟机2201、第2Java(注册商标)虚拟机2202。
图23是表示Java(注册商标)虚拟机加载器2033加载第1Java(注册商标)虚拟机2022、第2Java(注册商标)虚拟机2032的处理步骤的流程图。
在图23的S2301中,Java(注册商标)虚拟机加载器2033指示向解密处理部2034解密第1Java(注册商标)虚拟机2201,并将结果输出到第1RAM2036。
然后,Java(注册商标)虚拟机加载器2033对解密处理部2034解密第2Java(注册商标)虚拟机2202,将结果输出至第2RAM2036(S2302)。最后,通知OS2023加载结束(S2303)。
以上,可以加载Java(注册商标)虚拟机。
类的加载处理在用安全执行部2010执行类加载器2106、检验器2107的动作以外,与实施方式1相同,所以省略说明。而且,类的执行处理也与实施方式1相同,所以省略说明。
通过以上这样的构成,类的加载处理的处理过程中也能防止被解密的元信息的基于调试器等工具的盗听、篡改。
而且,在实施方式1和实施方式2中,虽然以执行Java(注册商标)应用的应用执行装置为例进行了说明,但本发明也能适用于用具有元信息的其他语言描述的应用。例如,用ECMA标准化的C#语言采用如下方式被称作CLI(Common Language Infrastructure)的虚拟机(相当于Java(注册商标)的Java(注册商标)虚拟机)执行被称作CLI(Common intermediate Language)的中间语言(相当于Java(注册商标)的字节码)。C#语言的元信息用ECMA-355规格的Partition II定义。
而且,在实施方式1、实施方式2中,将类文件所含所有元信息仅存储至第2RAM135中,但也可以将一部分元信息存储至第1RAM125。此时,有关存储至第1RAM125的信息,可能被调试器等工具分析,但由于能削减通常执行部120和安全执行部130的相互作用,所以可以更快地执行应用。
仅一部分元信息不能恢复完全的类,但通过根据得到的元信息推定其他的元信息,有可以恢复完全的类的可能性。隐藏多少的元信息就足够了,也可以根据执行程序所求得的保护要件决定。
产业上的利用可能性本发明涉及的应用执行装置通过将应用的执行、分析所不可缺少的元信息隐蔽至盗听、篡改困难的安全执行部,可以保护执行应用时不被盗听、篡改,能在应用的下载分发业务中保护内容制作者的权利。
权利要求
1.一种应用执行装置,以类为单位执行已取得的应用,其特征在于,具备元信息存储单元,对类文件中所包含的元信息进行存储;指令序列存储单元,对类文件中所包含的指令序列进行存储;指令执行单元,没有要参照的信息时执行指令,有要参照的第1信息时请求并使用所通知的第2信息执行指令;以及元信息执行单元,按照上述指令执行单元的请求根据上述元信息生成第2信息,通知上述指令执行单元;仅上述元信息执行单元能读出存储在上述元信息存储单元中的元信息,上述元信息执行单元仅接受上述指令执行单元的请求。
2.如权利要求1记载的应用执行装置,其特征在于,上述元信息存储单元存储常数池和类结构信息,该常数池记载有索引和常数池的类型及其值,该类结构信息记载有项目及其值;上述指令序列存储单元存储由类定义的方法的字节码;在上述指令执行单元执行在字节码中指定作为第1信息的常数池的索引的指令时,上述元信息执行单元按照该指令的种类参照上述常数池和类结构信息生成第2信息。
3.如权利要求2记载的应用执行装置,其特征在于,上述指令执行单元执行的字节码是新目标的生成时,上述元信息执行单元从上述常数池中检索与所指定的索引相对应的常数池的类型,参照上述类结构信息来生成存储器大小。
4.如权利要求2记载的应用执行装置,其特征在于,上述指令执行单元执行的字节码是方法的调用时,上述元信息执行单元从上述常数池中检索与所指定的索引相对应的常数池的类型,参照上述类结构信息来生成上述方法的地址。
5.如权利要求2记载的应用执行装置,其特征在于,上述指令执行单元执行的字节码是参照目标的域时,上述元信息执行单元从上述常数池中检索与所指定的索引相对应的常数池的类型,参照上述类结构信息来生成上述域的地址。
6.如权利要求1记载的应用执行装置,其特征在于,上述取得的应用被加密;还具备解密单元,该解密单元解密上述被加密的应用,将被解密的指令序列存储在上述指令序列存储单元中,将被解密的元信息存储在上述元信息存储单元中。
7.如权利要求6记载的应用执行装置,其特征在于,上述解密单元使用不能从外部直接访问的密钥存储单元中存储的解密密钥来解密上述应用。
8.如权利要求1记载的应用执行装置,其特征在于,上述应用是Java应用,上述Java是注册商标。
9.一种以类为单位执行已取得的应用的应用执行装置的应用执行方法,其特征在于,具备以下步骤元信息记录步骤,对类文件中所包含的元信息进行记录;指令序列记录步骤,对类文件中所包含的指令序列进行记录;指令执行步骤,没有要参照的信息时执行指令,有要参照的第1信息时请求并使用所通知的第2信息执行指令;以及元信息执行步骤,按照上述指令执行步骤的请求根据上述元信息生成第2信息,通知上述指令执行步骤;仅上述元信息执行步骤能读出在上述元信息记录步骤中记录的信息,上述元信息执行步骤仅接受上述指令执行步骤的请求。
全文摘要
在现有的应用保护技术中,通过使应用复杂化,使应用的分析困难。但是,在本方法中无论使应用多么复杂化,都能通过花费时间进行分析。而且,不能防止非法复制应用自身。由安全执行部中动作的元信息管理部,将应用的元信息存储到调试器不能访问的区域,在通常执行部中,需要用于执行应用时的元信息时,将使用元信息进行规定计算的结果通知给通常执行部,从而藏匿应用的元信息。
文档编号G06F21/53GK101014959SQ200580023959
公开日2007年8月8日 申请日期2005年7月14日 优先权日2004年7月16日
发明者中村智典 申请人:松下电器产业株式会社
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1