背景技术:
技术实现思路
1、第一方面,本发明实施例提供了一种操作可信执行环境的方法,应用于分析来自第三方供应商的源代码,所述方法包括:
2、在可信执行环境中接收加密源代码;
3、使用存储在可信执行环境中的安全密钥,在可信执行环境中解密加密源代码,从而生成解密源代码;
4、对可信执行环境中的解密源代码进行分析,从而确定解密源代码的信任度量;
5、在可信执行环境中将解密源代码编译为可执行代码;
6、从可信执行环境中输出生成的可执行代码,或将提供的可执行代码接收到可信执行环境中,并将提供的可执行代码与生成的可执行代码进行比较,从而确定提供的可执行代码的验证度量;以及
7、禁止将解密源代码传递给可信执行环境之外的外部实体。
8、第一方面,本发明扩展到一种可信执行环境,应用于分析来自第三方供应商的源代码,所述可信执行环境包括一个分析单元和一个用于存储安全密钥的安全内存储器,所述可信执行环境设计用于:
9、接收加密源代码;
10、使用安全密钥解密加密源代码,从而生成解密源代码;
11、使用分析单元对解密源代码进行分析,从而确定解密源代码的信任度量;
12、将解密源代码编译为可执行代码;
13、从可信执行环境中输出生成的可执行代码,或接收提供的可执行代码,并将提供的可执行代码与生成的可执行代码进行比较,从而确定提供的可执行代码的验证度量;以及
14、禁止将解密源代码传递给可信执行环境之外的外部实体。
15、第二方面,更一般地说,本发明实施例提供了一种操作可信执行环境的方法,应用于分析来自第三方供应商的源代码,所述方法包括:
16、接收加密源代码;
17、使用存储在可信执行环境中的安全密钥,解密加密源代码,从而生成解密源代码;
18、对解密源代码进行分析,从而确定解密源代码的信任度量;以及
19、禁止将解密源代码传递给可信执行环境之外的外部实体。
20、因此,应理解的是,根据本发明的各个方面,提供了一种改进方法,其中源代码(例如软件代码或硬件描述语言代码,如下所述)可以由供应商提供给可信执行环境(trustedexecution environment,tee)(可能由接收方拥有),接收方可以信任提供的源代码,而无需任何一方或双方(即接收方和供应商)相互信任。然而如下所述,在一些实施例中,tee由供应商拥有,分析过程中不直接向接收方提供源代码。
21、具体的,供应商可以提供源代码的加密副本,在一些情况下,还可以提供相应的可执行代码,供应商声称所述可执行代码与下文所述的源代码相对应。如下所述,接收方(如客户)将加密源代码输入到可信执行环境(tee)中,所述可信执行环境可能包含一个合适的分析单元。tee可以访问一个密钥,所述密钥允许解密供应商提供的加密源代码。这样,tee就可以对源代码进行分析,并向软件接收方提供适当的保证(即信任度量)。在任何情况下,tee都不会输出解密源代码。此外,tee还使用分析单元来验证源代码(进而验证可执行代码)是否符合一些信任标准。因此,双方的需求都能得到满足,而不需要一方信任另一方。
22、换句话说,tee提供了一个“透明中心”,即它提供了一种结构,允许检查处于tee内部并且不会在tee外部显示的对象。
23、应理解的是,在上述场景中,alice(供应商)可以将加密源代码发送给bob(接收方),后者可能拥有所述tee。但是发明人意识到,在一些情况下,tee可能由供应商拥有。在这种情况下,供应商和接收方都信任的tee可以在一些实施例中进行分析并生成包含信任度量的证明报告,所述报告将提供给供应商(供应商可能拥有tee)。然后所述证明报告可以提供给接收方,例如:与对应源代码的可执行文件一起提供给接收方,接收方可以信任所述证明报告,因为它来自tee。进一步的,正如下文对本发明一些实施例的详细介绍,可以基于一些标准(例如由接收方设定)进行分析来生成信任度量,即使设定标准的一方本身并不拥有tee,但是所述标准也可以设定一些应检查的属性。例如:供应商持有tee,而接收方可以设定一个他们希望在tee进行测试中使用的标准。
24、当然也可以组合这些方法,即供应商和接收方都使用tee,供应商使用tee生成证明报告,随后提供给接收方(也可以选择编译源代码),接收方使用tee进行自己的分析,每一方使用的tee可能相同,也可能不同。
25、本领域的技术人员可以清楚地了解到,“可信执行环境”(tee)是一种安全的处理机制,它可以构成更大的处理机制或处理器的一部分,例如中央处理器(centralprocessing unit,cpu)。在技术上已知有许多不同类型的tee,本发明的各个方面和实施例可以很容易地应用于这些tee。上文所述的解密源代码禁止在可信执行环境之外传播的特点,实际上就是解密源代码可以安全地保留在可信执行环境中。
26、因此,tee是一种可以运行通用程序的计算环境。tee通常拥有自己的内存储器,但可以通过限制和加密使用外部存储器来谨慎扩展内存储器。tee可以向用户提供安全证明,因此,如果事实并非如此,任何用户都不能合理地认为自己在使用tee或查看tee的结果。这通常涉及证明和某种密钥协议,以及tee和用户之间签名机制的引导。一般来说,只有为各方都知道并信任的程序才可以作为tee的配置。此外,tee通常能够证明其配置方式。
27、本领域的技术人员可以清楚地了解到,术语“源代码”通常是指在任何编译过程之前,由人工编写的全部或部分底层代码。源代码可以用常规编程语言编写,例如:c、c++、c#、java、python、visual basic、jacascript、r、sql或者php。虽然这份清单并非详尽无遗,并且在本领域中已知有成千上万种不同的编程语言,但是本发明的原理仍适用于这些语言。只要能对代码进行相关分析,本发明也可用于未被广泛使用的专有编程语言。
28、术语“源代码”也可以引申为“中间语言”代码,例如:底层虚拟机的中间表示(lowlevel virtual machine intermediate representation,llvm ir)。本领域的技术人员可以清楚地了解到,中间代码通常是在源代码(用高级编程语言编写,如上文所列)和机器代码之间的中间表示。根据本发明各方面的实施例,应用于源代码的分析和验证技术也可应用于所述中间代码。因此,供应商可以用这种中间表示形式提供“源代码”。
29、因此,如上所述,在一些实施例中,源代码包含软件代码。然而,除了用于确定第三方供应商提供的软件可信度之外,发明人还意识到本发明的原理也可适用于硬件。本领域的技术人员可以清楚地了解到,电路尤其是复杂的数字电路,可以使用硬件描述语言(hardware description language,hdl)定义,合成器(类似于软件开发中使用的编译器)可以将所需电路行为的hdl描述转换成“网表”。所述网表是指物理电子元件(通常来自预定义元件库)和这些元件之间相关连接的列表,一旦构建成物理电路,就会具有hdl描述中定义的属性。本发明使用的术语“源代码”也应理解为包括用hdl编写的代码。两种常用的hdl是verilog和vhdl,虽然它们只是示例,但是本发明的原理适用于任何这类hdl。因此,在一些实施例中,源代码包括hdl代码。
30、进一步的,本领域的技术人员可以清楚地了解到,用于本发明一些实施例中的术语“可执行代码”,是指可以由处理器执行以实现相关功能的代码。一般来说,可执行代码是通过编译源代码中得到的,编译的结果是“二进制代码”(也称为“机器代码”或“机器可读代码”)。虽然通常这种形式对人类来说是无法理解的,但是术语“可执行代码”也可以扩展到“可执行源代码”,其中人类可读的代码是可执行的。进一步的,术语“可执行代码”还可以扩展到“字节码”(有时也称为“可移植代码”或“p-code”),本领域的技术人员可以清楚地了解到,字节码是一种指令集形式的编码,旨在由软件解释器执行或进一步编译成机器码。
31、供应商提供的代码可能会经过一些混淆处理。例如:源代码(或一些中间代码)可能会被混淆,从而使人类难以理解代码,但仍能编译成可执行文件,所述文件提供的功能与混淆前的源代码编译形成的可执行文件相同,或者直接以混淆源代码的形式执行。
32、然而应理解的是,对于源代码或可执行代码来说,并没有严格要求人和/或机器的可读性或可理解性。然而一般来说,源代码和可执行代码的形式可以是,对于在tee中进行的分析过程来说,源代码是可理解的,而可执行代码可能是不可理解的,或者是可理解的但理解程度低于源代码。虽然可执行代码对人类来说并不清晰,但应理解的是,源代码对人类来说也不一定需要清晰,只要在tee上可以分析执行源代码即可。
33、“信任度量”可以衡量软件是否可信,至少在一些实施例中,它可以提供二进制指示“是”或“否”(或者“通过”/“失败”,或类似),说明是否满足信任标准。例如:可以对软件的行为进行一系列检查,并向软件接收方提供一个简单的标志,表明是否通过了所有检查。在一些实施例中,信任度量可以提供更详细的信息,并且可以为每个此类检查提供输出。
34、此外,信任度量可能包括一个可信度值(或多个可信度值),而不是二进制决策。接收方可以确定并应用某个合适的阈值来衡量已装软件的可信度,或根据软件的可信度值采取不同的程序。
35、例如:信任标准可能包括代码是否恶意尝试打开端口、访问内存储器地址、安装更多软件或执行其他有害或可疑的活动。
36、因此,在一些实施例中,对解密源代码进行分析包括,确定当处理器编译和运行源代码时,是否试图打开端口。这有助于识别那些试图通过开放端口来破坏网络安全的软件。
37、在上述实施例中,对解密源代码进行分析包括,确定当处理器编译和运行源代码时,是否试图访问一个内存储器地址或内存储器地址范围(如一个寄存器或一组寄存器)。例如:试图访问允许范围之外的内存储器地址,来获取敏感数据或修改内存储器中其它地方的应用程序或数据。根据一些实施例,tee可能检查源代码是否试图访问预定内存储器范围之外的内存储器。例如:软件可以合法访问内存储器中的一个或多个位置,但没有正当理由访问所述范围之外的内存储器地址。如果软件真的试图这么做,则源代码可能会被认为是不可信的(或酌情给予较低的可信度值)。
38、进一步的,在上述实施例中,对解密源代码进行分析还包括,确定当处理器编译和运行源代码时,是否试图安装其它软件应用。这种方法可以识别那些试图安装“后门”的软件,而软件接收方不希望安装这种软件,和/或没有意识到已经安装过这种软件。
39、进一步的,在上述实施例中,对解密源代码进行分析还包括,确定在测试中是否已经遍历了每一行代码和/或条件分支。应理解的是,此测试可能包括模拟正在分析的程序的运行或在隔离环境中运行,并执行(或“练习”)所有代码行,遍历每个条件分支(即遵循每一个“if”语句、“case”语句以及其他代码分支的选项),以检查代码的行为。
40、进一步的,在上述实施例中,对解密源代码进行分析还包括,确定当处理器编译和运行源代码时,是否试图运行另一个软件应用。特别是,分析过程中可能会寻找一种软件应用程序,这种程序包含在数据中,并且试图以一种难以预见或难以分析其行为的方式运行。
41、在一些实施例中,供应商可以提供验证数据,以证明其提供的软件符合要求。例如,供应商可能声称其软件通过了一些测试、具有特定的性能等级、符合特定的标准或者类似情况。然后,tee可用来测试代码是否真的具有所声称的特性。因此,在一些实施例中,所述方法还包括:
42、接收来自第三方供应商的验证数据;
43、对解密源代码和/或由所述解密源代码派生的代码和/或由所述解密源代码派生的对象进行分析,从而生成第一组测试数据;以及
44、将验证数据与第一组测试数据进行比较;
45、可选地,其中信任度量包括一个与验证数据和第一组测试数据之间相似性相关的第一指标。
46、除此之外,或者作为替代方案,软件接收方可能希望自行测试,以确定第三方供应商提供的软件是否符合接收方指定的特定规范。因此,在上述实施例中,所述方法还包括:
47、接收提供的规范数据;
48、对解密源代码和/或由所述解密源代码派生的代码和/或由所述解密源代码派生的对象进行分析,从而生成第二组测试数据;以及
49、将规范数据与第二组测试数据进行比较;
50、可选地,其中信任度量包括一个与验证数据和第二组测试数据之间相似性相关的第二指标。
51、应理解的是,上述分析过程(即对收到的验证数据和/或规范数据进行分析时)可以针对解密源代码本身进行,也可以针对源代码派生的代码或对象进行。在软件方面,这可能包括由解密源代码编译而成的可执行文件。就硬件而言,可以针对网表或仿真电路进行分析,即所述对象可包括由相关hdl源代码综合生成的网表。
52、通常,如果在tee中对源代码派生的代码或对象进行分析,则所述代码或对象与供应商提供的可执行文件(或类似于网表的硬件等效物)将会有所不同。例如,与供应商提供的版本相比,源代码可能会被编译或合成为一种更适合在tee中进行分析的不同形式。
53、虽然分析过程中得出的tee输出结果可能只提供给软件接收方,但是在一些实施例中,所述方法包括生成含上述分析信息的反馈数据。在一些实施例中,进一步的,所述方法可能包括将所述反馈数据传递给第三方供应商。提供给软件接收方的信息和作为反馈提供给供应商的信息,可以是相同的,也可以是不同的。例如,可以向供应商提供更详细的信息,说明他们的代码未通过特定测试的原因,而接收方可能只被告知测试没有通过,但没有原因的详细说明,否则可能会“泄露”太多有关底层代码的敏感信息。然后,供应商可以采取行动,纠正发现的任何故障。无论tee由接收方还是供应商掌握,均可向供应商提供反馈意见。
54、在一些实施例中,所述方法还包括将解密源代码编译为可执行代码,并提供所述可执行代码作为输出。因此,根据这些实施例,可以对源代码进行适当的分析,而接收方无需访问源代码本身,然后tee可以编译所述源代码,并输出所产生的可执行代码,所述可执行代码可以被信任,并且与被分析的源代码相对应。
55、此外,所述方法还可能包括将解密源代码编译为中间代码。所述中间代码可由tee内的编译器或其他编译器编译,也可以作为tee的输出提供(例如,如果供应商确信中间代码对底层知识产权进行逆向工程不会构成重大风险)。如上所述,中间代码可作为代码的可移植表示,适合后续编译成可执行文件。
56、然而,在一些实施例中,第三方供应商可在提供加密源代码的同时提供可执行代码,其中第三方供应商可声称所附源代码与可执行代码是相对应的。因此,在一些实施例中,所述方法可以包括:
57、接收来自第三方供应商的可执行代码;
58、将解密源代码编译为测试用的可执行代码;
59、将提供的可执行代码与测试用的可执行代码进行比较,从而确定提供的可执行代码的验证度量;以及
60、禁止将解密源代码传递给可信执行环境之外的外部实体。
61、第三方面,根据本发明实施例,将在下文中做进一步详细概述,tee可以检查提供的源代码是否能够正确编译成与供应商提供的可执行代码基本相同的可执行代码。在一些实施例中,“测试用的可执行代码”可作为输出提供。
62、在一些源代码包括hdl代码的实施例中,所述方法还包括将解密hdl源代码进行综合以生成网表,并将所述网表作为输出提供。因此,可以在接收方无法访问hdl源代码本身的情况下对hdl源代码进行分析,然后tee可以合成一个适合于给定输出的网表,例如使用现场可编程门阵列(field-programmable gate array,fpga)、专用集成电路(application-specific integrated circuit,asic)、离散元件或本领域已知的任何其它适当技术“构建”电路,以实现hdl源代码所描述设备的硬件实现。
63、然而,在一些实施例中,第三方供应商可以在提供电路设计的同时,提供加密hdl源代码,第三方供应商可以声称网表(或等效物)与随附的hdl源代码相对应。因此,在一些实施例中,所述方法可包括:
64、接收来自第三方供应商的电路设计;
65、将解密hdl源代码合成为测试电路设计;
66、将提供的电路设计与测试电路设计进行比较,从而确定提供的电路设计的验证度量;以及
67、禁止将解密hdl源代码传递给可信执行环境之外的外部实体。
68、应理解的是,“电路设计”可以包括网表、电路图、电路布局、一些掩膜或集成电路或相同的设计。
69、第三方面,本发明扩展到一种可信执行环境,应用于分析来自第三方供应商的源代码,所述可信执行环境包括一个分析单元和一个用于存储安全密钥的安全内存储器,所述可信执行环境设计用于:
70、接收加密源代码;
71、使用安全密钥解密加密源代码,从而生成解密源代码;
72、使用分析单元对解密源代码进行分析,从而确定解密源代码的信任度量;以及禁止将解密源代码传递给可信执行环境之外的外部实体。
73、在一些实施例中,分析单元用于生成包含信任度量的证明报告,并将所述证明报告提供给供应商。
74、如上所述,在确认信任度量时,可以分析软件的多种不同行为。在一些实施例中,分析单元的作用是确定当处理器编译和运行源代码时,是否试图打开端口。
75、在上述实施例中,分析单元用于确定当处理器编译和运行源代码时,是否试图访问内存储器地址。
76、进一步的,在上述实施例中,分析单元用于确定当处理器编译和运行源代码时,是否试图安装其它软件应用。
77、进一步的,在上述实施例中,分析单元用于确定测试中是否遍历了每一行代码和/或条件分支。
78、进一步的,在上述实施例中,分析单元用于确定当处理器编译和运行源代码时,是否试图运行另一个软件应用程序。特别是,分析单元可能会寻找一种软件应用程序,这种程序包含在数据中,并且试图以一种难以预见或难以分析其行为的方式运行。
79、在一些实施例中,可信执行环境还包括一个编译器,所述可信执行环境使用编译器将解密源代码编译为可执行代码,并提供所述可执行代码作为可信执行环境的输出。
80、此外,在一些实施例中,可信执行环境还包括一个编译器,所述可信执行环境使用编译器将解密源代码编译为中间代码。然后,中间代码可由所述编译器或其它的编译器进行编译,或者在一些情况下,中间代码可作为可信执行环境的输出提供。
81、在一些实施例中,进一步的,所述可信执行环境设计用于接收来自第三方供应商的验证数据,其中分析单元用于:
82、对解密源代码和/或由所述解密源代码派生的可执行代码进行分析,从而生成第一组测试数据;以及
83、将验证数据与第一组测试数据进行比较;
84、可选地,其中信任度量包括一个与验证数据和第一组测试数据之间相似性相关的第一指标。
85、在一些实施例中,进一步的,所述可信执行环境设计用于接收所提供的规范数据,其中分析单元用于:
86、对解密源代码和/或由所述解密源代码派生的代码和/或由所述解密源代码派生的对象进行分析,从而生成第二组测试数据;以及
87、将规范数据与第二组测试数据进行比较;
88、可选地,其中信任度量包括一个与验证数据和第二组测试数据之间相似性相关的第二指标。
89、在一些实施例中,进一步的,所述可信执行环境设计用于生成含上述分析信息的反馈数据。在一些实施例中,进一步的,所述可信执行环境设计用于将所述反馈数据传递给第三方供应商。
90、在一些实施例中,所述可信执行环境设计用于:
91、接收来自第三方供应商提供的可执行代码;
92、将解密源代码编译为测试用的可执行代码;
93、将提供的可执行代码与测试用的可执行代码进行比较,从而确定提供的可执行代码的验证度量;以及
94、禁止将解密源代码传递给可信执行环境之外的外部实体。
95、第三方面,本发明扩展到一种非暂时性计算机可读存储介质,所述介质包括指令,当处理器执行指令时,会使处理器执行一种操作可信执行环境的方法,应用于分析来自第三方供应商的源代码,所述方法包括:
96、接收加密源代码;
97、使用存储在可信执行环境中的安全密钥,解密加密源代码,从而生成解密源代码;
98、对解密源代码进行分析,从而确定解密源代码的信任度量;以及
99、禁止将解密源代码传递给可信执行环境之外的外部实体。
100、第三方面,本发明还扩展到一种计算机软件产品,所述软件产品包含指令,当处理器执行指令时,会使处理器执行一种操作可信执行环境的方法,应用于分析来自第三方供应商的源代码,所述方法包括:
101、接收加密源代码;
102、使用存储在可信执行环境中的安全密钥,解密加密源代码,从而生成解密源代码;
103、对解密源代码进行分析,从而确定解密源代码的信任度量;以及
104、禁止将解密源代码传递给可信执行环境之外的外部实体。
105、应理解的是,上文就本方面的方法、可信执行环境、非暂时性计算机可读存储介质和计算机软件产品的任何或全部描述的可选特征,同样适用于本方面的其它所述方法、可信执行环境、非暂时性计算机可读存储介质和计算机软件产品。
106、第四方面,本发明实施例提供了一种操作可信执行环境的方法,应用于分析来自第三方供应商的源代码,所述方法包括:
107、接收提供的可执行代码和加密源代码;
108、使用存储在可信执行环境中的安全密钥,解密加密源代码,从而生成解密源代码;
109、将解密源代码编译为测试用的可执行代码;
110、将提供的可执行代码与测试用的可执行代码进行比较,从而确定提供的可执行代码的验证度量;以及
111、禁止将解密源代码传递给可信执行环境之外的外部实体。
112、因此,本领域的技术人员可以清楚地了解到,根据本发明的第四方面,tee可以使用编译器对解密源代码进行编译,然后验证生成的可执行代码是否与从供应商处接收的可执行代码相匹配。这将有助于确保接收到的可执行代码未被以任何方式修改。如上所述,关于本发明的其它方面,以及下文对本发明第四方面一些实施例的概述,还可以对接收到的源代码进行分析,以提供代码可信度的衡量标准。
113、在一些实施例中,验证度量包括测试用的可执行代码和提供的可执行代码之间的相似性度量。在一些实施例中,验证度量是二进制输出(即“是”或“否”或类似的标签),表示提供的可执行代码与测试用的可执行代码是否相匹配。“匹配”的要求可定义为两个可执行代码完全相同,但在一些实施例中,也可以要求相似度超过某个阈值,这个阈值时可以是预先确定的。这可以允许两个可执行代码略有不同,这种不同可能是由于编译器或编译过程的不同导致的。在一些情况下,可能需要语法上的一致性(即两个可执行代码行与行之间完全相同),而在其它情况下,可能只需要功能上的一致性(即两个可执行代码在行为上完全相同)。
114、应理解的是,有多种比较两个可执行代码以确定它们是否匹配的方法。如果需要语法上完全一致,可以逐行比较两个可执行代码,以确定它们是否相同。然而,在一些实施例中,将提供的可执行代码与测试用的可执行代码进行比较的步骤还包括,分别生成提供的可执行代码和测试用的可执行代码的哈希值,并比较所述哈希值以确定验证度量。本领域的技术人员可以清楚地了解到,哈希是一个单向函数的结果,所述函数采用给定的输入(在本例中为每个可执行代码),并在密钥的驱动下对其进行特定的确定性加密处理,以产生一个“扰乱”的输出,所述输出无法被逆向还原为原始输入。对于给定的密钥,如果两个可执行代码完全相同,通过同一个哈希函数应该返回相同的哈希值。通常情况下,两个代码之间的任何差异都会导致每个代码的哈希值完全不同。
115、当然,在一些实施例中,不必将两个可执行代码的全部内容进行哈希处理,而是可以将每个可执行代码的部分内容输入哈希处理,以确定可执行代码的选定部分是否相同。这样可以允许可执行代码的一些部分有所变化,同时要求它们在其它地方完全相同。
116、在一些实施例中,所述方法还包括对解密源代码进行分析,从而确定信任度量。因此,类似于本发明的其它方面,tee可用于分析供应商提供的源代码,以确定其功能和/或行为是否可信。
117、在一些实施例中,对解密源代码进行分析包括,确定当处理器编译和运行源代码时,是否试图打开端口。在上述实施例中,对解密源代码进行分析包括,确定当处理器编译和运行源代码时,是否试图访问内存储器地址。进一步的,在上述实施例中,对解密源代码进行分析包括,确定当处理器编译和运行源代码时,是否试图安装其它软件应用程序。
118、如上所述,关于本发明的其它方面,供应商可以声称提供的代码符合一些验证数据。在一些实施例中,所述方法还包括:
119、接收来自第三方供应商的验证数据;
120、对解密源代码和/或所述源代码派生的代码和/或所述解密源代码派生的对象进行分析,从而生成第一组测试数据;以及
121、将验证数据与第一组测试数据进行比较;
122、可选地,其中信任度量包括一个与验证数据和第一组测试数据之间相似性相关的第一指标。因此,在这种安排下,软件接收方可以检查提供的源代码是否符合相关验证要求(可能与前面描述的要求相类似),然后因为接收方可以确定源代码与提供的可执行代码之间是否正确对应,所以接收方可以推断出可执行代码是否也符合验证要求。
123、类似地,接收方可能有一些规范,他们希望确保提供的可执行文件符合这些规范。在一些实施例中,所述方法还包括:
124、接收提供的规范数据;
125、对解密源代码和/或所述源代码派生的代码和/或所述源代码派生的对象进行分析,从而生成第二组测试数据;以及
126、将规范数据与第二组测试数据进行比较;
127、可选地,其中信任度量包括一个与验证数据和第二组测试数据之间相似性相关的第二指标。软件接收方可以检查提供的源代码是否符合所提供的规范(所述规范可能与前面描述的规范类似),然后因为接收方可以确定源代码与提供的可执行代码之间是否正确对应,所以接收方可以推断出可执行代码是否也符合所提供的规范。
128、在一些实施例中,所述方法还包括生成含上述分析信息的反馈数据,进一步的,还包括将所述反馈数据传递给第三方供应商。在本发明上述任何一个方面,所提供的反馈可包括有关可信度测试是否通过的信息(即与软件的行为有关)和/或验证测试通过或未通过的程度(即与源代码和可执行代码之间是否正确对应有关)。
129、第四方面,本发明扩展到一种可信执行环境,应用于分析来自第三方供应商提供的源代码,所述可信执行环境包括一个分析单元、一个编译器和一个用于存储安全密钥的安全内存储器,所述可信执行环境设计用于:
130、接收提供的可执行代码和加密源代码;
131、使用安全密钥解密加密源代码,从而生成解密源代码;
132、使用编译器将解密源代码编译为测试用的可执行代码;
133、使用分析单元将提供的可执行代码与测试用的可执行代码进行比较,从而确定提供的可执行代码的信任度量;以及
134、禁止将解密源代码传递给可信执行环境之外的外部实体。
135、在一些实施例中,信任度量包括测试用的可执行代码和提供的可执行代码之间的相似性度量。
136、在一些实施例中,可信执行环境中还包括哈希逻辑,该哈希逻辑是指用于生成提供的可执行代码以及测试用的可执行代码的哈希值,其中分析单元可用于比较这些哈希值,从而确定信任度量。
137、在一些实施例中,分析单元用于分析解密源代码,从而确定信任度量。
138、在一些实施例中,分析单元用于生成包含信任度量的证明报告,并将该证明报告提供给供应商。
139、在一些实施例中,分析单元用于确定当处理器编译和运行源代码时,是否试图打开端口。
140、在上述实施例中,分析单元用于确定当处理器编译和运行源代码时,是否试图访问内存储器地址。
141、进一步的,在上述实施例中,分析单元用于确定当处理器编译和运行源代码时,是否试图安装其它应用程序。
142、进一步的,在上述实施例中,分析单元用于确定测试是否遍历了每一行代码和/或条件分支。
143、进一步的,在上述实施例中,分析单元确定当处理器编译和运行源代码时,是否试图运行其它应用程序。特别需要关注的是,分析单元可能会尝试运行包含在数据中的应用程序,并试图以一种难以预见或难以分析其行为的方式运行。
144、一些实施例中,可信执行环境还可用于接收来自第三方供应商的验证数据,其中分析单元设计用于:
145、对解密源代码和/或所述解密源代码派生的可执行代码进行分析,从而生成第一组测试数据;以及
146、将验证数据与第一组测试数据进行比较;
147、可选地,其中信任度量包括一个验证数据和第一组测试数据之间相似性相关的第一指标。
148、在一些实施例中,可信执行环境可进一步用于接收所提供的规范数据,其中分析单元设计用于:
149、对解密源代码和/或所述解密源代码派生的代码和/或所述解密源代码派生的对象进行分析,从而生成第二组测试数据;以及
150、将规范数据与第二组测试数据进行比较;
151、可选地,其中信任度量包括一个验证数据和第二组测试数据之间相似性相关的第二指标。
152、在一些实施例中,可信执行环境可进一步生成含上述分析信息的反馈数据。在上述实施例中,可信执行环境还能够将反馈数据直接传递给第三方供应商。
153、第四方面,本发明还扩展到一种包含计算机指令的非暂时性计算机可读存储介质,当处理器执行指令时,会使处理器执行一种操作可信执行环境的方法,应用于分析来自第三方供应商的源代码,该方法包括:
154、接收提供的可执行代码和加密源代码;
155、使用存储在可信执行环境中的安全密钥,解密加密源代码,从而生成解密源代码;
156、将解密源代码编译为测试用的可执行代码;
157、将提供的可执行代码与测试用的可执行代码进行比较,从而确定提供的可执行代码的验证度量;以及
158、禁止将解密源代码传递给可信执行环境之外的外部实体。
159、第四方面,本发明进一步扩展到一款包含计算机指令的计算机软件产品,当处理器执行指令时,会使处理器执行一种操作可信执行环境的方法,应用于分析来自第三方供应商的源代码,该方法包括:
160、接收提供的可执行代码和加密源代码;
161、使用存储在可信执行环境中的安全密钥,解密加密源代码,从而生成解密源代码;
162、将解密源代码编译为测试用的可执行代码;
163、将提供的可执行代码与测试用的可执行代码进行比较,从而确定提供的可执行代码的验证度量;以及
164、禁止将解密源代码传递给可信执行环境之外的外部实体。
165、应理解的是,上文就其它方面的方法、可信执行环境、非暂时性计算机可读存储介质和计算机软件产品的任何或全部描述的可选特征,同样适用于本发明其它方面的所述方法、可信执行环境、非暂时性计算机可读存储介质和计算机软件产品。
166、以上原则还可以扩展到以下场景:供应商向接收方抄送两份源码副本,第一个副本进行混淆处理,以使其对人类不可读;第二个副本更易阅读分析,但其中更清晰的副本经过加密处理,仅供tee内部读取。
167、因此,第五方面,本发明实施例提供了一种操作可信执行环境的方法,应用于分析第三方供应商的源代码,该方法包括:
168、接收提供的第一组源代码以及第二组加密源代码;
169、使用存储在可信执行环境中的安全密钥,解密第二组加密源代码,从而生成第二组解密源代码;
170、确定第二组解密源代码是否与第一组源代码相对应;以及
171、禁止将第二组解密源代码传递给可信执行环境之外的外部实体。
172、在一些实施例中,可以通过合适的分析单元直接比较这两份源码。然而,在本发明其它实施例中,该方法进一步包括:
173、将第一组源代码编译为第一组可执行代码;
174、将第二组解密源代码编译为第二组可执行代码;以及
175、将第一组可执行代码与第二组可执行代码进行比较,从而确定验证度量。
176、第五方面,本发明还扩展到一种可信执行环境,应用于分析来自第三方供应商的源代码,该可信执行环境包含了一个分析单元、一个编译器和一个用于存储安全密钥的安全内存储器,该可信执行环境设计用于:
177、接收提供的第一组源代码和第二组加密源代码;
178、使用存储在可信执行环境中的安全密钥,解密第二组加密源代码,从而生成第二组解密源代码;
179、确定第二组解密源代码是否与第一组源代码相对应;以及
180、禁止将解密源代码传递给可信执行环境之外的外部实体。
181、第五方面,本发明进一步扩展到一种包含计算机指令的非暂时性计算机可读存储介质,当处理器执行指令时,会使处理器执行一种操作可信执行环境的方法,应用于分析来自第三方供应商的源代码,该方法包括:
182、接收提供的第一组源代码和第二组加密源代码;
183、使用存储在可信执行环境中的安全密钥,解密第二组加密源代码,从而生成第二组解密源代码;
184、确定第二组解密源代码是否与第一组源代码相对应;以及
185、禁止将第二组解密源代码传递给可信执行环境之外的外部实体。
186、第五方面,本发明还扩展到一种包含计算机指令的计算机软件产品,当处理器执行指令时,会使处理器执行一种操作可信执行环境的方法,应用于分析来自第三方供应商的源代码,该方法包括:
187、接收提供的第一组源代码和第二组加密源代码;
188、使用存储在可信执行环境中的安全密钥,解密第二组加密源代码,从而生成第二组解密源代码;
189、确定第二组解密源代码是否与第一组源代码相对应;以及
190、禁止将第二组解密源代码传递给可信执行环境之外的外部实体。
191、第五方面,本发明的第一组源代码可包括混淆代码,其中第三方供应商声称第一组源代码与第二组源代码已经过了相关的混淆处理,因此两者可相互对应。
192、发明人认为,与上述讨论相似的原理也适用于供应商仅以加密形式向接收方提供的可执行代码,例如可在tee中运行代码。第六方面,本发明实施例提供了一种操作可信执行环境的方法,应用于分析第三方供应商的可执行代码,该方法包括:
193、接收加密可执行代码;
194、使用存储在可信执行环境中的安全密钥,解密加密可执行代码,从而生成解密可执行代码;
195、对解密可执行代码进行分析,从而确定解密可执行代码的信任度量;以及
196、禁止将解密可执行代码传递给可信执行环境之外的外部实体。
197、第六方面,本发明还扩展到一种可信执行环境,应用于分析来自第三方供应商的可执行代码,该可信执行环境包括一个分析单元和一个用于存储安全密钥的安全内存储器,该可信执行环境设计用于:
198、接收加密可执行代码;
199、使用安全密钥解密加密可执行代码,从而生成解密可执行代码;
200、使用分析单元对解密可执行代码进行分析,从而确定其信任度量;以及
201、禁止将解密可执行代码传递给可信执行环境之外的外部实体。
202、第六方面,本发明进一步扩展到一种包含计算机指令的非暂时性计算机可读存储介质,当处理器执行指令时,会使处理器执行一种操作可信执行环境的方法,应用于分析来自第三方供应商的可执行代码,该方法包括:
203、接收加密可执行代码;
204、使用存储在可信执行环境中的安全密钥,解密加密可执行代码,从而生成解密可执行代码;
205、对解密可执行代码进行分析,从而确定解密可执行代码的信任度量;以及
206、禁止将解密可执行代码传递给可信执行环境之外的外部实体。
207、第六方面,本发明还扩展到了一种包含计算机指令的计算机软件产品,当处理器执行指令时,会使处理器执行一种操作可信执行环境的方法,应用于分析来自第三方供应商的可执行代码,该方法包括:
208、接收加密可执行代码;
209、使用存储在可信执行环境中的安全密钥,解密加密可执行代码,从而生成解密可执行代码;
210、对解密可执行代码进行分析,从而确定解密可执行代码的信任度量;以及
211、禁止将解密可执行代码传递给可信执行环境之外的外部实体。
212、因此,根据本发明的第六方面,供应商可能根本不向接收方提供真实源代码,也不提供“清晰”“可读”的可执行代码。相反,可执行代码只能以加密形式提供,而分析工作也只能对在tee中安全保存的解密副本进行。
213、该可执行代码随后可以直接运行,并且也可以在执行分析的tee内运行。因此,在一些实施例中,该方法也能够在可信执行环境中运行解密可执行代码。
214、第七方面,更一般地,本发明提供了一种操作可信执行环境的方法,应用于分析来自第三方供应商的代码,该方法包括:
215、接收加密代码;
216、使用存储在可信执行环境中的安全密钥,解密加密代码,从而生成解密代码;
217、对解密代码进行分析,从而确定解密代码的信任度量;以及
218、禁止将解密代码传递给可信执行环境之外的外部实体。
219、第七方面,本发明扩展到一种可信执行环境,应用于分析来自第三方供应商的代码,该可信执行环境包括一个分析单元和一个用于存储安全密钥的安全内存储器,该可信执行环境设计用于:
220、接收加密代码;
221、使用安全密钥解密加密代码,从而生成解密代码;
222、使用分析单元对解密代码进行分析,从而确定解密代码的信任度量;以及
223、禁止将解密代码传递给可信执行环境之外的外部实体。
224、第七方面,本发明还扩展到一种包含计算机指令的非暂时性计算机可读存储介质,当处理器执行指令时,会使处理器执行一种操作可信执行环境的方法,应用于分析来自第三方供应商的代码,该方法包括:
225、接收加密代码;
226、使用存储在可信执行环境中的安全密钥,解密加密代码,从而生成解密代码;
227、对解密代码进行分析,从而确定解密代码的信任度量;以及
228、禁止将解密代码传递给可信执行环境之外的外部实体。
229、第七方面,本发明进一步扩展到一款包含计算机指令的计算机软件产品,当处理器执行指令时,会使处理器执行一种操作可信执行环境的方法,应用于分析来自第三方供应商的代码,该方法包括:
230、接收加密代码;
231、使用存储在可信执行环境中的安全密钥,解密加密代码,从而生成解密代码;
232、对解密代码进行分析,从而确定解密代码的信任度量;以及
233、禁止将解密代码传递给可信执行环境之外的外部实体。
234、根据本发明实施例的第七方面,“代码”可包括源代码、中间代码、可执行代码或任何其他适当的代码格式。在一些实施例中,代码可(酌情)在tee内编译运行,并且也可以在别的tee内运行。
235、第八方面,更一般地,本发明实施例提供了一种操作可信执行环境的方法,应用于分析第三方供应商的代码,该方法包括:
236、接收第一代码和第二加密代码;
237、使用存储在可信执行环境中的安全密钥,解密第二加密代码,从而生成第二解密代码;
238、确定第二解密代码是否与第一代码相对应;以及
239、禁止将第二解密代码传递给可信执行环境之外的外部实体。
240、第八方面,本发明还扩展到一种可信执行环境,应用于分析来自第三方供应商的代码,该可信执行环境包含了一个分析单元和一个用于存储安全密钥的安全内存储器,该可信执行环境设计用于:
241、使用存储在可信执行环境中的安全密钥,解密第二加密代码,从而生成第二解密代码;
242、确定第二解密代码是否与第一代码相对应;以及
243、禁止将第二解密代码传递给可信执行环境之外的外部实体。
244、第八方面,本发明进一步扩展到一种包含计算机指令的非暂时性计算机可读存储介质,当处理器执行指令时,会使处理器执行一种操作可信执行环境的方法,应用于分析来自第三方供应商的代码,该方法包括:
245、使用存储在可信执行环境中的安全密钥,解密第二加密代码,从而生成第二解密代码;
246、确定第二解密代码是否与第一代码相对应;以及
247、禁止将第二解密代码传递给可信执行环境之外的外部实体。
248、第八方面,本发明进一步扩展到一种包含计算机指令的计算机软件产品,当处理器执行指令时,会使处理器执行一种操作可信执行环境的方法,应用于分析来自第三方供应商的代码,该方法包括:
249、使用存储在可信执行环境中的安全密钥,解密第二加密代码,从而生成第二解密代码;
250、确定第二解密代码是否与第一代码相对应;以及
251、禁止将第二解密代码传递给可信执行环境之外的外部实体。
252、第八方面,在一些实施例中判断第二解密代码是否与第一代码相对应的步骤包括:
253、将第二解密代码编译为第三代码;以及
254、将第一代码与第三代码进行比较,从而确定其验证度量。
255、在本发明实施例中,“第一代码”、“第二代码”和“第三代码”包括了源代码、中间代码、可执行代码或任何其他适当的代码格式。例如,第一和第三代码可包括可执行代码或中间代码和/或第二代码包括了源代码或中间代码。在一些实施例中,代码能够直接或在当前tee环境中运行,并且也可以在别的tee中运行。
256、应理解的是,如果上述提及本发明的相关方案涉及到可信执行环境,那么还会进一步扩展到第一处理部分和第二处理部分的电子设备,所述第二处理部分与第一处理部分隔离,其中第二处理部分包含可信执行环境。在此种情形下,术语“可信执行环境”和“第二处理部分”可互换使用。
257、在上述实施例中,第一处理部分是第二处理部分的外部实体,这样第二处理部分可以避免将内部(或是此部分保留的任何关联内存储器)的任何解密代码(例如源代码)提供给第一处理部分(或第二处理部分之外的其他外部实体)。
258、每个处理部分都可以访问内存储器,但第二处理部分可以访问第一处理部分无法访问的专用内存储器,并且这个专用内存储器可以被加密。
259、第一和第二处理部分可以是同一处理器中的两个独立区域,也可以是按照时分复用方案运行的同一处理器。
260、应理解的是,上文所述有关本发明任何方面的可选特征,同样适用于本发明的其他方面。