保护便携装置中的中间语言软件代码执行的安全的方法

文档序号:6570439阅读:201来源:国知局
专利名称:保护便携装置中的中间语言软件代码执行的安全的方法
技术领域
本发明涉及便携数字装置中引入的软件和执行环境,特别是涉及 用于在配备了虚拟执行机的便携数字装置上执行以中间语言编译的应 用程序期间,保护以中间语言编译的该应用程序的执行免受错误攻击 的方法。
背景技术
下文中,便携装置将表示任何便携数字装置、如便携计算机,但 也可以是配备了结合处理器和存储器的微处理器、如芯片卡的任何装 置。
创建可互通应用的需求引起了中间编程语言的发展。因此,这些 语言的主要目标是使其软件与它们必须在其上执行的硬件无关。然后 将软件项设计成采取与基础体系结构无关的中间代码的形式来执行。
因此,使程序员一般脱离与特定硬件关联的限制。因而极大地扩
展了从Java源语言编译之后所得到的中间语言、如Java字节码。还可 能提到从各种可能的源语言、如C十+或C弁编译之后所得到的中间语言 MSIL("Microsoft中间语言),它用于.Net或DotNet(注册商标)环境的上 下文。
因此,中间代码通常对应于软件的编译形式。通过Java或其它中 间语言、如.Net编译的这种软件无法这样由预期执行以中间代码形式 进行编译的程序的装置的处理器来执行。需要引入软件层,它的主要 目标是将中间代码解释为可由主机装置的处理器执行的指令。这个软 件层称作"虚拟机"。例如,JAVA虚拟机使得能够在实现它的给定平 台上执行Java软件项。
通常,以包含与软件的编译形式对应的.class文件组成的模块集合 形式来分配Java软件项。每个编译文件对应于类类型的数据结构,因 而包括与这个类相关的信息,即类的元素的描述(它的常数、它的字段、 它的方法)、类所使用并在其它类中定义的元素的描述(字段和方法)以 及可由Java虚拟机的解释器解释的、采取指令形式的、类的方法的代 码(字节码)。
在一种筒^化方式中,.class文件具有例如以下结构 ClassFile {
Field—list; 〃类的字段的描述
Method—list; 〃这个类的方法(包括其字节码,也就是i兌可由虚 拟机的解释器解释的、它们的指令)
因此,举例来说,在电子钱包Java应用的上下文中,能够定义命
名为"Purse"、具有其字段"balance"及其方法"decrementBalance()"的 类。.class文件可具有以下结构
Public class Purse {
private int balance = 0/
public void decrementBalance() {
this .balance = this .balance _ l,.
因此,根据这个示例,类"Purse"的方法的执行包括从balance字 段的当前实例中减去值1。
由便携装置上安装的Java虛拟机来实现对应Java软件的执行。 这个虚拟机将ClassFile的信息转换成工作存储器中的数据结构,
为此,虚拟机具有特定的指令集,各指令在一个或多个八位组上 编码。虚拟机的指令集包括例如一定数量的常规指令,例如算术运算、 逻辑运算和跳转。虚拟机通常具有执行堆栈,它使用从零开始编号的
局部变量,但是也可使用寄存器。
目前,通过虚拟机来执行应用程序不是完全安全的,特别是相对 于一般的攻击、尤其是错误攻击。例如,在操纵这个值以便由虚拟机 解释更新这个字段的方法期间,在注入错误之后可修改上述示例中由
"balance"字段表示的敏感值,从而导致在堆栈中设置balance字段的最 终值,它与正常预计的不同,例如可能迫使balance字段为其最大值。 保护中间代码的应用程序在由卡上的虚拟机执行期间免受错误攻 击的 一种已知方式包括在将要执行的应用程序的实际代码中加入冗 余校验和代码。
例如,为了保护上述代码,能够在Java中使用balance字段的补 码值作为校验和数据项,表示为-balance,它返回二进制balance值的 1补码,并且能够在由虚拟机执行方法期间与更新balance值并行更新 这个校验和数据项值。然后,另一方面对于balance字段、另一方面对 于补码~ balance字段并行执行的两个更新计算的结果的比较使得能 够检验已经用于执行计算的数据项的完整性。因而修改的Java代码则 具有以下结构
public class Purse {
private int balance = 0/
privateintbalChecsum= balance,' // =
OxFFFFETFF
public void decrementBalance(){
this.balance = this balance - 1/
this ,balChecsum = this .balChecsum + l,'
用于保护Java代码的执行的安全的这样一种方法的缺点在于,它 消耗大量资源和计算时间,这在受限环境、如芯片卡中是不利的。
另外,Java应用程序(或者通过另一种中间语言的应用程序)的开 发人员则必须开发其应用程序的代码,同时考虑这种限制,以便保护
代码的敏感部分。

发明内容
本发明的目的在于解决这些缺点的一个或多个。因此,本发明涉
上执行以中间代码编译的应用程序的方法,其特征在于,它包括应用 安全执行模式的步骤,其中由虚拟机解释中间代码的步骤包括以下步

-对于为了执行代码定义的算术和/或逻辑运算而操纵的代码的 各数据项,生成校验和数据项,通过预定函数将它与代码的所述数据 项链接,
-与执行所述运算并行执行校验和运算,它通过所述预定函数与 代码所定义的所述运算链接并对校验和数据项起作用。 优选地,该方法还包括以下步骤
-通过比较所述运算得到的结果来检验所执行的计算的完整性。
有利地,检验步骤包括检验分别为代码定义的运算和校验和运 算的所述运算得到的结果通过预定函数来链接。
根据第一实施例,该方法包括由虚拟机使用可由所述虚拟机操纵 的两个独立数据结构,分别为专用于操纵代码的数据项以便执行代码 定义的运算的数据结构以及专用于操纵对应校验和数据项以便执行对 应校验和运算的数据结构。
优选地,将根据这个第一实施例、由虚拟机所使用的数据结构组 织成堆片戋。
在一个变形例中,将根据这个第一实施例、由虚拟机所使用的数 据结构组织成寄存器。
根据第二实施例,该方法包括由虚拟机使用单个数据结构,以便 一方面操纵用于执行代码定义的运算的代码的数据项以及另一方面操 纵用于执行对应校验和运算的对应校验和数据项。
优选地,将虚拟机所使用的单个数据结构组织成堆栈。
有利地,所<吏用的预定函数定义组射(group morphism)。
优选地连续应用安全执行才莫式。
根据一个变形例,随机应用安全执行才莫式。
根据另一个变形例,在检测到特定条件时应用安全4丸行才莫式。优 选地,应用安全执行才莫式的条件是部分代码的解释的函数。
根据一个实施例,数字装置是引入了 Java或DotNet类型的虚拟 机的芯片卡。
本发明还涉及用于在便携数字装置上执行以中间代码编译的应用 程序的虚拟机,其特征在于,它可存储在装置的非易失性存储器中, 并且能够实现如上所述的方法。
本发明还涉及包括存储根据本发明的虚拟机的非易失性存储器的 便携数字装置。
根据一个实施例,这个装置是芯片卡。


通过阅读作为非限制性示例给出的、参照附图进行的描述,本发 明的其它特征和优点将变得非常清楚,附图包括
图1和图2示出用于以安全^^莫式执行中间代码的应用程序的本发 明的一个优选实施例。
具体实施例方式
因此,本发明提出保护在配备了用于解释应用程序的代码的虛拟 执行机的便携数字装置上执行以中间代码编译的应用程序的安全。
根据第一实施例,在其中安装了堆栈型虚拟机的数字装置、如芯 片卡IO上实现根据本发明、用于保证安全的方法。虚拟机的执行堆栈 20由一种数据结构形成,可由虚拟机通过该数据结构来操纵应用程序 的中间代码的数据项。本发明的原理则包括对常规堆栈型虚拟机增加安全堆栈30,它并 行地再现常规执行堆栈上所执行的计算,以便校验常规执行堆栈上发 生的运算的完整性。因此,根据本发明,对于认为是敏感的数据项起
为此,由虚拟机解释应用程序的中间代码的操作必须经过修改, 以便传播常规堆栈和安全堆栈上的代码所定义的运算。但是,根据本 发明的一个特征,通过安全堆栈操纵以便与常规执行堆栈上执行代码
定义的运算并行执行这个运算的数据项不是与常M^堆栈上所处理的相
同的代码的数据项。
更具体来说,每次将表示为val的数据项置于常规执行堆栈时, 表示为Chk(val).的对应校验和数据项被生成并加入安全堆栈。数据项 Chk(val)预计通过预定函数Chk与数据项val链接。另外,每次在执行 堆栈上使用代码的数据项val来执行算术和/或逻辑运算时,在安全堆 栈上使用数据项Chk(val)来执行对应校验和运算。
因此,虚拟机的安全堆栈的有益效果是,通过检查数据项val是 否置于执行堆栈上、然后将对应校验和数据项Chk(val)置于安全堆栈 上,就能够在任何时刻校验它在执行敏感运算期间在常规执行堆栈上 操纵的数据项val的完整性。
为此,代码的数据项以及对应校验和数据项通过具有特定数学性 质的预定校验和函数相互链接,下面进行说明。
例如,设V是具有长度s的寄存器上的值的空间。对于长度为32 位的寄存器,这给出
V= [-2147483648, 2147483647] = [-231, 231-1] 设O是集合V,具有以下常规逻辑和算术运算(+、 -、 x、 /、 &、1)。
设F是集合V,具有按照以下方式符号化的运算的集合(+、図、 0、 、 □、 o)。
根据本发明的校验和函数Chk则可描述如下
Chk: 0 O------------^F,使得对于集合中的任何运算op(+、
-、x、 /、 &、 l),在集合中存在对应的运算cop(+、図、 、 、 □、 o),使得
Chk(a op b) = Chk(a) cop Chk(b)
例如,在Java语言的上下文中,1补码的上述函数-可写作函数
Chk的特例,如下所示
~: (V, ( + ,-,*,/,&, I)) -------+ (V, (+図 #口0))
a i-----------------------> ~a
其中
~(a + b) = ~a + ~b = ~a + ~b + 1 ~(a - b) = ~a図 ~b = ~a - ~b - 1
在数学上,校验和函数Chk可定义为从空间O到空间F的组射, 涉及F中的所有运算。
因此可以看到,对于对作为当前虚拟机的常规算术空间的空间V 中的一个或多个数据项起作用的任何逻辑或算术运算,能够找到使用 所定义的函数Chk的等效计算,使用通过函数Chk与第一计算中使用 的运算符op链接的运算符cop,并对于通过函数Chk与第一计算中使 用的数据项链接的所谓的校验和数据项的一个或多个起作用。
图1示出根据上述原理、在常规执行堆栈和安全堆栈上执行给定 中间代码的一个示例。
设中间代码定义的算术运算包括添加先前置于常规堆栈20中的 两个整数vail和val2。然后生成对应校验和数据项Chk(vall)和 Chk(val2),以便置于安全堆栈30中。然后,从常规执行堆栈20中弹 出数据项vail和val2以便执行代码定义的算术运算+,而从安全堆栈 30中弹出对应校验和数据项Chk(vall)和Chk(val2)以便并行执行与代 码定义的运算+对应的运算,其中数据项通过函数Chk与校验和数据 项链接。
如图2所示,然后将result巧all+val2的结果置于常规堆栈上,而
对应校验和算术运算的结果Chk(result)置于安全堆栈上。
再看Java语言的上下文中的上述示例,其中可由函数~来定义校 验和函数Chk,校验和结果Chk(result)是-va11 + val2 + l。
同样,如果由虚拟机来执行减法运算,则在安全堆栈上执行对应 运算。例如,如杲中间代码定义的算术运算包括减去先前置于常规堆 栈20中的两个整数vall和val2,则通过对校验和数据项~ vall和~ val2 起作用,在安全堆栈30上并行执行对应校验和算术运算,并且置于安 全堆栈上的对应校验和算术运算的校验和结果Chk(result)是~ vall -~ val2 — 1 。
本发明的原理适用于涉及算术和/或逻辑运算的任何中间代码的 行为。
因此,通过检验通常必须通过应用预定校验和函数Chk相互链接 的、常规执行堆栈与安全堆栈上的结果之间的对应性,能够检验所执
行的计算的完整性。
可通过可选方式来实现检验完整性的步骤。例如,它可祐:推迟、
在预定时刻甚至随机地执行。
可设想与参照图1和图2所述、由虚拟机^使用两个独立堆栈不同 的实施例。例如,根据一个变形例,虚拟机只使用单个堆栈,并且交 替堆叠中间代码的信息项和通过预定函数Chk所定义的对应校验和信 息项。
本发明还可在寄存器类型的虚拟机的上下文中来实现。在这种情 况下,将用于存储中间代码的信息项的虛拟机的各寄存器与专用于存 储通过预定函数Chk从代码的信息项所定义的对应校验和信息项的安
全寄存器进行匹配。
有利地,虚拟机可通过常规纟莫式或者通过安全才莫式进行操作,其 中,如上所述,将数据项的计算和操纵与对于才交验和数据项的并行计 算和操纵进行匹配。
根据第一变形例,可提供使虚拟机仅以安全才莫式进行操作。
根据另一个变形例,仅在应用程序的开发人员例如使用特定API
进行请求时,才可应用到安全冲莫式的转变(passage)。
根据另一个变形例,可随机执行到安全冲莫式的转变。例如,决定 30%的操作时间必须在安全一莫式中,而分配是随机的。
最后,可在检测到条件或特定事件例如执行特定类的方法、读取 特定字段等时执行到安全才莫式的转变。
权利要求
1.一种用于在配备了用于解释中间代码的虚拟执行机的便携数字装置(10)上执行以所述中间代码编译的应用程序的方法,其特征在于,所述方法包括应用安全执行模式的步骤,其中由所述虚拟机解释所述中间代码的步骤包括以下步骤-对于为了执行所述代码定义的算术和/或逻辑运算而操纵的所述代码的各数据项(val1,Val2),生成校验和数据项(Chk(Val1),Chk(val2)),通过预定函数将所述校验和数据项与所述代码的所述数据项链接, -与执行所述运算并行执行校验和运算,所述校验和运算通过所述预定函数与所述代码所定义的所述运算链接并对所述校验和数据项起作用。
2. 如权利要求l所述的方法,其特征在于,它还包括以下步骤-通过比较由所述运算得到的所述结果(result, Chk(result))来检验 所执行的计算的完整性。
3. 如权利要求2所述的方法,其特征在于,所述检验步骤包括 检验通过分别为所述代码定义的所述运算和所述校验和运算的所述运 算得到的结果通过所述预定函数来链接。
4. 如权利要求1、 2或3所述的方法,其特征在于,所述方法包述运算的数据结构(20)以及专用于操纵对应校验和数据项以便执行对 应校验和运算的数据结构(30)。
5. 如权利要求4所述的方法,其特征在于,将所述虚拟机所使用 的所述数据结构(20, 30)组织成堆栈。
6. 如权利要求4所述的方法,其特征在于,将所述虚拟机所使用 的所述数据结构组织成寄存器。
7. 如权利要求1、 2或3所述的方法,其特征在于,所述方法包 括由所述虚拟机使用单个数据结构,以便一方面操纵用于执行所述代 码定义的所述运算的所述代码的数据项以及另一方面操纵用于执行对 应校验和运算的对应校验和数据项。
8. 如权利要求7所述的方法,其特征在于,将所述虚拟机所使用 的所述单个数据结构组织成堆栈。
9. 如权利要求l、 2或3所述的方法,其特征在于,所使用的所 述预定函数定义组射。
10. 如权利要求l、 2或3所述的方法,其特征在于,连续应用安 全执行纟莫式。
11. 如权利要求l、 2或3所述的方法,其特征在于,随机应用安 全执行:模式。
12. 如权利要求l、 2或3所述的方法,其特征在于,在检测到特 定条件时应用安全执行才莫式。
13. 如权利要求12所述的方法,其特征在于,应用所述安全执行 才莫式的条件是部分所述代码的解释的函数。
14. 如以上权利要求中的任一项所述的方法,其特征在于,所述 数字装置是引入了 Java或DotNet类型的虚拟机的芯片卡(lO)。
15. —种在便携数字装置上执行以中间代码编译的应用程序的虚 拟机,其特征在于,所述虚拟机可存储在所述装置的非易失性存储器 中,并且能够实现如以上权利要求中的任一项所述的方法。
16. —种便携数字装置,包括存储如权利要求15所述的虚拟机的 非易失性存储器。
17. 如权利要求16所述的装置,其特征在于,该装置是芯片卡(10)。
全文摘要
本发明涉及一种用于在配备了用于解释中间代码的虚拟执行机的便携数字设备(10)上执行以中间代码编译的应用程序的方法。本发明的特征在于包括应用安全执行模式的步骤,其中由虚拟机解释中间代码的步骤包括以下步骤对于为了执行代码定义的算术和/或逻辑运算而处理的代码的各数据(val1,val2),生成通过预定函数与代码的所述数据相关的控制数据(Chk(val1),Chk(val2));与所述运算的执行并行执行通过所述预定函数与代码定义的所述运算相关的控制运算,并对控制数据起作用。
文档编号G06F21/53GK101366035SQ200680052531
公开日2009年2月11日 申请日期2006年12月12日 优先权日2005年12月13日
发明者B·冈扎尔沃, P·吉拉尔德 申请人:格姆普拉斯公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1