用于指令级软件加密的方法和设备.pdf

上传人:r7 文档编号:996627 上传时间:2018-03-24 格式:PDF 页数:11 大小:608.50KB
返回 下载 相关 举报
摘要
申请专利号:

CN200910252802.0

申请日:

2009.12.01

公开号:

CN101751243A

公开日:

2010.06.23

当前法律状态:

授权

有效性:

有权

法律详情:

授权|||实质审查的生效IPC(主分类):G06F 9/30申请日:20091201|||公开

IPC分类号:

G06F9/30; G06F9/38; G06F21/22

主分类号:

G06F9/30

申请人:

汤姆森许可贸易公司

发明人:

斯蒂芬·昂奴; 穆罕默德·卡若米; 安东尼·蒙西弗罗特

地址:

法国布洛涅-比郎库尔

优先权:

2008.12.15 EP 08305946.9

专利代理机构:

中科专利商标代理有限责任公司 11021

代理人:

王波波

PDF下载: PDF下载
内容摘要

本发明提供一种对要在执行期间逐条指令地进行解密的编译的计算机代码指令进行加密的方法。使用链式处理模式对所述计算机代码指令进行加密,使得加密的指令({Instr.8})依赖于指令(I8)的值、先前指令(I5、I7)的值和伪随机数。由于可能发生可以从多于一个先前指令(I5、I7)到达指令的情况,先前指令(I5、I7)中的至少一个与随机数补偿器相关联,所述随机数补偿器在加密的指令的解密期间使用,使得不管先前指令是哪个指令,对加密的指令的解密都产生相同的结果。本发明还提供了一种加密设备、解密设备和方法、以及存储加密的编译的计算机代码指令的数字支持介质。

权利要求书

1.  一种对编译的计算机代码指令的集合进行加密以获得编译的计算机代码指令的加密集合的方法,所述加密集合预期在执行期间逐条指令地进行解密,所述编译的计算机代码指令的集合包括多个分支指令(I5、I7)以及标记指令(I8),其中,所述编译的计算机代码指令的集合的执行能够从所述多个分支指令中的每一个(I5、I7)直接继续至所述标记指令(I8),所述方法包括在设备(410)处执行的以下步骤:
使用链式加密函数对所述标记指令(I8)进行加密,使得加密的标记指令({Instr.8})至少依赖于所述标记指令(I8)的值和所述多个分支指令中所选的一个分支指令的值;以及
将所述多个分支指令中除了所选的一个分支指令之外的至少一个分支指令(I5、I7)中的每一个与补偿器值(C5、C7)相关联,所述补偿器值(C5、C7)要用于调整对所述加密的标记指令({Instr.8})的解密,使得不管紧接在所述标记指令(I8)之前执行所述多个分支指令(I5、I7)中的哪一个,在执行期间都产生相同的结果。

2.
  根据权利要求1所述的方法,其中,对所述标记指令(I8)的加密还依赖于与所述标记指令(I8)相关联的伪随机数。

3.
  根据权利要求2所述的方法,还包括以下步骤:作为代码密钥和所述伪随机数的生成所针对的指令的偏移的函数,来生成所述伪随机数。

4.
  根据权利要求1所述的方法,其中,所述标记指令(I8)的值和所述多个分支指令(I5、I7)中所选的一个分支指令的值分别是相应的操作码部分的值。

5.
  根据权利要求1所述的方法,其中,所述加密是通过对所述标记指令(I8)的值与所述多个分支指令(I5、I7)中所选的一个分支指令的值进行异或来执行的。

6.
  一种对使用链式加密函数加密的编译的计算机代码指令的集合进行解密的方法,所述方法包括在所述编译的计算机代码指令的执行期间在设备(420)处执行以下步骤:
获得针对所执行的函数(I5、I7)的补偿器值(C5、C7),
获得后续加密的函数({Instr.8}),在所述编译的计算机代码指令的执行期间,所述后续加密的函数跟随在所执行的函数(I5、I7)之后;
获得针对所述后续加密的函数({Instr.8})的伪随机数;以及
使用与所述链式加密函数相对应的解密函数来对后续加密的指令(I8)进行解密,所述解密函数至少根据所述后续加密的指令({Instr.8})、所执行的函数、所述伪随机数和所述补偿器值来生成后续函数(I8)。

7.
  根据权利要求6所述的方法,还包括以下步骤:作为代码密钥和所述后续加密的函数({Instr.8})的偏移的函数,来生成所述伪随机数。

8.
  根据权利要求6所述的方法,其中,加密的函数包括加密的操作码,如果存在未加密的参数,还包括未加密的参数,并且,只有所执行的函数(I5、I7)和所述后续加密的函数({Instr.8})的操作码部分用于解密。

9.
  根据权利要求6所述的方法,其中,所述解密是通过对所述后续加密的指令({Instr.8})的值、所执行的函数、所述伪随机数以及所述补偿器值(C5、C7)进行异或来执行的。

10.
  一种用于对编译的计算机代码指令的集合进行加密以获得编译的计算机代码指令的加密集合的设备(410),所述加密集合预期在执行期间逐条指令地进行解密,所述编译的计算机代码指令的集合包括多个分支指令(I5、I7)以及标记指令(I8),其中,所述编译的计算机代码指令的集合的执行能够从多个分支指令中的每一个(I5、I7)直接继续至所述标记指令(I8),所述设备(410)包括适于执行以下步骤的处理器:
使用链式加密函数对所述标记指令(I8)进行加密,使得加密的标记指令({Instr.8})至少依赖于所述标记指令(I8)的值和所述多个分支指令中所选的一个分支指令的值;以及
将所述多个分支指令中除了所选的一个分支指令之外的至少一个分支指令(I5、I7)中的每一个与补偿器值(C5、C7)相关联,所述补偿器值(C5、C7)要用于调整对所述加密的标记指令({Instr.8})的解密,使得不管紧接在所述标记指令(I8)之前执行所述多个分支指令(I5、I7)中的哪一个,在执行期间都产生相同的结果。

11.
  一种用于对使用链式加密函数加密的编译的计算机代码指令的集合进行解密的设备(420),所述设备(420)包括适于在编译的计算机代码指令的执行期间执行以下步骤的处理器(421):
获得针对所执行的函数(I5、I7)的补偿器值(C5、C7),
获得后续加密的函数({Instr.8}),在所述编译的计算机代码指令的执行期间,所述后续加密的函数跟随在所执行的函数(I5、I7)之后;
获得针对所述后续加密的函数({Instr.8})的伪随机数;以及
使用与所述链式加密函数相对应的解密函数来对后续加密的指令(I8)进行解密,所述解密函数至少根据所述后续加密的指令({Instr.8})、所执行的函数、所述伪随机数和所述补偿器值来生成后续函数(I8)。

12.
  一种包括计算机代码指令的数字支持介质(430),当在计算机上执行时,所述计算机代码指令执行根据权利要求6至9中任一项所述的方法。

说明书

用于指令级软件加密的方法和设备
技术领域
本发明一般地涉及软件,更具体地,涉及软件的加密及其解密以及在处理器中的执行。
背景技术
本节意在向读者介绍可能与以下描述和/或要求保护的本发明的各方面相关的领域的各个方面。相信这种讨论有助于向读者提供背景信息,以便于更好地理解本发明的各个方面。相应地,应注意,应根据这一点来阅读这些陈述,而不应将其接纳为现有技术。
长期以来,在本领域中,例如在US5386469以及US6345359中,已知通过加密来保护软件代码并且仅当要执行指令时才逐条指令地对指令进行解密。这些系统的缺陷是黑客可以相对容易地修改指令以查看会发生什么。
为了克服该缺陷,US 2005/108507提出对代码的基本块进行加扰并且通过生成签名来确保完整性。该解决方案的缺陷在于,在不关心完整性的被破解的系统上,依然有可能在尝试破解该系统时替换指令。
因此可以理解,需要一种克服现有技术的这些缺点中的至少一些缺点的软件加密解决方案。本发明提供了这种方案。
发明内容
在第一方面,本发明的目的是提供一种对编译的计算机代码指令的集合进行加密以获得编译的计算机代码指令的加密集合的方法,所述加密集合预期在执行期间逐条指令地进行解密。所述编译的计算机代码指令的集合包括多个分支指令以及标记指令,其中,所述编译的计算机代码指令的集合的执行可以从多个分支指令中的每一个直接继续至标记指令。使用链式加密函数对标记指令进行加密,使得加密的标记指令至少依赖于标记指令的值和所述多个分支指令中所选的一个分支指令的值;以及将所述多个分支指令中除了所选的一个分支指令之外的至少一个分支指令中的每一个与补偿器值相关联,所述补偿器值要用于调整对加密的标记指令的解密,使得不管紧接在标记指令之前执行所述多个分支指令中的哪一个,在执行期间都产生相同的结果。
在第一优选实施例中,对标记指令的加密还依赖于与标记指令相关联的伪随机数。
在第二优选实施例中,所述伪随机数是作为代码密钥和所述伪随机数的生成所针对的指令的偏移的函数来生成的。
在第三优选实施例中,所述标记指令的值和所述多个分支指令中所选的一个分支指令的值分别是相应的操作码(opcode)部分的值。
在第四优选实施例中,加密是通过对所述标记指令的值与所述多个分支指令中所选的一个分支指令的值进行异或(XOR)来执行的。
在第二方面,本发明的目的是提供一种对使用链式加密函数加密的编译的计算机代码指令的集合进行解密的方法。在所述编译的计算机代码指令的执行期间,获得针对所执行的函数的补偿器值和后续加密的函数,在所述编译的计算机代码指令的执行期间,所述后续加密的函数跟随在所执行的函数之后;获得针对所述后续加密的函数的伪随机数;以及使用与所述链式加密函数相对应的解密函数来对后续加密的指令进行解密,所述解密函数至少根据所述后续加密的指令、所执行的函数、所述伪随机数和所述补偿器值来生成后续函数。
在第一优选实施例中,所述伪随机数是作为代码密钥和所述后续加密的函数的偏移的函数来生成的。
在第二优选实施例中,加密的函数包括加密的操作码和未加密的参数(如果存在),并且只有所执行的函数和所述后续加密的函数的操作码部分用于解密。
在第三优选实施例中,解密是通过对所述后续加密的指令的值、所执行的函数、所述伪随机数和所述补偿器值进行异或来执行的。
在第三方面,本发明的目的是提供一种用于对编译的计算机代码指令的集合进行加密以获得编译的计算机代码指令的加密集合的设备,所述加密集合预期在执行期间逐条指令地进行解密。编译的计算机代码指令的集合包括多个分支指令以及标记指令,其中编译的计算机代码指令的集合的执行可以从多个分支指令中的每一个直接继续至标记指令。所述设备包括适于执行以下步骤的处理器:使用链式加密函数对标记指令进行加密,使得加密的标记指令至少依赖于标记指令的值和所述多个分支指令中所选的一个分支指令的值;以及将所述多个分支指令中除了所选的一个分支指令之外的至少一个分支指令中的每一个与补偿器值相关联,所述补偿器值要用于调整对加密的标记指令的解密,使得不管紧接在标记指令之前执行所述多个分支指令中的哪一个,在执行期间都产生相同的结果。
在第四方面,本发明的目的是提供一种用于对使用链式加密函数加密的编译的计算机代码指令的集合进行解密的设备。所述设备包括适于在编译的计算机代码指令的执行期间执行以下步骤的处理器:获得针对所执行的函数的补偿器值;获得后续加密的函数,在所述编译的计算机代码指令的执行期间,所述后续加密的函数跟随在所执行的函数之后;获得针对所述后续加密的函数的伪随机数;以及使用与所述链式加密函数相对应的解密函数来对后续加密的指令进行解密,所述解密函数至少根据所述后续加密的指令、所执行的函数、所述伪随机数和所述补偿器值来生成后续函数。
在第五方面,本发明的目的是提供一种包括计算机代码指令的数字支持介质,当在计算机上执行时,所述计算机代码指令执行根据本发明的第二方面的方法。
附图说明
现在参考附图,通过非限制性示例来描述本发明的优选特征,其中:
图1示出了根据本发明的优选实施例的总体链式处理模式加密方案;
图2更详细地示出了如何根据本发明的优选方法对指令进行加密:
图3示出了使用本发明的优选实施例加密的具有跳转的代码的示例;以及
图4示出了根据本发明的优选实施例的用于代码加密和解密的系统。
具体实施方式
本发明提出通过对编译的软件代码指令进行加密以及随后的解密来保护软件。为了进行描述,高级代码指令包括下列至少其一:
-基本块,即永远按顺序执行的机器级指令的集合。如果基本块包括跳转或者类似指令,则该指令为最后的机器级指令。这是由于通常在执行该代码时才决定下一个机器级指令。
-标记,可以认为是跳转指令的目的地。如果基本块包括标记,则该标记永远作为第一个指令出现。
图1示出了根据本发明的优选实施例的总体链式处理模式加密方案。通常,通过将指令与随机数和先前的指令进行异或来对指令进行加密。在图1中给出的示例中,仅对三条指令进行加密,但是将理解这可以推广到更大(或者更小)的数目。
待加密的指令:Instr 1、Instr 2以及Instr 3出现在左侧的第一列中。第二列包括伪随机数,优选地,这些伪随机数对于每一条指令来说是不同的。伪随机数是由流密码102使用秘密密钥来提供的伪随机流的一部分,所述密钥优选地对每一个编译的代码而言是唯一的。流密码是众所周知的密码原语;RC4和Salsa是两个非限制性示例。可以以以下方式来使用块密码:块密码可以有效地用作流密码,例如计数器模式中的AES(AES-CTR)。
第三列包括先前未加密的指令的值,除了第一个指令不具有先前的指令以外,所以,取而代之地使用初始化向量IV 104。第四列包括产生的加密函数。
可以看到,将第一指令与第一伪随机数以及初始化向量IV进行异或以产生第一加密指令{Instr.1}。然而,通过将第二指令与第二伪随机数和第一指令进行异或来对第二指令进行加密,以产生第二加密指令{Instr.2}。以相同方式对其它指令进行加密,即通过与伪随机数和先前的指令进行异或。
本领域技术人员将理解,图1描述的链式处理模式对于基本块的加密可以良好地工作。然而,超出该范围则无法使用该模式,这是由于可能发生以下情况:可以从多处到达的指令(例如通过跳转)具有多个互不相同的先前指令。通常这仅在一种情况下可以产生可以正确的解密,即从“正确”的先前指令到达后续指令的情况。
然而,本发明使得可以对整个代码进行链式处理。为此,将至少一些(可能是全部)指令与随机数补偿器相关联,随机数补偿器用于对随后的指令进行加密和解密。如下面将描述的,这些随机数补偿器确保不管哪一个指令是先前指令都可以正确地对指令进行解密。为了清楚,应当指出,随机数补偿器通常不是随机的,而是补偿伪随机数的值。
假定例如指令I14具有两个可能的先前指令,I13和I7。每一个先前指令分别与随机数补偿器C13和C7相关联。
在没有随机数补偿器的情况下,使用从指令I13的链式操作对指令I14进行加密得到:
{I14}=I14⊕R14⊕I13,]]>
其中表示异或运算并且括号表示加密的指令。
类似地,使用从指令I7的链式操作对指令I14进行加密得到:
{I14}=I14⊕R14⊕I7,]]>
如果I7和I13不同(这是通常情况),则{I14}具有两个可能值。为了得到{I14}的相同加密值,使用随机数补偿器C13和C7。等式变为:
{I14}=I14⊕R14⊕C13⊕I13,]]>以及
{I14}=I14⊕R14⊕C7⊕I7.]]>
为了确保两个等式产生相同的结果,右侧必须相同,即:
I14⊕R14⊕C13⊕I13=I14⊕R14⊕C7⊕I7,]]>
可以将其简化为
C13⊕I13=C7⊕I7.]]>
这意味着,如果则获得相同的加密结果。
有利地,将随机数补偿器存储在具有二进制代码的随机纠正表(RCT)中,优选地在其首部中进行加密。
优选地,就在代码执行之前执行代码的解密。处理器420能够使用流密码202以秘密密钥作为输入来生成正确的伪随机数,以对每一条指令进行解密。在具有随机数补偿器的情况下,从指令I7对指令I14进行解密得到:
{I14}⊕R14⊕C7⊕I7=I14⊕R14⊕C7⊕I7⊕R14⊕C7⊕I7=I14,]]>
从指令I13得到:
{I14}⊕R14⊕C13⊕I13={I14}⊕R14⊕C7⊕I7⊕I13⊕I13=I14]]>
因此两个等式产生相同的解密结果:I14
图2更详细地示出了如何根据本发明的优选方法对指令进行加密。在软件代码的编译期间,编译器提供与执行跳转的指令相关的信息。该信息用于对编译的代码进行加密。
如图1所示,通过将指令Instr.2与先前指令Instr.1和伪随机数进行异或来对指令Instr.2进行加密,得到加密的指令{Instr.2}。
然而,图2提供了生成伪随机数的更多细节。由流密码202(如图1所示,优选地是RC4、Salsa或者AES-CTR)生成伪随机数。流密码202使用代码密钥以及指令偏移206作为输入。RCT 204也使用指令偏移206作为输入并且提供随机数补偿器C1。如果Instr.2的加密不需要纠正(如果Instr.2不是标记则属于这种情况),则在RCT 204中优选地没有与指令偏移206相关联的信息。
指令偏移206向流密码202提供信息以确保针对指令每次都生成相同的随机数。本领域技术人员将理解,由于以预定顺序生成代码块,因此在图1中不需要这种指令偏移,而图2允许代码中的跳转;即,第n个待执行的指令不一定必须是代码中的第n个指令。
可以认识到,可以将任意跳转指令的随机数补偿器设置为零,然后按照需要进行迭代,以计算应当纠正的指令的随机数补偿器,从而实现代码的完全链式处理。
图3示出了使用本发明的优选实施例来加密的具有跳转的代码的示例。可以看到,可以从两个不同指令I5、I7到达最终指令I8。为了确保不管先前指令是哪一个,加密指令{Instr.8}都相同,则确保出于简明的原因,在图3中未示出用于对指令进行加密的随机数Ri
如果设置了C7,则将C5计算为另一方面,如果设置了C5,则将C7计算为如前所述,通常设置哪个随机数补偿器是并不重要;重要的是能够对从每一个可能的先前指令到达的指令进行解密。
然后,在前述RCT表中存储随机修改器的值。
图4示出了根据本发明的优选实施例的用于代码加密和解密的系统400。系统400包括适于接收和加密编译的二进制代码“Code”的加密设备410。加密设备410适于如前所述对二进制代码进行加扰。加密设备410存储预期用于加扰代码{Code}Kc的处理器420的公共密钥Kpub,并且生成优选地每次都改变的秘密代码密钥Kc(随代码不同而不同)。公共密钥Kpub可以对预期的设备或多个设备而言是唯一的。由流密码使用秘密密钥Kc来生成随机流。为了安全地传输秘密密钥Kc,使用公共密钥Kpub对其进行加密,这产生加密的秘密密钥{Kc}Kpub。{Kc}Kpub具有二进制代码(优选在其首部中)。
可以在一个或者更多处理器(图中未示出;下文中称为“处理器”)或者更大设备的一部分中实现加密设备410,该更大设备还包括适于编译代码的编译器并且还包括至少一个通信单元和一个存储器。加密设备410适于分析编译的代码以找到必需的信息(例如标记)以完成加密。
加密设备410还适于通过相同的信道或者通过分离的信道向处理器420发送加扰的代码{Code}Kc以及加密的秘密密钥{Kc}Kpub。可以理解,加扰代码{Code}Kc(具有或者不具有加密的秘密密钥{Kc}Kpub)可以分布在数字支持介质430上,例如CD-ROM,或者任意合适的数字分布网络(例如因特网、LAN、UMTS)。
处理器420从二进制代码首部中提取加密的秘密密钥{Kc}Kpub。处理器420优选包括适于使用与公共密钥相对应的私有密钥Kpriv来对{Kc}Kpub进行解密的密码处理器421。优选地,在安全(防篡改的)的位置存储私有密钥Kpriv。密码处理器还适于使用秘密密钥Kc对加扰的代码{Code}Kc进行解扰,以获得二进制代码,当对指令进行解扰时,将该二进制代码转发至高速缓存423,并且从高速缓存423将其进一步传送至第二处理器(CPU)424以供执行。处理器420还包括适于存储RCT的存储器(RAM)422。
尽管可以使用普通处理器来实现该系统和方法,应当理解,由于所谓的密码处理器更安全,因此使用密码处理器是有利的。
在前文的描述中,已经提到对指令进行加密。本领域技术人员将理解,指令的长度可以根据与所谓操作码相关联的变量的数目而改变。
根据第一种变型,仅对每一条指令的操作码进行加密,不对变量进行加密。
根据第二种变型,用于加密的伪随机数与最长指令的长度一样长。如果这样,首先对操作码进行解密,以获得与该操作码关联的变量长度相关的知识。然后在第二过程中,对变量进行解密。为了使用第二变型对指令进行链式处理,如果先前指令较长则将先前指令截断至当前指令的长度,但是如果之前的指令较短(或者等长)则不需要截断。
本领域技术人员将理解,如果仅计算随机数补偿器以便不管当前讨论的指令之前执行哪个指令都获得相同的解密值,则可以将用于指令加密的伪随机数与指令本身或者与先前指令相关联。
可以独立地或以任何合适组合来提供说明书以及(在合适时)权利要求和附图中公开的每个特征。被描述为以硬件实现的特征也可以以软件实现,反之亦然。
权利要求中出现的参考标记仅作为示意,不应对权利要求的范围起限制作用。

用于指令级软件加密的方法和设备.pdf_第1页
第1页 / 共11页
用于指令级软件加密的方法和设备.pdf_第2页
第2页 / 共11页
用于指令级软件加密的方法和设备.pdf_第3页
第3页 / 共11页
点击查看更多>>
资源描述

《用于指令级软件加密的方法和设备.pdf》由会员分享,可在线阅读,更多相关《用于指令级软件加密的方法和设备.pdf(11页珍藏版)》请在专利查询网上搜索。

本发明提供一种对要在执行期间逐条指令地进行解密的编译的计算机代码指令进行加密的方法。使用链式处理模式对所述计算机代码指令进行加密,使得加密的指令(Instr.8)依赖于指令(I8)的值、先前指令(I5、I7)的值和伪随机数。由于可能发生可以从多于一个先前指令(I5、I7)到达指令的情况,先前指令(I5、I7)中的至少一个与随机数补偿器相关联,所述随机数补偿器在加密的指令的解密期间使用,使得不管先前。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 物理 > 计算;推算;计数


copyright@ 2017-2020 zhuanlichaxun.net网站版权所有
经营许可证编号:粤ICP备2021068784号-1