编译设备和方法

文档序号:1009321 发布日期:2020-10-23 浏览:25次 >En<

阅读说明:本技术 编译设备和方法 (Compiling apparatus and method ) 是由 O·加西亚莫尔琼 A·佩斯特林 W·C·马龙 于 2019-02-20 设计创作,主要内容包括:一些实施例涉及一种被配置用于选择保护性变换以改善计算机程序的安全性的编译设备(100)。所述编译设备被配置为将保护性变换分配给所述数据流图的部分,并且至少从满足所述安全性和/或所述性能目标的所述数据流图和所分配的保护性变换获得所述计算机程序表示的编译。(Some embodiments relate to a compiling apparatus (100) configured for selecting protective transformations to improve security of a computer program. The compilation device is configured to assign protective transformations to portions of the dataflow graph and obtain a compilation of the computer program representation from at least the dataflow graph and the assigned protective transformations that meet the security and/or performance goals.)

编译设备和方法

技术领域

本发明涉及一种编译设备、一种编译方法以及一种计算机可读介质。

背景技术

由程序所使用或处理的数据能够具有高的价值。例如:允许实施给定功能的机器学习算法使用例如在机器学习过程期间学习到的机器学习模型的非常特定的权重。对所述程序的逆向工程能够揭示那些权重,使得攻击者能够容易地复制或改善算法功能,而无需访问被用于训练机器学习算法或计算力以实现训练过程的数据。类似地,一些应用利用秘密数据(诸如秘密密钥)来计算。保护那些密钥免于未经授权的使用是重要的。

存在用于保护计算机程序免于可能揭露秘密信息的逆向工程的各种方式。例如,各种已知的混淆方法使得难以跟随计算机程序中的数据流。

此外,编码可以被应用于计算机程序所作用于的数据,例如变量。试图对这样的受保护程序进行逆向工程的攻击者不知道程序作用于哪些数据。例如,可以使用各种白盒编码。例如,完全同态加密能够被用于保护所述算法。然而,这些编码技术到程序的自动化应用具有风险。

然而,这些技术到程序的直接应用不是简单的。一方面,编码到整个程序的应用能够导致大的性能惩罚;另一方面,更不安全编码的应用能够导致安全风险。

在US2003221121A1中描述了已知的编译器。已知的编译器保护软件免于窜改和逆向工程。程序的数据流被变换,使得可观察的操作与原始软件代码的意图分离。意图是攻击者将发现难以通过观察代码的执行来理解和解码数据流。

发明内容

将有利的是:具有自动地确定要在受保护的程序中使用的保护或者至少在其中进行辅助的设备和方法。为了实现这些和/或其他目的,提出了一种被配置用于选择保护性变换以改善计算机程序的安全性的编译设备。所述编译设备包括:

输入接口,其被布置为接收计算机程序表示,

处理器电路,其被配置为:

从所述计算机程序表示中获得数据流图表示,

反复地:

将保护性变换分配给所述数据流图的部分,所述保护性变换选自可用保护性变换的列表,

针对所述数据流图(200)和所分配的保护性变换来确定性能水平和安全性水平,

如果所述性能水平和所述安全性水平满足安全性和/或性能目标,那么终止对保护性变换的所述分配,

至少从满足所述安全性和/或所述性能目标的所述数据流图和所分配的保护性变换获得所述计算机程序表示的编译。

存在各种类型的可用保护性变换,其中的一些给出比其他更好的保护,其中的一些需要比其他更多的资源,例如,其更好或更坏地执行。因为针对性能和安全性尝试并且评估不同的保护性变换,所以进行经改善的选择。

所述编译设备是电子设备,例如,所述编译设备可以是计算机、服务器、台式计算机、膝上型计算机等。所述编译设备可以与其他编程工具或另外的编译设备(例如,链接器等)进行组合。

在本文中所描述的编译方法可以被应用于多种多样的实践应用中。这样的实践应用包括密码应用的混淆,例如,数字消息的加密、解密和验证。例如,所述编译方法可以被应用于专有算法的混淆,例如,学习算法、图像处理、音频处理等。

根据本发明的方法可以在计算机上被实施为计算机实施的方法,或者在专用硬件中实施,或者以这两者的组合来实施。针对根据本发明的方法的可执行代码可以被存储在计算机程序产品上。计算机程序产品的范例包括存储器设备、光学存储设备、集成电路、服务器、在线软件等。优选地,所述计算机程序产品包括被存储在计算机可读介质上的非瞬态程序代码,当所述程序产品在计算机上被运行时,所述非瞬态程序代码用于执行根据本发明的方法。

在优选实施例中,所述计算机程序包括计算机程序代码,当所述计算机程序在计算机上被运行时,所述计算机程序代码适于执行根据本发明的方法的所有步骤。优选地,所述计算机程序被实施在计算机可读介质上。

本发明的另一方面提供了一种使所述计算机程序可供下载的方法。当所述计算机程序被上载到例如Apple的App Store、Google的Play Store或Microsoft的Windows Store中时并且当所述计算机程序可用于从这样的商店下载时使用该方面。

附图说明

将仅通过范例的方式参考附图来描述本发明的另外的细节、方面和实施例。附图中的元素是为了简单和清晰而图示的,而不一定是按比例绘制的。在附图中,与已经描述的元件相对应的元件可以具有相同的附图标记。

在附图中,

图1a示意性示出了编译设备的实施例的范例,

图1b示意性示出了编译设备的实施例的范例,

图1c示意性示出了编译设备的实施例的范例,

图2a示意性示出了数据流图的实施例的范例,

图2b示意性示出了数据流图的实施例的范例,

图3a示出了优化对可用保护性变换的列表中的保护性变换的选择的方法,

图3b示出了优化对可用保护性变换的列表中的保护性变换的选择的方法,

图4a示意性示出了数据编码和解码系统的实施例的范例,

图4b示意性示出了数据加密和解密系统的实施例的范例,

图5示意性示出了编码的软件的实施例的范例,

图6示意性示出了编译方法的实施例的范例,

图7a示意性示出了根据实施例的具有包括计算机程序的可写部分的计算机可读介质,

图7b示意性示出了根据实施例的处理器系统的表示。

图1a-2b、4a-5和7a-7b中的参考数字列表:

100 编译设备

110 输入接口

120 存储装置

130 解析部分

132 数据流解析器

134 编码分析器

140 优化器部分

142 性能分析器

144 安全性分析器

145 组合部分

150 编译单元

160 处理器电路

161 存储器

200 数据流图

210 copy-phi子图

212-216 copy或phi节点

220,230 节点

222-226 节点

232-236 节点

241,242 copy-phi网络

243 数据操纵块

244 编码

245 copy-phi网络中的元素

410 节点

420 数据生成器(例如,传感器)

422 编码和加密(公钥:pubK)

430 软件

432 算法

433 算法

440 硬件

450 云

460 软件(安全环境)

462 解密&解码

470 硬件

472 安全元件(私钥:pk)

481-483 编码

1000 计算机可读介质

1010 可写入部分

1020 计算机程序

1110 (一个或多个)集成电路

1120 处理单元

1122 存储器

1124 专用集成电路

1126 通信元件

1130 相互连接

1140 处理器系统

具体实施方式

尽管本发明容许许多不同形式的实施例,但是在附图中示出了并且将在本文中详细描述一个或多个特定实施例,并且理解本公开将被认为是本发明的原理的范例,而并不旨在将本发明限于所示和所描述的特定实施例。

在下文中,出于理解的缘故,描述了实施例的在操作中的元件。然而,将明显的是,各个元件被布置为执行被描述为由其执行的功能。

此外,本发明并不限于实施例,并且本发明在于每个以及每种新颖的特征或者上文所描述的或在相互不同的从属权利要求中记载的特征的组合。

如上文所指出的,可以存在保护计算机软件免于未经授权的逆向工程的许多原因。例如,软件可以表示表示密码操作,例如,加密/解密操作或签名操作。希望将密码操作所需的秘密信息保密。软件也可以包括专有算法,例如,(经训练的)神经网络、图像处理算法等。可能希望将软件中嵌入的专门知识保密。这样做的一种方案是对软件中所使用的数据进行编码,例如加密。可以由合适适应的软件操作者对经编码的数据进行操作。例如,逻辑或算术操作等可以被编码为表格或者被编码为有限域内的多项式等,使得其能够作用于经编码的数据。这样的操作从白盒密码的领域获知。然而,这些技术能够也在密码学之外被应用。在S.Chow等人的“White-box Cryptography and an AES Implementation”中给出了对数据进行编码并且使用表格对经编码的数据进行操作的范例。

由于存在将对数据的编码应用于各种类型的软件的极大可能性,因此希望使对数据的编码自动化。然而,事实证明这不是如此容易的。实施例描述了自动地确定要被编码的变量和计算的系统和方法。

在图4a中示出了可能的使用情况。图4a示出了节点410,例如计算机,以及对不同软件/硬件块进行编码的可能分布。节点410包括数据生成器420,例如传感器。节点410将算法应用于由生成器420产生的数据;所示出的是算法432和433。例如,算法432可以是信号处理算法,并且算法433可以是利用密钥的AES加密。目的可以是保护专有信号处理算法免于被逆向工程。目的可以是保护加密(例如,AES加密)免于使其密钥被攻击者获得。为了达到这些目的,节点410使用其对其进行操作的数据的编码。所示出的是三种不同的编码:编码481、编码482和编码483。在这种情况下,节点410的输出是根据编码483进行编码的。一般而言,这不是必要的,输出可以是未经编码的,例如,在这种情况下,仅在AES下进行加密。节点410的输出被例如在服务器中运行的软件460进一步处理。在此,软件460至少部分地使用编码483,例如,以对进来的数据进行解码,而且也可以部分地在未经编码的数据上运行。

在图4b中给出了另一范例。在过去的几年期间,在完全同态方案和编码方案方面已经有巨大的进步。使用同态方案使得对经编码的数据的操作更容易。第一完全同态加密方案由Gentry在2009年提出。这样的FHE方案涉及这两种基本代数操作,亦即:加法和乘法。自此以后,已经提出了许多其他方案。简单加密算法库(SEAL)是旨在提供精心设计的并且记载的同态加密库的实践库。SEAL本身使用依赖于RLWE问题的FV同态加密方案。在任何(完全)同态加密方案中,涉及三个密钥:

被用于将明文加密成密文的公钥。

被用于在加密域中执行操作(例如,乘法)的评估钥。

允许用户对输出进行解密的私钥。

在图4b中示出了可能的使用情况。图4b示出了节点410,例如计算机,以及对不同软件/硬件块的编码/解码、加密/解密功能和私钥/公钥/评估钥的分布。节点410包括数据生成器420,例如传感器。所述数据生成器利用公钥pubK对数据进行加密。软件430使用评估钥(evalk)在加密域中在软件上执行操作。可以存在可能使用多个评估钥的多种算法。计算的结果可以被发送至在云450中运行的软件460。例如,可以相信软件460在安全环境中运行。软件460通过应用解密算法462来对计算结果进行解密。例如,所述解密可以使用被存储在一些安全元件472中的私钥。因此,软件430至少部分地在经加密的数据上运行。

如果使用(F)HE,那么三元组(私钥、公钥、评估钥)能够被创建并且被分布在不同的软件和硬件部件上。例如:

公钥能够被分布到负责生成数据的软件/硬件元件。不需要对该密钥的保护。

评估钥能够被分布到负责处理数据的软件/硬件部件。不需要对该密钥的保护。在实施例中,只要所生成的噪声是足够小的以至于解密是可行的,该密钥就可以被使用。

私钥能够被部署到与负责对输入数据进行解密相关联的软件的安全元件。

在图5中图示了另一应用。图5示意性示出了编码域中的操作的表示。源于白盒密码领域的编码方案已经被设计,以便使得对算法和其数据的逆向工程更加困难。编码能够是基于例如(i)半字节、(ii)余数系统或(iii)代数变换等。图5示出了在编码域中实现的操作的抽象表示。替代整数环(R,+,*)内的评估函数f(),R中的元素借助于变换T()被变换到不同域A中,使得相同函数f()能够基于在A中表示的元素和备选操作△t来实施。这种实施方案被表示为F()。在T()能够表示对数据进行加密的公钥的使用、在F()中实现的操作涉及编码的操作和一定类型的评估钥并且逆向变换相当于私钥的使用的意义上,这样的方案在一定程度上类似于(F)HE方案。然而,在白盒密码中通常将变换T()和T-1()的使用融合到代码本身中。提取的困难依赖于例如对实施其的大表格等进行逆向工程的困难。

在实施例中,编译器被配置为自动地创建保护计算机程序、其变量和/或其经处理的数据的程序P。例如,经编译的程序的部分可以在加密域中执行。这是有利的,因为程序员将常常在明域中对程序进行编码,并且仅在此之后,程序员将对在加密域中执行这样的程序感兴趣。程序P在加密域中的生成是借助于编译器来实现的。

图1a示意性示出了编译设备100的实施例的范例。

编译设备100包括被布置为接收计算机程序表示的输入接口110。编译设备100被配置用于选择保护性变换以改善计算机程序的安全性。例如,所述计算机程序可以例如以C、Pascal、C#等方式被表示(例如,写入)在高水平计算机程序中。例如,所述计算机程序表示可以是源代码。所述计算机程序表示也可以是可以被布置用于例如通过执行宏指令或者通过解析计算机代码而对计算机程序代码进行预处理的另一编译设备的输出。例如,所述计算机程序代码表示可以是高水平计算机代码的数据流图的表示。所述计算机程序表示可以是根据编译器中间语言的。

输入接口110可以是通信接口。编译设备100可以通过计算机网络(在图1a中未示出)与其他计算机设备进行通信。所述计算机网络可以是互联网、内联网、LAN、WLAN等。所述计算机网络可以是互联网。所述计算机网络可以是完全或部分有线的、和/或完全或部分无线的。例如,所述计算机网络可以包括以太网连接。例如,所述计算机网络可以包括无线连接,诸如Wi-Fi、ZigBee等。所述编译设备可以包括被布置为根据需要与其他设备通信例如以接收所述计算机程序表示的连接接口。例如,所述连接接口可以包括连接器,例如有线连接器,例如以太网连接器,或者无线连接器,例如天线,例如Wi-Fi、4G或5G天线。所述计算机程序表示可以以电子形式被接收。

所述编译设备的执行被实施在处理器电路中,在本文中示出了其范例。图1a示出了功能单元,所述功能单元可以是所述处理器电路的功能单元。例如,图1a可以被用作所述处理器电路的可能功能组织的蓝图。所述处理器电路未示出与图1a中的单元分离。例如,在图1a中所示的功能单元可以全部或部分地被实施在被存储在设备100处(例如,在设备100的电子存储器中)并且能由设备100的微处理器执行的计算机指令中。在混合实施例中,功能单元被部分地实施在硬件中,例如作为协处理器,并且被部分地实施在被存储并且在设备100上被运行的软件中。图1b示出了编译设备100的可能实施例。图1b示出了包括输入接口110、处理器电路160和存储器161的编译设备100。存储器161可以被用于数据和/或指令存储。

返回到图1a。编译设备100包括用于存储例如如从输入接口110接收到的计算机程序表示的存储装置120。存储装置120也可以被用于存储中间表示,例如数据流图等。

编译设备100包括解析部分130、优化器部分140和编译单元150。解析部分130包括数据流解析器132和编码分析器134。解析部分130和编码分析器134一起从所述计算机程序表示获得数据流图表示,其中,所述数据流图中的节点的至少一部分被标记为经编码的或未经编码的。例如,数据流解析器132可以被配置为从所述计算机程序表示获得数据流图。编码分析器134可以被配置为将安全性和/或性能目标关联到所述数据流图的一个或多个部分。

例如,所述计算机程序的编译标志或其他注释可以被定义,用户能够在对程序进行编译之前通过所述编译标志或其他注释来设置保护或性能目标。在实施例中,所述编译器对程序进行分析以获得程序的中间表示,并且可以反复地估计性能和/或估计预期的安全性水平。对性能的估计可以例如通过计数操作而被统计地或者例如通过模拟所述程序而被动态地完成。对安全性的估计可以例如通过参考与相应安全性措施相关联的固定安全性而被统计地或者通过将自动化攻击应用于所述程序的模拟而被动态地完成。迭代可以被进行直至满足由用户例如通过编译标志而设置的目标的不同类型的编码和保护被应用或者直至所述系统确定靶向的编译标志是不可行的。

安全性目标是重要的,因为不是所有数据都是同样重要的。例如,密码数据(诸如密钥数据)可能需要比用于对算法的混淆的编码更高的安全性水平。能够在程序构造(诸如变量、函数、宏指令等)之前包括注释作为杂注。

在实施例中,所述编译设备确定哪些节点要被保护(例如,被编码)并且哪些不需要被编码。此外,中间表示(例如,数据流图)可以被修改以改善经编码的和未经编码的节点的分布。分配受保护的(例如,经编码的)和非受保护的(例如,未编码的)节点的特别有利的方式是使用由相同申请人提交的欧洲专利申请…(代理人案号2017PF02452)的方法。例如,其公开的是:自动地确定要被编码在程序中的变量和计算。这可以通过以程序的中间表示的方式查找危险情况来完成。危险情况可以通过代码复制和计算的向后传播来解决,使得攻击者不能够容易地跟踪代码流等。

编码分析器134的输出可以包括哪些变量应当被保护以及哪些变量不应当在程序中被保护;此外,编码分析器134可以针对所述变量指定安全性和/或性能目标。后者可以通过将安全性和/或性能目标关联到数据流图的部分来表示。

编码分析器134不需要指定如何最佳地实现性能/安全性目标。选择保护不是微不足道的任务,因为不同类型的保护(例如,编码)具有关于安全性和性能的不同权衡。更多的时候,秘密的编码需要更高的CPU或存储器要求。此外,不同类型的编码能够被应用于更多或更少的所谓的copy-phi网络,例如,仅与程序中的数据流有关的部分,但是这可能影响编译期间的计算性能,并且影响执行期间的资源,特别是程序大小。

例如,所述数据流图可以呈以静态单赋值(SSA)形式。这是被软件编译器用作用于执行分析和优化的代码表示的众所周知的、流行的并且高效的流暴露形式。已经开发了基于静态单赋值的有效算法来解决常数传播、冗余计算检测、死代码消除、归纳变量消除以及其他需求。

用于获得特别是SSA形式的数据流图并且基于数据流图来优化和/或编译计算机程序的高效算法是已知的。关于静态单赋值描述了优选实施例。可以为标准编译器提供背景的标准参考是Steven Muchnick等人的1997年的“Advanced Compiler Design&Implementation”(ISBN 1-55860-320-4)。

因此,在部分编译之后,我们获得具有静态单赋值(SSA)性质的数据流图表示:每个变量被精确地分配一次,并且每一个变量在其被使用之前被定义。在该图中,边缘是(时间)变量,并且节点是操作(+,-,*,…),存储器访问(*p=….)等。

在图2a中示出了SSA形式的数据流图的范例。在实践中,数据流图可能大得多,在此情况下,图2a可以被视为更大数据流图的细节。所述数据流图不必是整个程序的数据流图,而是可以是数据流图的一部分,例如库、例程、基本块等。

SSA图(特别是SSA图200)是表示计算机程序代码(例如,源代码)的中间形式的一种类型的数据流图。指示了SSA图。SSA图的顶点(也被称为节点)表示操作。SSA图的边缘表示数据保持器,诸如寄存器(例如,包括虚拟寄存器)或存储器(例如,存储器的选定部分)。图2a示出了与计算机程序(片段)相对应的例示SSA图。注意,本文中图形地图示的SSA图可以在编译设备100的电子存储器中被表示为数据结构。

SSA图中的两种类型的节点是特殊的:copy节点和phi-节点。所述SSA图可以包含将进来的值分布到一个或多个节点的copy节点。图2a示出了一个这样的copy节点:copy节点214。phi操作被用于实施由所述图中的控制流引起的数据选择。例如,z=phi(a,b)意味着,当上一个到a的分配是比上一个到b的分配更新的,那么a应当被分配给z。对于b而言反之亦然。范例图200包括两个phi-节点:phi-节点212和phi-节点216。优选地,如果phi-节点是要通过一定种类的编码来保护,则可能希望确保所有输入都根据相同的编码方案进行编码。

在解析和SSA变换(如果需要的话)之后,所得到的数据流图可以包含子图或子网络,其仅由phi节点和copy节点组成——所谓的copy-phi网络。这样的子图的边界通过具有不同类型的语句(例如,算术操作、存储器操作等)节点来表示。后者可以被称为操作节点。

在执行期间是实况的并且具有多个来源和多个目标的数据将在作为copy-phi网络的SSA数据流图中是可见的。如果数据流呈以SSA形式,则我们因此可以将具有多个来源和多个目标的数据识别为copy-phi网络。然而,这不是必须的。例如,不同类型的数据流图具有识别具有多个来源和多个目标的数据的不同方式。由于本文中所描述的优选实施例使用SSA型数据流图,我们将继续参考copy-phi网络或copy-phi子图。

数据流图200示出了具有3个节点的copy-phi网络210。图2a中的其他节点可以表示其他操作。例如,节点222和234可以表示增量操作,例如,‘i:=j+1’。例如,节点224可以表示从存储器的读取操作。例如,节点226可以表示参数输入,例如,从参数到例程的输入。例如,节点236可以表示算术操作。copy-phi网络中的节点被标记有图2a中的散斑图案。图2a示出了在copy-phi网络的输出侧处的节点220以及在copy-phi网络的输出侧处的节点230。

编码分析器134可以将数据流图中的节点标记为经编码的或未经编码的,并且也可以关联安全性和/或性能标记。例如,这可以在编译过程中例如与针对数据流图的解析一起完成。流控制操作(诸如copy或phi节点)不必被标记。优化器部分140可以进一步将特定的保护性变换关联到数据流图的部分(例如,如另外的标记)。

节点作为经编码的或未经编码的和特定的保护性变换的标记随后可以由编译单元150使用。例如,编译单元150可以使用本地操作来作用于未经编码的节点。例如,增量操作能够由编译单元150例如通过机器‘INC’指令来实施。对于编码的操作,编译单元150可以使用编码的操作,例如,库可以能调用来执行所述操作。例如,编译单元可以调用‘ENC_INC()’操作来执行编码的增量。编码的函数接收经编码的数据,并且输出经编码的数据。例如,经编码的操作可以被实施为表格或者被实施为有限域内的多项式。

为了保护程序、其变量和/或经处理的数据,希望具有自动地创建在加密域中被执行的程序P的过程。例如,程序员可以在明域中编写程序,并且仅在此之后,程序员才将对在加密域中执行程序感兴趣。通过对节点的自动或手动或部分手动/部分自动的标记,编译器单元150具有调用正确的经编码的或未经编码的函数所需的信息。但是,程序的开发可以在不过多注意这些问题的情况下发生。

例如,在实施例中,所述编译设备选择编码域的数量n,并且将所述操作分成编码域的数量。增加数量增加了例如防备白盒攻击的安全性,但是其也将增加程序的足迹。

将节点标记为经编码的或未经编码的可以根据编码规则来完成。例如,规则基础可能需要一些节点是未经编码的。例如,与存储器访问、外部函数调用和参数相对应的节点可以被标记为未经编码的。例如,在实施例中,一些节点可以根据规则被标记为未经编码的,并且剩下的所有节点可以被标记为经编码的。

例如,在实施例中,关于编码的约束可以来自界面,例如,计算机代码必须不与所使用的编码相兼容的设备、存储器或其他软件进行接口。关于编码的约束也可以来自所使用的编译单元或库中的约束。例如,不能以经编码的形式来支持一些操作,例如,对浮点数的操作等。

例如,在实施例中,可以使用两步方案。根据规则,一些节点必须是未经编码的,例如,与存储器访问、外部函数调用等相对应的节点。所有其他节点最初可以被标记为经编码的。根据另外的规则,例如启发法,即使其最初是经编码的,一些节点也可以被标记为未经编码的。例如,在解析之后,结果可以是一些操作不能够以加密的形式被执行,例如,库不支持。例如,一些节点可以对应于对浮点数的操作,但是编码的浮点操作可能不是可用的。所述编译单元可以输出警告或输出日志等,使得程序员能够验证哪些操作以编码的形式被执行而哪些不是。在实施例中,程序员可以以计算机程序表示的方式***编译器指令。例如,在源代码中,程序员可以指示哪些变量是要被编码的或者哪些变量不是要被编码的。在实施例中,所有节点,除了copy-phi节点之外,都被标记为经编码的或未经编码的。

在实施例中,解析部分130也可以修改数据流图以适应所述编码,例如,以避免接收多个不同编码的phi-节点,或者避免数据流图中的已知是危险的子图。

编译设备100包括优化器部分140。优化器部分140被布置为将保护性变换分配给所述数据流图的部分。例如,设备100可以包括可用保护性变换的列表,优化器部分140可以从所述可用保护性变换的列表选择保护性变换。

优化器部分140包括性能分析器142和安全性分析器144。性能分析器142被布置为确定针对数据流图200和所分配的保护性变换的性能水平。性能通常涉及时间性能,而且也可以涉及大小性能,例如,经编译的程序的大小。性能的混合定义也是可能的。

存在性能水平能够被确定的若干种方式。例如,性能分析器142可以被配置为对数据流图中的多种类型的操作的数量进行计数,并且获得当那些操作根据所分配的保护性变换被编码的操作替代时的预期成本。

例如,性能分析器142可以对数据流图200中的节点的数量以及其执行的操作的类型进行计数。每个保护性措施可以具有可以与可用保护性措施的列表一起被存储的相关联的性能惩罚。例如,性能分析器142可以确定存在为增量操作的15个节点,其中的10个节点通过用ENC_INC表格查找替代增量操作来进行编码;其中的2节点个被掩码但是对明文数据进行操作,并且其中的3个节点不受保护。针对总共10*1.6+2*.4+3*.1=17.1,相关联的性能可以分别为1.6、.4和.1。备选地,可以估计性能惩罚,在这种情况下,针对总共10*1.5+2*.3=15.6,其可以分别为1.5、.3和0。这不考虑循环,但是足以获得对由操作引起的性能惩罚的粗略估计。

在更先进的实施例中,循环被考虑,例如,通过估计在编译时候所采取循环的次数或者通过对示范性输入模拟计算机程序。例如,模拟可以直接在中间表示上(例如,在数据流图上)完成,或者暂时的编译可以出于模拟的目的而例如使用分析工具(profiler)来执行。在实施例中,模拟是针对示范性输入数据来完成的,在此之后,记录(例如,扼要描写)节点被执行的次数。所记录的执行次数然后被用于对静态性能水平进行加权。例如,继续上文的范例,节点中的一个可以被执行10次,但是其余的可以仅被执行一次。在这种情况下,当计算性能水平时,前者节点接收十倍的更高权重。

在决定哪些节点是经编码的而哪些节点不是之后,保护性措施(例如,编码以及编码之间的转换)可以被***在所述数据流图中。***所述转换保持所述数据流图有效:在具有编码的和/或未编码的操作的数据流图中,所述程序不能够在没有转换的情况下适当地工作。

优化器部分140包括被布置为确定针对数据流图200和所分配的保护性变换的安全性水平的安全性分析器144。所述安全性水平可以在整个数据流图或者其子图的水平上进行计算,但是也可以在个体节点和/或边缘的水平上进行计算。例如,在实施例中,安全性目标可以被分配给所述数据流图中的一个或多个边缘和/或节点。所述安全性目标可以从针对所述数据流图中的一个或多个边缘和/或节点获得的安全性目标来获得。估计安全性水平可以以与估计性能水平相似的方式来完成。例如,可以添加个体节点和/或边缘的安全性水平。通常,不需要对具有节点将被执行的预期次数的节点进行加权。

所述安全性水平可以指示所期望的保护的类型。例如,所述安全性目标可以包括安全性类型。安全性类型的范例包括保密性和完整性。在前者中,攻击者应当不能够获得变量的明文值,而在后者中,攻击者应当不能修改值。可以检测被修改的值,但是也可以允许其发生,只要计算的最终结果被随机化。例如,后者可以通过对变量以及检查值(例如,常值或变量的函数)进行编码来实现。只要检查值是正确的,其就不影响具有变量的计算,但是如果检查值是不正确的,则其确实影响,使得一旦攻击者进行了修改,未来的计算就被扭曲。例如,参见国际专利申请WO2015082212A1,“A computing device for iterativeapplication of table networks”。

所述安全性目标也可以包括攻击类型。所述攻击类型指示所述编译器应当防备的攻击的类型。范例包括:白盒,其中,攻击者已经充分读取并且编写当软件正在运行时对软件的访问;侧信道时间,其中攻击者已经访问输入和输出值以及程序或其部分执行所花费的时间,侧信道功率,其中攻击者已经访问输入和输出值以及当程序执行时所消耗的功率。为了防备侧信道攻击,所述保护性措施可以包括恒定时间或恒定功率操作、或者随机化虚拟操作的***。

所述安全性目标可以包括攻击努力,例如,预期攻击者投入攻击程序的努力量。例如,攻击努力可以是高、中等、最佳努力。所述努力也可以被表示为数值100、10、1等。

例如,通过编码的增量ENC_INC替换增量操作可以具有针对白盒的中等安全性等级和针对消耗时间的高等级。然而,增量与其他操作急性组相合的保护可以具有更高的白盒等级等。

在更先进的实施例中,所述安全性水平使用自动化泛型攻击来估计。泛型攻击是在不了解程序的内部的情况下操作的攻击。其甚至能够被编译器本身运行防备程序,因为对攻击的类型的了解等不是必要的。

例如,在实施例中,所述安全性目标指示输入变量和秘密变量。针对侧信道型操作,希望所述秘密变量不与或者几乎不与程序中的可观察信息相关联。注意,针对所述关联,程序的未受保护的版本中的秘密变量可以被使用,而针对可观察信息,具有所分配的保护性措施的可观察信息被使用。

所述安全性水平可以通过以下操作来估计:

针对秘密变量的不同值,获得计算机程序的多次执行,并且任选地针对输入值中的不同值,记录可观察对象的值,例如,在计算机程序的执行期间依赖于输入变量的计算机程序的至少一个变量,例如,遍及执行通过变量呈现的一系列值,和/或记录对至少一个变量执行的操作的操作时间和/或估计的功率消耗等,例如,秘密值可以是密钥或其部分,例如第一字节。例如,所述输入值可以是要利用密钥进行加密的输入消息。如果一些变量与密钥相关联,则其可能泄露关于密钥的信息,这可能是不期望的。

计算没有所分配的保护性变换的秘密变量与可观察对象(例如,记录的值或操作时间等)之间的相关性。

如果可观察对象之间的相关性(例如,至少一个变量)是高的,那么安全性是低的,因为秘密变量可以根据可观察变量来估计。如果关联接近于0或者理想地为0,则安全性更高。例如,安全性目标A可以与在0.01之下的相关性相关联,并且安全性目标B与在0.1之下的相关性相关联。安全性目标A将给予防备侧信道攻击的更好抵抗,但是可能需要更高的性能成本。

优化器部分140被配置为重复保护性变换到数据流图的部分的分配,直至性能水平和安全性水平满足安全性和/或性能目标。例如,所分配的保护性变换可以被部分地修改以更好地达到目的。例如,针对一些变量,保护性变换可以在增加的安全性水平的情况下被使用,针对其他变量,保护性变换可以在更低的安全性水平的情况下被使用等。当实现目标时,或者当达到目的似乎不可实现时,例如,在一些时间量已经逝去之后,优化器140可以终止对保护性变换的分配。

存在优化器部分140可以执行优化的各种方式。例如,所述优化可以遵循预定的顺序,其中,例如,首先保护用户指示的变量,然后小变量在大变量之前被保护等。备选地,优化器140可以使用各种优化技术中的一种。例如,优化器140可以执行随机游走,并且保持最佳的选择。例如,优化器140可以执行贪婪优化,其中,对用户目标具有最大贡献的第一部分被保护。例如,优化器140可以执行爬山算法、模拟退火、禁忌搜索等。

例如,要被使用的编码的数量可以事先被固定为数量n。接下来,能够被编码的每个运算符被随机地分配到编码域。安全性水平是通过计算密钥与变量之间的相关性来计算的。到编码域的分配然后根据优化方法(诸如爬山算法等)被反复地修改,以最小化所述相关性,例如,以最小化最大相关性或者所有相关性的总和等。

最后,编译部分150被配置为至少从满足安全性和/或性能目标的数据流图和所分配的保护性变换来获得对所述计算机程序表示的编译。

图3a示出了优化可用保护性变换的列表中的保护性变换的选择的方法301。所述方法包括:

将初始保护性变换分配311给被选择的数据流图的部分,使得相关联的安全性水平实现所述安全性目标。例如,所述保护性变换可以被选取为具有在阈值之上的安全性水平,或者其可以被选取为是最高(最佳)安全性水平变换,

性能水平被确定312

如果所确定的性能水平在性能目标313之下,一个或多个分配的保护性变换被修改314为具有更低的相关联的安全性水平的保护性变换。所述方法然后被重复直至所述目标被实现。

如果所述目标被实现,则所述方法被终止315。

图3b示出了优化对可用保护性变换的列表中的保护性变换的选择的方法302。所述方法包括:

将初始保护性变换分配321给被选择的数据流图的部分,使得相关联的安全性水平在所述安全性目标之下。例如,所述保护性变换可以被选取为具有在阈值之下的安全性水平,或者其可以被选取为是最低(最坏)安全性水平变换,

性能水平被确定322

如果所确定的性能水平在性能目标323之上,则一个或多个分配的保护性变换被修改324为具有更高的相关联的安全性水平的保护性变换。所述方法然后被重复直至所述目标被实现。如果所述目标被实现,则所述方法被终止325。编译可以在性能水平仍然在性能目标之上的最后一组保护性变换的情况下被执行。

在方法301中,安全性被降低,直至满足性能目标。在方法302中,不同的方案被使用,在这种情况下,性能预算被消耗以最佳地满足安全性目标。其取决于方法301和302中的哪一种方法对于给定情况是最佳的期望权衡。

能够被分配(例如,是在列表中)的保护性变换可以包括针对边缘的一个或多个变量保护和/或针对数据流图的节点的操作保护。例如,可能的变换包括:

对变量的编码以及对解码的变量的操作的明文执行。在这种情况下,变量大部分时间是编码的,但是仅在其***作之前和之后是解码的。编码可以是随机双射操作,可能包括状态,例如盐、值。编码也可以是掩码操作,例如,加法,例如异或运算、随机值。

对变量的编码和对所述编码的变量的操作的编码的执行。在这种情况下,变量是编码的,但是也以编码的形式***作。这一般是更昂贵的操作,因为其可能需要查找表或多项式等来执行操作。

被应用于变量和/或操作的同态加密。

恒定时间执行操作。在这种情况下,变量不必是编码的,但是对其执行的操作独立于其值。这可以表明操作总是以最坏情况时间的方式执行。

分配具体保护性措施常常具有影响。如果要对编码的数据执行操作,则这意味着数据应当能够以编码的形式可用。如果要对数据执行另外的操作,则其应当准备好以相同编码的方式接受数据。这可以通过将从一种类型的编码转换为另一种类型的转换节点***在数据流图中来实现。

这可以通过将节点和/或边缘分配到编码域来管理。多个编码域可以被建立。被分配到相同编码域的数据流图的部分被分配相同的保护性变换。通常,具有更多编码域对安全性来说是有益的,另一方面,具有多个编码域会增加程序的足迹。

例如,假定在上文的软件中指定的两种算法A和B通过在下面的表格中的列1中描述的函数fA和fB来实施。在接下来的列2、3和4中并且假设那两个函数中的每个函数被分配具有不同安全性目标的两个不同SSA网络,那么所述函数可以由两个查找表(列2)来代替,编码/解码函数可以被应用(列3),其强度取决于目标安全性目标。在最终列中,表格能够被进一步组合,从而混淆所实施的函数。每个后续步骤能够增加安全性,但是性能也被影响。因此,所述算法将那些步骤尽可能仔细地应用于保护,同时满足性能要求。

在实施例中,所述编译器设备可以接收以下输入中的一个或多个:

(i)要被保护的程序(例如,c程序或中间程序表示,诸如数据流图)

(ii)针对受保护的程序的一个或多个性能目的;

(iii)程序的不同部分中的目标安全性水平;

(iv)具有可用类型的编码和具有安全性/性能性质的保护的列表

所述编译器设备可以被配置为根据性能要求(操作的数量、操作的类型)对程序部分进行分类,并且根据总程序中的个体性能和总体资源要求针对不同的程序部分输出性能等级。这能够通过对使用特定操作数的每种类型的操作进行计数并且计算当那些操作被已知编码操作的成本的编码的操作代替时的预期成本来进行。所述总体性能能够通过在目标设备上执行输入程序来获得。在使其安全之后的性能能够通过估计保护程序的特定部分的额外成本来获得。性能惩罚可以被计算为:(PerformancePlain+EstimatedPerformancePartsProgramProtected)/PerformancePlain

所述编译器设备可以被配置为根据例如借助于注释和正在被执行的数据/操作的类型而指定的安全性要求对网络进行分类。所述输出可以是将不同程序部分中的所需的安全性分等级的安全性列表。这种优先化能够通过分析网络中所使用的操作的类型、其能够被保护得有多好以及网络对于其他来说有多相关来完成。

能够在程序构造(诸如变量、函数、宏指令等)之前包括注释作为杂注。注释选项包括:

·类型:保密性、完整性、可用性

·攻击:白盒、侧信道时间、侧信道功率

·努力:高、中等、最努力。

类型意味着被启用的保护的类型。保密性意指对被注释有杂注的程序部分进行加密。完整性意味着包括确保程序不能够被修改的完整性检查。可用性意味着确保代码被执行的添加能力。例如,通过复制函数来确保函数被运行至少一次。例如,后者可以被用于在执行程序的其余部分之前核实用户被授权。

在攻击的情况下,我们意指被执行的攻击的类型,并且确定应当被应用的保护的类型。在白盒的情况下,我们意指攻击者具有对整个代码的访问权,并且能够观察/修改每件事物。因此,所得到的实施方案应当输出被编码或加密的受保护的程序。在侧信道时间的情况下,我们意指攻击者能够观察程序的执行时间并且从其导出信息。因此,受保护的程序应当为使得要么执行时间是恒定的(使得攻击者不获悉任何事情)要么添加为执行依赖的足够大的随机延迟使得攻击者不能够导出实际的执行时间。在侧信道功率的情况下,我们意指攻击者能够观察功率轨迹。因此,程序应当为使得具有不同功率要求的指令被恒定功率消耗的虚拟化指令(例如,表格查找)代替。

在努力的情况下,我们意指所得到的保护应当有多好。A)高:其应当提供最佳的可用安全性。B)中,其应当提供尽可能好的安全性。没有安全性不是选项。C)最佳的努力,其应当提供尽可能好的安全性,但是如通过其由于性能原因而不是可行的,那么明文实施方案是可接受的。

注释是很有效的,但是程序员可能忘记对其进行添加。所述编译器能够进一步分析例如程序部分是否包含计算部分,其中,输入数据与特定常数混合。这样的程序部分是借助于加密进行保护的理想候选。所述编译器系统也能够分析给定程序部分是否执行取决于输入变量的操作,从而导致在输入的情况下的时间依赖性。这样的程序部分对于预防侧信道时序攻击将是理想的。如果这样的部分不受保护,则所述编译器系统能够触发警报,从而警告程序员。备选地,所述编译器能够利用编译标志(例如,–p1、-p2、-p3)来增强,使得其能够自动地应用增加水平的保护。

一旦分析程序输入被完成,所述编译器设备就可以确定依据优化和目标保护水平而使用的编码和保护。

如果针对安全性的优化:

·将最佳类型的编码/保护分配给每个程序部分并且估计性能(存储器/CPU),

·当(比性能目标更坏的性能){将更简单的编码/保护应用于具有更低安全性需求的程序部分}时,

·如果所得到的保护低于所需的,那么所述编译器系统应当触发警报以从所述情况警告程序员。

如果针对性能的优化:

·将大多数执行类型的编码或保护分配给每个程序部分并且估计性能(存储器/CPU),

·当(比性能目标更好的性能){将更安全的编码应用于具有更高安全性需求的程序部分}时,

·如果所得到的保护低于所需的,那么所述编译器系统应当触发警报以从所述情况警告程序员。

在实施例中,所述编译器设备可以获得程序的中间表示,其中——取决于所使用的注释:

·对于保密性,每个变量被分配两个标签,第一个标签定义要被使用的编码的类型,而第二个标签定义编码域。

·对于完整性,程序部分是确定完整性检查的增强的块。

·对于可用性,要求高可用性的程序部分将被复制n次。每个副本将被放置在程序的不同位置中以使禁用其的攻击者的任务变得困难。

·对于白盒攻击,变量应当被表示为要被编码的,使得攻击者不能理解所述变量。

·对于侧信道时序攻击,程序部分和变量倾向于其应当被标记为在恒定时间内被执行或者大的执行依赖的时序噪声被添加。恒定时间意指操作和存储器访问应当是恒定时间的。对于执行依赖的时序噪声,程序部分将利用依据随机数据而引入大的时间可变性的块来增强。

·对于侧信道功率攻击,具有不同功率要求的指令可以被具有恒定功率消耗的虚拟化操作来代替。

最后,编码和保护可以被对应地分配。例如:

如果编码:

·如果编译是针对单个设备,那么确定数据可以通过设备来进行编码。

·如果编译是针对多个设备,那么确定相继设备的输入/输出数据接口应当使用相同的编码。任选地,通过包括生成数据的设备中的对称加密算法(例如,AES)和消耗数据的设备中的对应的编码的对称解密算法(例如,AES)的编码的实施方案来扩展所述代码。

如果(F)HE:

·如果编译是针对单个设备,那么确定输入数据应当被加密,并且通过设备的操作应当在加密域中被执行。当噪声增加太多时,那么涉及与存储被用于对数据进行解密的私钥的安全元件的通信,并且可能利用被分配给另一网络的公钥再次对其进一步加密。

·如果编译是针对不同的设备,那么数据应当被加密,操作应当在加密域中被执行。解密仅发生在接收设备中。

如果需要可用性保护:

·如果编译是针对多核CPU,则将每个复制的程序部分的执行分配给不同的核。

·如果编译是针对多设备系统,将每个复制的程序部分的执行分配给不同的设备。

如果侧信道功率保护,则分析执行程序的处理器上的不同指令的功率消耗,并且将那些指令转换成恒定功率消耗的查找表。

如果具有恒定时间的侧信道时间保护分析针对执行程序并且存储器访问的处理器上的不同指令的时间要求,并且将那些指令转换成恒定时间访问的查找表。

为了执行所述编译,例如在部分140或150中的编译器设备可以被配置为创建编码/解码和保护,并且根据所获得的标签将其应用于每个程序部分。

图1c示意性示出了编译设备101的实施例的范例。编译设备101类似于编译设备100,除了其被配置为在应用保护性变换之前对操作进行组合;例如,编译设备101包括例如优化器部分140中的组合部分145,组合部分145被配置到优化器部分140。

如同编译设备100,其可以被配置为检测能够被保护的变量,但是组合设备145被配置为选择作用于所检测到的变量并且对其进行组合的操作。组合的操作能够如上文那样被保护。例如,组合的操作能够例如被编码在查找表中或者被编码为多项式。

编译设备101还使用根据输入性能目的(诸如CPU惩罚和存储器惩罚)来优化用于保护的参数的方法。

在实施例中,要被保护的每个操作被分配到其自己的编码域。所有选定函数被变换成表格查找,并且在其之间,双射被引入以从一个编码转变为下一编码。在实施例中,至少两个操作是使用相同的编码来保护的,使得不需要其之间的双射来从一个编码转变为下一编码。减少编码的数量增加了操作能够被再次使用的可能性,并且因此减少了所需的查找表等的数量。

在实施例中,编译设备100被配置有三个阶段:

1.检测能够被保护的变量

2.对语句进行组合

3.应用n个编码并且将语句变换成查找表

基于3个阶段,所述编译器系统能够应用当作输入性能目的(例如,CPU惩罚和存储器惩罚)的优化算法,以优化用于以上过程的参数。

例如,在阶段1中,能够被保护的变量能够被检测如下:如果满足这些要求,变量v能够被保护:

1.v在能够被转换成查找表的语句中使用

2.v能够在不揭露编码的情况下被编码

如果其在能够被转换成合理尺寸的查找表的分配中使用,则变量v能够被保护。为了测量这样的查找表的尺寸,使用v的程序的中间表示被当作输入。该中间表示可以具有SSA性质。

考虑以下片段:

(1)input1=phi(a,b);

(2)input2=c;

(3)output=g(input1,input2);

在分配语句(诸如(3))中,以位s为单位的总输入尺寸能够以这种方式被定义:

注意,函数range返回被输入需要以适当地表示的位的数量。该函数也能够被仅仅返回输入的类型的另一函数代替。以分配语句的位为单位的输入尺寸指示实施分配的左手侧的查找表可以具有的条目e的数量。我们使e=2s。换言之,e给出了实施分配语句的左手侧的查找表的尺寸的指示。对于具有s的大值的语句,所得到的查找表的尺寸可能使程序太大以至于不能被实际地实施和执行。例如,性能目标可以设置关于能够被用于查找表的存储器的量的极限。因此,要求1将约束强加于s的最大允许值并且因此强加于对受保护的程序的总体尺寸有影响的所生成的查找表的尺寸。

如果用于保护变量v的编码能够合并在查找表中,则变量v能够被保护。为了确定是否是这种情况,使用和生成v的语句必须被分析。作为范例,对以下函数的保护(其中,语句是以SSA的方式)能够被考虑:

function f(b,c){

(1)a=g(b,c);

(2)x=h(c);

(3)d=y(a);

(4)e=x;

(5)z=i(d,e);

(6)returnz;

}

假定来自以上要求的被允许的最大总体输入尺寸s为16[位]。假定变量c具有尺寸18[位],并且所有其他变量具有范围8[位]。在此,b、c和z不能够被保护,因为其是函数的自变量和返回。函数的签名或api必须被保持明文的,因为其是与非受保护的代码的接口。变量a、x和e也不能够被保护,因为a和x是不能够被转换成查找表(其可以安全地集成编码)的语句的左手侧。然而,变量d能够被保护,因为:

·其是能够在查找表中被转换(其能够安全地集成编码)的语句(3)的左手侧。

·其在能够在查找表中被转换(其能够安全地集成解码)的语句(5)的右手侧中使用。

编译设备101(例如,组合部分145)被配置为对操作进行组合。例如,在阶段2中,在能够被保护的变量被识别之后,语句可以被组合。例如,组合部分145可以被配置为功能地确定后续语句,例如,其中一个语句的输出变量是下一语句的输入的语句。后续语句可以被组合在单个语句中。

当所得到的语句的最大变量尺寸小于在先前章节中定义的最大尺寸,所得到的语句的左手侧变量也能够被保护。

例如,假定以下程序和16[位]的最大变量尺寸:

(1)a=b+c//b并且c具有4位的范围,并且a具有5位的范围

(2)f=d*a//d并且e具有4位的范围,并且f具有8位的范围

(3)h=a-f//a具有5位的范围,f具有8位的范围,并且h具有13位的范围

然后,行1、行2和行3中的三个语句能够首先被组合成单个语句:h=(b+c)-(d*(b+c))=(1-d)*(b+c)

注意,将编码应用于所得到的语句的输入和/或输出变量并且将所得到的语句变换成编码的查找表显著增加了防备逆向工程并且防备白盒攻击的保护。这种情况成立,因为逆向工程实施由多个基本操作构成的函数的编码的查找表所需的努力大于逆向工程仅实施简单算术函数的编码的查找表所需的努力。

还应注意,在上文的范例中,所得到的总输入变量尺寸为4+4+4=12[位],并且因此,语句能够被变换成单个编码的查找表。编码的精确引入是第三阶段的部分,例如,在已经在下一阶段中引入编码之后。刚刚描述的用于组合语句的方案在速度方面是有利的。

在阶段3中,编码和变换语句可以被应用,并且查找表可以被形成。此时,以下输入是可用的:(1)能够被保护的该组变量以及(2)一组性能/安全性约束。例如,(2)能够是能够被应用于程序(或程序的一部分)中的编码的最大数量。(2)也能够是程序所需的存储器的量,使得能够从其导出能够被应用的编码的最大数量。

该范例的可能实施方案是:

n=0:任何数量的编码能够被使用。通常,不同的编码被用于保护每个变量。

n=1:相同的编码(每个变量尺寸)在整个程序中使用。

n=2:两个不同的(每个变量尺寸)能够在整个程序中使用。

n=…:…。

注意,编码的数量是每个变量尺寸,因为尺寸需要匹配变量尺寸。考虑到输入,那么所述编译器系统将编码分配给能够被保护的每个变量。如果n=0,那么每个变量将使用不同的编码。对于其他n个选项,那么所述编译器系统能够使用不同的备选方案。最简单的一个在于将编码i应用于可变变量j(mod n)。例如:

Var1 Var2 Varn Varn+1 Varn+2 Var2n
Enc1 Enc2 Encn Enc1 Enc2 Enc2n

另一选项是以随机化的方式分配编码,例如,Var j←Enc_i,其中,i←random(n)。

还应注意,如果变量具有不同的范围(或类型),那么即使操作(例如,+、-、XOR、…)是相同的,不同的编码也可以被应用。还应注意,使用大量的编码导致尺寸的显著增加,因为在这种情况下,如果相同的函数存在于多个语句的左手侧处,具有不同编码的不同查找表将被创建。

考虑到存储器惩罚,所述编译器系统能够:

1.获得针对曾经被编译在当前机器中的明文程序的存储器性能。

2.基于输入惩罚,所述编译器系统能够根据输入参数获得受保护的程序中允许的存储器的绝对增加。

3.基于存储器的绝对增加,所述编译器系统然后能够计算所需的编码以在存储器约束内配合在程序中。

例如,如果最大存储器增加为10KB,那么对取决于2字节长的输入变量的函数进行编码不是可行的,因为其将需要存储器的2^16/1024=64KB。然而,对取决于8位变量的函数进行编码是可行的,因为其需要存储器的2^8/1024=256B。

还应注意,基于CPU和存储器的绝对增加,如果所有变量都使用不同的编码,所述编译器系统那么能够计算能够被编码的变量的最大尺寸。确定变量的过程是扫描从小到大对变量和函数进行分等级的程序(以其中间表示的方式)。一旦变量被分等级,那么编译器系统就开始计算在决定对x变量进行编码(从小变量开始)之后剩下的存储器的量。当没有存储器预算可用时,该过程结束。

针对CPU性能的优化过程是类似的。然而,在这种情况下,目的是最小化表格查找的数量,并且因此,目的将是开始应用所有编码以能够尽可能多地合并。当CPU性能好于所需的时,那么编译器系统将检查所消耗的存储器。如果存储器太高,那么编译器系统将逐渐分解以那些最大输入开始的编码的表格直到满足存储器要求。

当作输入性能目的(诸如CPU惩罚和存储器惩罚),能够优化针对以上过程的参数。例如,编译设备101能够应用优化算法。对于这种优化过程,存在不同的可能性。例如,编译设备101被配置用于:

首先,确定能够被引入的各种尺寸的编码的最大数量。这能够通过扫描程序(例如,以其中间表示的方式)并且例如基于尺寸对组中的copy-phi网络进行分类并且对其进行计数来完成。copy-phi网络是仅由copy或phi语句构成的程序图表示的子网络。这意味着copy-phi网络中的所有变量都具有相同的范围,并且在copy-phi网络中,不对数据执行操纵。

例如,对于存在于程序中的每一个变量范围(例如,8位、16位、32位),每组包含多个copy-phi网络。这返回将程序中的可保护变量的每一个范围映射到针对该范围的多个copy-phi网络的列表。例如,下文的列表L意味着存在范围为8位的45个copy-phi网络、范围为12位的23个copy-phi网络以及范围为16位的76个copy-phi网络:L=[[8,45],[12,23],[16,76]]

在copy-phi网络的边界处的所有数据操纵块中必须使用相同的编码。具体地,我们能够看到相同的编码必须被应用于copy-phi网络的每一个源节点,而编码逆向必须被应用于copy-phi网络的每一个目标节点。这在图2b的范例数据流图中进行了图示。在图2b中,241和242是copy-phi网络;243是数据操纵块,例如,运算符;244是编码;245是copy-phi网络中的元素;字母g和f指代编码。在图2b的右手侧处,编码已经被应用在数据流图中。

接下来,程序必须找到针对可用存储器最大化程序强度的编码的数量。注意,可应用的编码的最大数量总是等于程序中所包含的copy-phi网络的数量,因为来自经历copy-phi网络的数据操纵块的输出需要在消耗该数据的数据操纵块中被逆向。该优化步骤能够以若干种方式来完成。第一种方式在于首先针对最小范围的copy-phi网络的所有数据操纵块引入新的编码,并且仅当其都已经被引入时,移动到下一范围,直到存储器的最大量被配置(allocated)。例如,在上文的范例中,首先创建针对8位的copy-phi网络中的变量的编码,并且然后移动到针对类型12位的编码的创建,等等。第二种方法在于以最大尺寸的范围(在上文的范例中,尺寸为16位)开始,并且针对最大尺寸范围保持对其进行创建,直到所有所需的编码都已经被计算,并且然后移动到下一类型的更小尺寸(在这种情况下,为12位)。第三种方法在于以相继的方式添加针对每个可用数据范围的编码。在上文的范例中,以针对尺寸8位的编码开始,并且然后添加针对尺寸12位的编码的另一个,然后添加针对尺寸16位的编码的另一个,并且然后再次从尺寸8位开始…。当所有可用存储器都已经被配置时,该过程结束。

例如,数据流图中的操作节点可以具有相关联的编码存储器要求。例如,运算符可以被实施为有限域内的多项式的形式或查找表的形式的编码的运算符。相关联的编码存储器要求可以是(一个或多个)输出的总位尺寸乘以运算符的输出中的位数的幂。一些运算符不能够基于这种尺寸进行编码,例如,其大于阈值。基于可用于编码的存储器尺寸,编译设备能够决定哪些和/或多少编码要应用。例如,编译设备可以从最小相关尺寸开始分配不同的编码,直至用于编码的可用存储器被耗尽。

例如,所述编译设备可以首先将单个编码应用于每个变量尺寸。如果存储器仍然可用于编码,那么存储器可以从最小到最大被配置。

例如,所述编译设备可以首先将不同的编码应用于被例如分析部分130等的用户识别为高安全性的每个变量尺寸。接下来,到每个变量尺寸的单个编码。如果存储器仍然可用于编码,那么存储器可以从最小到最大被配置。

这些方法具有以下优点:在保证基本水平的编码被实现之后,不同的编码被集中于更小变量中。由于更小变量需要比更大变量少得多的用于编码的存储器,因此这些增加了所使用的不同编码的数量。这种策略例如对于混淆目的是有用的,因为攻击者将需要应付许多不同的编码而非几个。

编码可以基于可能具有盐或状态值的双射。备选编码也能够例如基于余数系统(RNS)来使用,其中,属于特定类型的变量首先被编码在由m个元素(对于m个不同的素数)组成的RNS中,并且然后双射被应用于每个元素。

所述编码也能够基于完全同态加密,使得不同的公钥和不同的评估钥被用于评估不同类型的变量。

在编译设备100或101的各种实施例中,可以根据各种备选方案来选择通信接口或输入接口。例如,所述接口可以是局域网或广域网(例如,因特网)的网络接口、内部或外部数据存储装置的存储接口、键盘、应用接口(API)等。

所述编译设备可以具有用户接口,所述用户接口可以包括众所周知的元件,诸如一个或多个按钮、键盘、显示器、触摸屏等。所述用户接口可以被布置用于容纳用于执行编译动作的用户交互等。

存储装置120可以被实施为电子存储器(比如说闪存)或磁性存储器(比如说硬盘等)。存储装置120可以包括多个分立存储器,其一起组成存储装置120。存储装置120还可以是临时存储器(比如RAM)。在临时存储装置120的情况下,存储装置120包含在使用之前获得数据的一些器件,比如说通过在任选的网络连接上获得数据。

通常,编译设备100和101包括微处理器,其执行被存储在编译设备100和101处的适当的软件;例如,该软件可能已经被下载和/或被存储在对应存储器中,所述存储器例如是诸如RAM的易失性存储器或诸如闪存的非易失性存储器(未分离地示出)。备选地,设备100和101可以全部或部分地以可编程逻辑来实施,例如,作为现场可编程门阵列(FPGA)。设备100和101可以全部或部分地被实施为所谓的专用集成电路(ASIC),例如,针对其特定使用而定制的集成电路(IC)。例如,电路例如可以使用硬件描述语言(诸如Verilog、VHDL等)被实施在CMOS中。

在实施例中,编译设备可以包括输入接口电路、存储电路、解析部分电路、数据流解析器电路、编码分析器电路、优化器部分电路、性能分析器电路、安全性分析器电路、编译单元电路。设备100可以包括额外的电路,例如组合部分电路。电路实施在本文中所描述的对应单元。电路可以是处理器电路和存储装置电路,所述处理器电路运行电子地表示在存储电路中的指令。

处理器电路可以以分布式方式来实施,例如,作为多个子处理器电路。存储装置可以被分布在多个分布式子存储装置上。存储器的部分或全部可以是电子存储器、磁性存储器等。例如,所述存储装置可以具有易失性部分和非易失性部分。存储装置的部分可以是只读的。

图6示意性示出了编译方法600的实施例的范例。编译方法600被配置用于选择保护性变换以改善计算机程序的安全性。编译方法600包括:

接收610计算机程序表示,

从所述计算机程序表示获得620数据流图200,

反复地:

将保护性变换分配630给所述数据流图的部分,所述保护性变换选自可用保护性变换的列表,

针对所述数据流图200和分配的保护性变换确定640性能水平和安全性水平,

如果所述性能水平和所述安全性水平满足安全性和/或性能目标,那么终止对保护性变换的所述分配。例如,方法600可以包括朝向分配630或朝向获得660的条件分支650。

至少从满足所述安全性和/或所述性能目标的所述数据流图和所分配的保护性变换获得660所述计算机程序表示的编译。

执行方法的许多不同的方式是可能的,如对于本领域技术人员而言将是明显的。例如,步骤的次序能够变化或者一些步骤可以并行地执行。此外,在各步骤之间,可以***其他方法步骤。***步骤可以表示诸如在本文中所描述的方法的细化,或者可以与所述方法无关。此外,给定步骤可能在下一步骤开始之前尚未完全完成。

根据本发明的方法可以使用软件来执行,其包括用于使处理器系统执行方法600的指令。软件可以仅包括由所述系统的特定子实体采取的那些步骤。所述软件可以被存储在适合的存储介质中,诸如硬盘、软盘、存储器、光盘等。所述软件可以沿着有线或无线地或使用数据网络(例如,因特网)作为信号来发送。可以使所述软件可用于下载和/或对于服务器上的远程存储装置可获得。根据本发明的方法可以使用被布置为将可编程逻辑(例如,现场可编程门阵列(FPGA))配置为执行所述方法的位流来执行。

将意识到,本发明还扩展到计算机程序,特别是适于将本发明付诸实践的载体上或载体中的计算机程序。所述程序可以以源代码、目标代码、代码中间源和目标代码的形式,诸如部分编译形式,或以适合于用在根据本发明的方法的实施方案中的任何其他形式。与计算机程序产品有关的实施例包括对应于所阐述的方法中的至少一种方法的处理步骤中的每个处理步骤的计算机可执行指令。这些指令可以细分成子程序和/或被存储在可以静态或动态地链接的一个或多个文件中。与计算机程序产品有关的另一实施例包括对应于所阐述的系统和/或产品中的至少一个中的器件的每个器件的计算机可执行指令。

图7a示出了具有包括计算机程序1020的可写部分1010的计算机可读介质1000,计算机程序1020包括用于使处理器系统执行根据实施例的编译方法的指令。计算机程序1020可以作为物理标记或借助于对计算机可读介质1000的磁化被嵌入在计算机可读介质1000上。然而,任何其他适合的实施例也是能设想到的。此外,将意识到,尽管计算机可读介质1000在此被示为光盘,但是计算机可读介质1000可以是任何适合的计算机可读介质,诸如硬盘、固态存储器、闪存等,并且可以是非可记录或可记录的。计算机程序1020包括用于使处理器系统执行所述编译方法的指令。

图7b示出了编译设备的根据实施例的处理器系统1140的示意性表示。所述处理器系统包括一个或多个集成电路1110。在图7b中示意性示出了一个或多个集成电路1110的架构。电路1110包括处理单元1120,例如CPU,其用于运行计算机程序部件以执行根据实施例的方法和/或实施其模块或单元。电路1110包括用于存储编程代码、数据等的存储器1122。存储器1122的部分可以是只读的。电路1110可以包括通信元件1126,例如,天线、连接器或这两者等。电路1110可以包括用于执行方法中定义的处理的部分或全部处理的专用集成电路1124。处理器1120、存储器1122、专用IC1124和通信元件1126可以经由相互连接1130(比如说总线)连接到彼此。处理器系统1110可以被布置用于分别地使用天线和/或连接器的接触式和/或无接触式通信。

例如,在实施例中,处理器系统1140(例如,编译设备)可以包括处理器电路和存储器电路,所述处理器被布置为运行被存储在存储器电路中的软件。例如,所述处理器电路可以是InterCorei7处理器、ARMCortex-R8等。在实施例中,所述处理器电路可以是ARMCortexM0。所述存储器电路可以是ROM电路或非易失性存储器,例如闪存。所述存储器单元可以是易失性存储器,例如SRAM存储器。在后者情况下,所述设备可以包括非易失性软件接口,例如硬盘驱动器、网络接口等,其被布置用于提供软件。

应当注意,上述实施例图示而非限制本发明,并且本领域技术人员能够设计许多备选实施例。

在权利要求中,置于括号中的任何附图标记不应被解释为限制权利要求。动词“包括”及其词性变化的使用不排除存在不同于权利要求中所述的其他元件或步骤。在元件之前的冠词“一”或“一个”不排除存在多个这样的元件。本发明可以借助于包括若干个不同元件的硬件来实施,并且可以借助于适当编程的计算机来实施。在列举了若干器件的设备权利要求中,这些器件中的若干可以具体实现为一个相同的硬件。尽管在相互不同的从属权利要求中记载了特定措施,但是这并不表示不能有利地使用这些措施的组合。

在权利要求中,括号中的附图标记指代例证实施例的附图或实施例的公式中的附图标记,因此增加了权利要求的可理解性。这些附图标记不应当被解释为限制权利要求。

32页详细技术资料下载
上一篇:一种医用注射器针头装配设备
下一篇:用于标签保护的存储器系统的随机标签设定指令

网友询问留言

已有0条留言

还没有人留言评论。精彩留言会获得点赞!

精彩留言,会给你点赞!