程序执行的隐藏的制作方法

文档序号:11455392阅读:272来源:国知局
程序执行的隐藏的制造方法与工艺

本发明涉及隐藏程序执行的细节。更特别地,本发明涉及隐藏条件运算。更特别地,本发明涉及在包含条件计算的程序中隐藏程序流和数据流。



背景技术:

可以利用表驱动方法实现加密值的计算,不使用暴露它们的功能的运算符。程序代码、即其运算可以通过使用查找表来隐藏。将这些表应用于加密数据给出了加密结果、隐藏的运算的结果。然而,辨识像比较(<,=,...)那样的运算符是相当容易的,因为那些指令被限于数字,典型地导致控制流的改变,并且它们的结果是加密的布尔类型的。如果此加密的布尔型保卫条件运算,例如在if-then或if-then-else构造的情况下,攻击者可以从控制流辨识运算的各方面。进一步地,攻击者可以创建对被比较的加密值的排序。最后,这可以导致破解加密。

在软件程序中,执行比较通常是必要的。例如,为了检查是否已经被达到某阈值或者是否某输入等于预定值。在混淆程序中,这样的比较可以帮助攻击者破解编码。

us7,809,135b2公开了与增加具有密码功能的软件所使用的密钥的密码安全性有关的方法和系统。这是通过增加软件的数学复杂度来进行的。首先确定软件所使用的组件和函数,并且使用这些组件、函数和它们之间交换的数据,使得软件对分析的抵抗性更强。在增加分析抵抗力中使用的方法被分组为3种一般类型:调节组件之间交换的信息,将某些组件用不同但相关的组件代替,以及调节组件之间的数据流。



技术实现要素:

将会有利的是,在程序的执行期间,具有改进的方法和系统以防止信息从程序中泄漏。

为了解决这个问题,在第一方面,提供一种用于隐藏程序的变量集合v={v1,v2,...,vn}的变化的系统。该系统包括:

值表示构件,用于借助于表达ri表示变量v1,v2,...,vn中的变量vi的值wi,其中wi是集合w的元素,其中并且ri是表达的集合的元素,其中σi是状态变量,该状态变量为集合σ的元素并且向wi的表达ri提供冗余,并且是从w×σ到预定集合的一一密码映射;以及

动作表示构件,用于通过在v'上的动作和在v\v'上的动作表示v的子集v'的值上的动作,其中

v'上的动作根据变量vj的变化值w'j改变变量集合v'中的每一个变量vj的表达rj,使得,其中是从w×σ到预定集合的一一密码映射,并且

其中在v\v'上的动作根据σk的变化值σ'k改变v\v'中每一个变量vk的表达rk,使得

使用此系统,对攻击者而言,难以发现程序中哪一个变量实际变化,因为通过改变状态变量σ,未改变的变量的表达也被变更。

例如,所述动作包括if语句,其定义了在条件成立的情况下在变量集合v1上的动作,以及在条件不成立的情况下在变量集合v2上的动作,其中变量集合vv1v2的并集,从而,并且动作表示构件被配置成根据条件是否成立使用变量集合v1或变量集合v2作为变量集合v'。这有助于避免泄漏关于条件代码段或条件代码段的哪一个分支被选择的信息。如上所述,当表示通过在v'上的动作和在v\v'上的动作表示在子集v'上的动作时,动作表示构件可以使用所选集合v'

变量集合v1和变量集合v2可以具有被所述两个动作影响的变量的交集v3,从而,其中该动作在条件成立的情况下根据函数f并且在条件不成立的情况下根据函数g改变集合v3的每一个变量vm,其中动作表示构件被配置成确定集合v3的每一个变量vm的表达,使得基于根据输入所述条件是否成立,而有:

,或

其中hm是从w×σ到w的映射。

使用此特征,攻击者难以发现是fm实际应用到变量wm还是gm应用到变量wm

动作表示构件可以被配置成使用将关于条件的输入和表达的元组映射到对应的表达的至少一个查找表促成与关于条件的输入和表达对应的表达的查找。该输入可以例如包括(可选地加密的)布尔变量。可替换地,该输入可以包括定义条件的述语中出现的变量。此述语和实际动作可以隐藏在所述至少一个查找表中。

在一个特定示例中,,并且动作表示构件(103)被配置成识别确定条件b的一个或多个输入变量,并且其中动作表示构件(103)包括:交换单元(305),用于基于集合v中的变量vi的至少一个表达r(其中r=ri)和所述一个或多个输入变量执行隐藏的交换运算,使得对于和q

其中是从w×σ到预定集合的一一密码映射,其中不同于,其中是一个表达;和/或交换单元(306),用于基于表达和所述一个或多个变量执行隐藏的交换运算,使得对于和q,

其中是从w×σ到预定集合的一一密码映射,其中不同于,并且是更新的表达

当计算表达时,这些交换运算可以被分别用作预处理和/或后处理步骤,使得实际函数f和/或g的隐藏实现方式可以被简化。如果只有一个交换单元被使用,则在动作之前和之后wσ的作用可以互换。这可以通过在系统的剩余物中考虑这一点来处理,例如通过假设编码已经变化的合适程序代码来处理。

动作表示构件可以进一步包括函数评估单元,其用于计算函数以基于表达获得表达,使得对于和q,

其中f是在w上定义的映射并且g是在w上定义的映射。

这样,取决于之前执行的交换运算,函数fg可以应用到表达wσ方位(aspect),使得fg的隐藏实现方式可以相同,不管条件是否成立。可以在其后执行的交换运算取决于条件而将wσ方位交换回来,以便撤销第一次交换运算所执行的交换运算。

在一个特定示例中,。这意味着,这两个交换运算使用相同的密码编码。因而,对于两个交换运算,相同的代码和/或表可以重用。

在一个示例中,对于wσ的所有值和中的至少一个m。这可以提供简化的且/或更对称的实现方式。

在一个示例中,在上的动作被配置成改变变量集合中的每一个变量vj的表达rj,使得,并且

其中在上的动作被配置成改变中每一个变量vk的表达rk,使得

其中对于fi是在w上定义的函数,并且对于中的每一个变量vkhk是将w×σ的元素映射到w的函数。

这是对表达做出了什么改变的示例。

权利要求2或3的系统进一步包括嵌套条件表示构件,用于将涉及第一多个嵌套条件的嵌套条件运算表示成涉及第二多个条件的非嵌套条件运算的功能等价序列。

该系统可以进一步包括用于将涉及第一多个嵌套条件的嵌套条件运算转换成涉及第二多个条件的非嵌套条件运算的功能等价序列的转换单元。这有助于改进信息泄漏的防止,因为每一个非嵌套条件运算例如借助于第一和第二生成单元生成的代码被评估,使得条件运算中出现的所有表达式被评估并且可以影响表达。较少的分支被跳过。

例如,转换单元可以被配置成:将嵌套条件运算的相应条件分支的相应表达式组合成辅助表达式的措辞,其中相应表达式与要被分配给特定变量的可替换的值相关联;重复将相应条件分支的相应表达式组合成辅助表达式的措辞的步骤,使得多个辅助表达式被生成,其中所述措辞以不同方式组合;生成评估辅助表达式的代码并存储它们的结果;并且取决于组合的条件生成组合辅助表达式的结果的代码,其中组合的条件是多个条件的组合,使得与关于该条件无关的分支对应的措辞取消。这样的系统可以用来通过将嵌套的if语句扁平化成未被嵌套的if语句的序列来隐藏嵌套的if语句。通过将不同条件分支中出现的表达式组合成辅助表达式并且随后以这样的方式组合辅助表达式以使得关于条件不相关的表达式取消,许多所述表达式在程序中被评估并且可以影响加密结果,从而使得难以分析哪些表达式实际影响对应于加密结果的解密值

动作表示构件可以被配置成识别非嵌套条件运算的序列的至少一个条件运算和第二多个条件中的对应条件,并且其中动作表示构件被配置成使用所识别的条件运算作为所述动作并且使用所识别的对应条件作为if语句的条件。这样的组合提供了对在条件代码块中发生的情况的特别好的隐藏。进一步地,识别单元可以被配置成识别非嵌套条件运算的序列的每一个条件运算以及第二多个条件中的每一个对应条件,其中第一生成单元和第二生成单元被配置成处理每一个所识别的条件运算和对应条件。

在另一个方面,提供一种用于隐藏程序的变量集合的变化的方法,该方法包括:

借助于表达ri表示变量v1,v2,...,vn中的变量vi的值wi,其中w是集合w的元素,其中并且ri是表达的集合的元素,其中σi是状态变量,该状态变量为集合σ的元素并且向wi的表达ri提供冗余,并且是从w×σ到预定集合的一一密码映射;以及

借助于在v'上的动作和在v\v'上的动作表示v的子集v'的值上的动作,以获得更新的表达,对于,其中是从w×σ到预定集合的一一密码映射,并且其中

v'上的动作被配置成根据变量vj的变化值w'j改变变量的集合v'中的每一个变量vj的表达rj,并且

v\v'上的动作被配置成根据σk的变化值σ'k改变v\v'中每一个变量vk的表达rk

根据另一个方面,提供一种用于隐藏条件运算的系统,该系统包括:

表示单元,用于借助于表达r表示值w,其中w是集合w的元素,其中,并且r是表达的集合的元素,其中σ是状态变量,该状态变量为集合σ的元素并且向w的表达r提供冗余,并且是从w×σ到预定集合的一一密码映射;以及

导出单元,用于基于关于条件的输入从表达r导出值的表达,其中是集合w的元素,其中是表达的集合的元素,其中,其中是状态变量,该状态变量为集合σ的元素并且向的表达提供冗余,并且是从w×σ到预定集合的一一密码映射,其中基于根据输入所述条件是否成立,f(w)相关联或者相关联,其中是在w上定义的非平凡映射,并且h是从w×σ到w的映射。

表示单元提供了表达r,其为值w的冗余表达。即,w的任何单个值具有许多不同的表达r,因为r可以是的任何元素。这意味着,r的变化不一定意味着w的变化,因为对于w的相同值,r可以恰好被改变为的不同元素。这样的表达允许条件运算被隐藏,例如如果条件b成立,将w更新为。即,如果条件确实成立,表达r被更新以变成表达,其为f(w)的表达,即集合的成员。另一方面,如果条件不成立,表达r仍被更新,但被更新为相同值w的不同表达,即集合的(不同)成员。由于在后一种情况下,函数f用来选择集合的特定成员,所以基于f的相同函数影响被执行和应用到表达r的运算,不管条件是否成立。由函数f提供的任何熵效应因此以表达传播,不管条件是否成立。即,即使当攻击者将改变值r和条件b并看到其对结果的任何影响时,仍然难以提取关于程序及其变量的信息。进一步地,对恶意观察者而言,也难以发现函数f是否已被应用到值w

确定单元可以被配置成确定表达,使得基于根据输入所述条件是否成立,f(w)相关联且相关联,或者g(w)相关联且相关联,其中g是在w上定义的(非平凡)映射。这是特别有用的,以创建例如具有else部分的if语句:ifbthenw=f(w)elsew=g(w)的隐藏实现方式。两个函数fg影响最终结果,尽管这些函数中只有一个影响w部分,或者从中选择表达的集合。另一个函数仅仅影响的哪一个元素被选择。因此函数fg中(如通过条件确定的)只有一个确定表达的底层解密值

导出单元可以被配置成使用将输入和表达r的元组映射到对应的表达的至少一个查找表来查找与关于条件的输入和表达r对应的表达。借助于查找表的实现方式允许防止泄漏在从输入变量和函数f计算条件中涉及的任何信息。而且,取决于条件的任何if语句或跳跃指令可以被避免。

例如,。导出单元可以被配置成识别确定条件b的一个或多个变量,并且导出单元可以包括:交换单元,其用于基于表达r和所述一个或多个变量执行隐藏的交换运算的,使得对于和q

其中是从w×σ到预定集合的一一密码映射,其中不同于,其中是一个表达;和/或基于表达和所述一个或多个变量执行隐藏的交换运算,使得对于和q,

其中是从w×σ到预定集合的一一密码映射,其中不同于

当计算表达时,这些交换运算可以被分别用作预处理和/或后处理步骤,使得实际函数f和/或g的隐藏实现方式可以被简化。

导出单元可以进一步包括函数评估单元,其用于计算基于表达获得表达的函数,使得对于和q,

其中g是在w上定义的映射。

这样,取决于之前执行的交换运算,函数fg可以应用到表达wσ方位,使得fg的隐藏实现方式可以相同,不管条件是否成立。

例如,对于w的所有值,。在此示例中,当条件不真时,所述表达的方位不受所述表达的w方位的影响。这改进了方案的对称性。

确定单元可以被配置成确定表达,使得基于所述条件:,或。这可以用来创建例如if语句的隐藏实现方式,该if语句不具有else部分:ifbthenw=f(w)。

根据本发明的另一个方面,提供一种有条件地执行运算的方法。该方法包括以下步骤:

借助于表达r表示值w,其中w是集合w的元素,其中,并且r是表达的集合的元素,其中σ是状态变量,该状态变量为集合σ的元素并且向w的表达r提供冗余,并且是从w×σ到预定集合的一一密码映射;以及

基于关于条件的输入从表达r导出值的表达,其中是集合w的元素,其中是表达的集合的元素,其中,其中是状态变量,该状态变量为集合σ的元素并且向的表达提供冗余,并且是从w×σ到预定集合的一一密码映射,其中基于根据输入所述条件是否成立,f(w)相关联或者相关联,其中是在w上定义的非平凡映射,并且h是从w×σ到w的映射。

根据本发明的另一个方面,提供一种用于创建有条件地执行运算的计算机代码的系统。该系统包括:

识别单元,用于识别条件和条件运算f,其将在变量w上执行,从而在条件成立的情况下计算变量,使得,其中是集合w的元素并且其中f是在w上定义的映射;

第一生成单元,用于生成第一计算机代码,其中第一计算机代码被配置成在被执行时,借助于表达r表示变量w,其中w是集合w的元素,其中,并且r是表达的集合的元素,其中σ是状态变量,该状态变量为集合σ的元素并且向w的表达r提供冗余,并且是从w×σ到预定集合的一一密码映射;以及

第二生成单元,用于生成第二计算机代码,其中第二计算机代码被配置成在被执行时,基于关于条件的输入确定值的表达,其中是表达的集合的元素,其中,其中是状态变量,该状态变量为集合σ的元素并且向的表达提供冗余,其中是从w×σ到预定集合的一一密码映射;并且其中在根据输入所述条件成立的情况下,,并且在根据输入所述条件不成立的情况下,=,其中h是从w×σ到w的映射。

这样的系统可以用于将明文(非隐藏)运算转换成隐藏的代码。例如,该系统可以实现为生成隐藏代码的编译器的部分。例如,生成的计算机代码可以包括机器代码、伪代码或虚拟机代码。

根据另一个方面,提供一种创建有条件地执行运算的机器代码的方法,该方法包括:

识别条件和条件运算f,其将在变量w上执行,从而在条件成立的情况下计算变量,使得,其中是集合w的元素并且其中f是在w上定义的映射;

生成第一计算机代码,其中第一计算机代码被配置成在被执行时,借助于表达r表示变量w,其中w是集合w的元素,其中,并且r是表达的集合的元素,其中σ是状态变量,该状态变量为集合σ的元素并且向w的表达r提供冗余,并且是从w×σ到预定集合的一一密码映射;以及

生成第二计算机代码,其中第二计算机代码被配置成在被执行时,基于关于条件的输入确定值的表达,其中是表达的集合的元素,其中,其中是状态变量,该状态变量为集合σ的元素并且向的表达提供冗余,其中是从w×σ到预定集合的一一密码映射;并且其中在根据输入所述条件成立的情况下,,并且在根据输入所述条件不成立的情况下,=,其中h是从w×σ到w的映射。

根据另一个方面,提供一种包括用于促使处理器执行上文阐述的方法中的一个或多个的指令的计算机程序产品。

本领域技术人员将会领会,本发明的上述实施例、实现方式和/或方面中的两个或更多个可以以任何被认为有用的方式组合。

本领域技术人员在本说明书的基础上可以实施对应于所述系统的所描述的修改和变形的方法和计算机程序产品的修改和变形。

附图说明

本发明的这些和其他方面根据下文描述的实施例而是清楚明白的并且将参照这些实施例进行阐述。

图1是用于取决于条件执行变换的系统的框图。

图2是用于隐藏条件运算的系统的框图。

图3是用于隐藏条件运算的导出单元的框图。

图4是隐藏条件运算的方法的流程图。

图5是用于创建有条件地执行运算的机器代码的系统的框图。

图6是用于创建有条件地执行运算的机器代码的另一个系统的框图。

图7是转换嵌套条件运算的方法流程图。

图8是创建有条件地执行隐藏运算的机器代码的方法的流程图。

图9是用于隐藏变量集合的变化的系统的框图。

图10是隐藏变量集合的变化的方法的流程图。

具体实施方式

在下文中,给出关于如何改进数据值的加密以及隐藏程序的内部工作的描述。例如,这样的技术可以被应用以创建安全虚拟机。使用本文公开的技术也可以保护其他种类的系统抵御信息泄漏。贯穿本文档,词语隐藏被用来指示程序的功能难以例如通过逆向工程被发现。混淆是用于指示难以发现在程序代码中执行什么功能操作的另一术语。

图1图示了一种包括被配置成执行条件运算的变换单元101的系统。即,变换单元101接收值w和条件b,并且输出取决于b。在条件b为真的情况下,变换单元输出。在条件b为假的情况下,变换单元101输出。本文中fg是不同的函数。在可替换布置中,变换单元101被配置成接收一些变量(未示出)而不是条件自身,并且变换单元101首先评估表达式以基于这些变量确定条件b是否为真。在此之后,变换单元101输出(如果条件为真)或者(如果条件为假)。在下文中,将公开其中w的值以及可能地b被加密的实施例。

图2图示了用于以隐藏方式执行条件变换的系统。该系统包括用于识别值w的密码表达的表示单元102。例如,w的值在表示单元102的输入105处被提供,并且表示单元102被配置成加密w的值以生成w的加密表达r。可替换地,表示单元102可以被配置成接收表达r作为输入值101,并且将表达r转发至导出单元103。在任一情况下,值w与其密码表达r之间的示例关系可以被解释如下。

标示应当被编码的运算数(运算的输入值)的集合。定义状态的有限集和具有等于的基数的乘积的基数的有限集v的元素通过秘密编码函数以一对一的方式被映射到v。元素的编码代表是集合的成员。每个元素的代表的数量因而等于的基数。作为结果,携带来自v的符号的数据路径等于(的基数=1)或宽于(的基数>1)用于携带来自w的符号的数据路径。换言之,当的基数大于1时,存在可以表示w的任何特定值的更多值,因为表达不仅取决于w,而且取决于状态变量,其不一定具有任何意义,但可以被随机选择。此状态变量仅仅被引入以加密w的值并且隐藏w上执行的任何运算。优选地,,或者至少w的基数等于的基数。然而,这不是限制。

考虑要被编码(或隐藏)的函数。构造函数,使得,我们有。因此w的代表映射到的代表。一般定义可以是:

.(等式1)

在此示例中,的代表部分地由函数确定。即,使用关系,与的代表相关联的状态值可以取决于值w和与的代表相关联的状态二者。在一个特定示例中,g仅取决于,使得。然而,下文不限于此特定示例。

如等式1中所定义的运算的编码和值表达因而进一步使用某种映射g来隐藏。该映射g对发生在程序中的每个和每一个运算而言可能是不同的。相应地,具有相应运算的多个指令引入了分别具有关系的对应的多个指令。具有运算的指令的执行顺序可以诱导具有关系的指令的执行顺序。实际上,除了由运算构成的计算之外,新的计算开始存在以计算。该后者的计算在下文中被称为计算或轨迹。类似地,对于程序中通过引入相应的加密函数的序列的每个和每一个运算而言,加密函数可能是不同的,使得在每个运算之后,任何值w的表达可能是不同的。在这样的情况下,等式1推广为等式1a:

.(等式1a)

对于指令的描述,可以采用等式1的对称一般化。考虑函数,关系。等式1可以被推广为:

(等式2)

在这样的情况下,等式1中的也许部分信息可能作为的部分而被传递。可以形成两种观察结果。第一种观察结果是,在一个特定示例中,以及可以是加密术,并且“仅仅”组合这些值。第二种观察结果是,作为值以及作为状态的作用被视为衰减。能够确定或者或者就足够了。

为了掩盖程序流,跳跃运算可以被消除并且用上述表达上的可替换的运算代替。然而,与现代处理器架构的if转换特征的情况不同的是,此if转换未被进行以防止昂贵的管道破坏,而是移除控制流中任何可观察到的变化。这样,控制流的分析并不暴露在程序中进行的任何选择。进一步地,当对诸如“如果布尔型b为真,则进行运算f,不然进行运算g”之类的条件程序进行编码时,可以借助于本文公开的技术确保两个分支(“运算f”和“运算g”)都对产生贡献,不管条件(“如果布尔型b为真”)的结果如何。通过这样做,可以实现条件在整个程序上的统计散布。例如,

w的发展由对应于条件的结果的分支确定,

的发展由不对应于条件的结果的分支确定。

二者可以同时计算,并且/或者可以借助于而不可分离地连接到彼此。通过分析所得的数据,所采取的分支和条件的值都不能确定。可以消除基于条件的结果在现有技术中实现的跳跃运算,从而使得难以从程序的控制流提取信息。可以使值取决于if-then-if构造的两个分支。就信息论而言,的熵散布非常好。

例如,由图1的变换单元101执行的变换的程序表示可以如下:

ifbthen:=f(w)else:=g(w)。

在图2所示的示例实施例中,导出单元103接收如上文所解释的值w的加密表达r,以及关于条件b104的输入信息。此输入信息可以是布尔型的或者加密的布尔型变量。可替换地,输入信息可以包括可以通过例如变换单元101在定义条件的述语中组合的一个或多个变量。

图1的上述条件程序可以通过使用如上所述的状态变量引入冗余来重新编程,其中是运算数w的表达,并且是结果的表达,使得对于一些值,。导出单元103的输出可以概括如下:

ifb

then:=;

else:=

运算各自可以以查找表的形式实现。然而,为了避免if语句和对应的条件跳跃运算在导出单元103内的执行,有可能的是借助于查找表来实现导出单元103,该查找表将b和表达r的组合直接映射到的对应值。这里,b可以是加密的布尔型变量。而且,b可以用一个或多个输入变量代替,其中条件b是那些变量的函数。在这样的情况下,这些变量和表达r的组合可以通过查找表而映射到的对应值。在这样的情况下,定义条件b的函数可以与查找表中的fg一起编码。取代查找表的是,可以使用查找表的网络。在本领域中将函数实现为查找表的网络的方式本身是已知的。

如从上文可以看到,运算fg二者对表达具有影响,不管条件(“ifb”)的结果如何。因此运算fg二者对的“熵”产生贡献,使得难以从这些条件运算提取信息。

图3图示了导出单元103的示例实现方式。在这个特定实现方式中,if语句(或条件跳跃运算)被两个交换运算305和306取代。这样的交换运算可以例如以查找表的形式实现。下面三行中每一个相应行中描述的运算可以例如通过相应的查找表实现。

输入:br,其中

行1:ifbthen:=else:=fi

行2::=.

行3:ifbthen:=else:=fi

输出:,其中

上述代码片段中的行1解释了交换运算305的功能,其基于条件b(数字104)有条件地交换表达的值(w)和状态()部分。上述代码片段的行2解释在块307中函数fg如何应用表达。行3解释交换运算306的功能,其再次基于条件b(数字104)有条件地交换表达的值(w)和状态()部分。

注意到,取决于b可以是。在行2中,符号p和q被定义成使得。在行2中,在b为真的情况下,函数f被有效地应用到w。然而,如果b不为真,则函数g被有效应用到w,但是由于行1的前述交换运算的缘故,w已经变为表达的“状态”或“”部分的一部分。因此,附加的交换运算在行3中被提供,以交换的“w”和“”部分。在行3中,符号u和v被定义成使得。即,。在行3中,在b不为真的情况下,在表达的“状态”或“”部分中捕获的期望值被移到表达的“w”部分。

行1和3各自表示交换函数。这样的交换函数可以实现为查找表,其中基于b和表达r(或,分别地)的值查找正确值。有可能的是,通过选择,,使得,针对行1和3二者使用相同的查找表。也可能的是,在直接将rb的值映射到的对应值的单个查找表中对行1至3的结果进行编码。

参照图2,执行对应于该代码片段的隐藏计算的导出单元103也可以被配置成确定输出如下:

输入:条件b和表达r,其中

ifb

then:=;

else:=

这里,h为从的映射。在此案例中没有使用交换运算。再者,该实现方式适合于其中的情况,或者当w的基数不同于的基数时的情况。可能的是,以查找表的形式实现if子句的两个分支,并且取决于条件b应用查找表中的一个。函数fg将影响结果,不管条件b如何。可替换地,可以实现将b(或确定b的变量)和r的元组映射到对应的表达中的一个查找表。

一种特殊情况是,在程序的非隐藏版本中不存在else分支,即考虑程序

ifbthen:=f(w)end。

在这种情况下,先前示例的函数等同于同一性。即,确定单元103被配置成确定表达,使得基于所述条件,有:

(当条件为真时),或者

(当条件为假时)。

这本身没有造成安全风险,因为总是存在某种发展并且熵散布通过将函数f应用到w或应用到加密域的状态来维持。然而,这种情形可以进一步通过经由插入针对不受影响的变量的虚拟运算平衡两个分支来改进。考虑运算“平衡(blance)”,其目的是进一步通过平衡任何if语句隐藏程序,其中不同的变量可以取决于条件而被影响。

其中,例如意指。在这里,可以表示变量上的任何运算,其不改变该变量。例如dummy(y)可以意指下述中任何一个:,,。鉴于本公开,其他虚拟运算对本领域技术人员而言将是显而易见的。

换言之,包括多个分支(其中每一个分支取决于条件而被有条件地执行)的条件代码片段可以通过下述进行平衡:

•确定在条件分支的至少一个分支中变化但在条件分支的至少一个其他分支中不变的变量;

•创建针对确定的变量的虚拟运算;

•将该虚拟运算包括在条件分支的所述至少一个其他分支中。

上面的三个步骤可以针对条件分支中涉及的每一个变量进行重复。

图4图示了一种有条件地执行运算的方法。在步骤401中,借助于表达r表示值w,其中w是集合w的元素,其中,并且r是表达的集合的元素,其中σ是状态变量,该状态变量为集合σ的元素并且向w的表达r提供冗余,并且是从w×σ到预定集合的密码映射。例如,此表达r可以被接收。可替换地,该表达可以通过确定状态变量σ为随机数并计算或查找而从输入值w生成。

在步骤402中,确定值的表达,其中是集合w的元素,其中是表达的集合的元素,其中,其中是状态变量,该状态变量为集合σ的元素并且向的表达提供冗余,其中是从w×σ到预定集合的一一密码映射。例如,基于确定条件b和表达r的一个或多个输入变量在查找表中查找的值。可选地,如上文所描述,执行表查找的序列,涉及交换运算、函数运算以及另一交换运算。所述表被以这样的方式设计:使得取决于条件b,f(w)相关联或者相关联。这里,是在w上定义的映射,并且h是从w×σ到w的映射。

在一个特定示例中,上述方法将f应用于加密表达的“w”部分,使得基于该条件,例如如果该条件为真,。否则,f被应用到的“”部分,使得例如如果条件为假,。该方法的另外变形可以被提供,如上文参照图1至3所解释。例如,可以形成具有“else”分支的变形,使得基于该条件,

图5图示了一种用于创建有条件地执行运算的机器代码的系统。该系统包括:识别单元501,用于识别条件和条件运算f,该条件运算将在变量w上执行,使得在条件成立的情况下计算变量,使得,其中是集合w的元素并且其中f是在w上定义的映射。例如,识别单元501可以连接到编译器(未示出)的解析器模块,其提取计算机程序的表达式,以便识别条件和条件运算。

识别单元501可以将关于识别的条件和条件运算的信息提供给第一生成单元502,其生成机器代码。生成的机器代码在被执行时借助于表达r表示变量w,其中w是集合w的元素,其中并且r是表达的集合的元素,其中σ是状态变量,该状态变量为集合σ的元素并且向w的表达r提供冗余,并且是从w×σ到预定集合的一一密码映射。例如,机器代码可以从实际输入值w和随机数σ生成表达r。可替换地,由第一生成单元502生成的机器代码在被执行时可以引用所述表达被存储于其中的存储器位置或者从另一个软件组件或输入设备接收表达r

该系统进一步包括第二生成单元503。第二生成单元503生成用于基于表达r和关于条件的输入确定值的表达的机器代码,其中是表达的集合的元素,其中,其中是状态变量,该状态变量为集合σ的元素并且向的表达提供冗余,其中是从w×σ到预定集合的一一密码映射。如果所述条件成立,,并且如果所述条件不成立,=,其中h是从w×σ到w的映射。生成单元503可以包括表生成器(未示出),其生成如上所述可以用于实现所述功能的查找表中的一个或多个。该系统可以被扩展以生成执行如上所述的计算或表查找所必需的机器代码。

图6图示了用于生成有条件地执行运算的机器代码的系统的另一个实施例。与图5类似的项目已被给出相同的附图标记,并且不需要再次详细讨论。该系统包括将涉及多个条件的嵌套条件运算转换成非嵌套条件运算的序列的转换单元601。特别地,在输出值相同的意义上,具有对应的条件的非嵌套条件运算的序列等价于嵌套条件运算。而且,具有对应的条件的非嵌套条件运算可以通过识别单元501以及代码生成单元502和503来处理。

图7图示了一种将涉及多个条件的嵌套条件运算转换成非嵌套条件运算的序列的示例方法。图6的转换单元601可以被配置成执行图7中图示的方法。

在步骤701中,嵌套条件运算的相应条件分支的相应表达式被转换成辅助表达式的措辞。取决于条件,这些相应表述与要被分配给特定变量的可替换值相关联。即,所述表达式被指定为分配给生成的代码的相同变量,但是所述条件确定哪个表达式将最终被分配给该变量。在步骤702中,如果确定了步骤701应当被重复,则流程返回到步骤701,使得多个辅助表达式被生成,其中措辞以不同方式组合。如果在步骤702中,确定了已经生成了足够的辅助表达式,使得每一个条件运算等价于辅助措辞的特定组合,则该方法从步骤703继续进行。在步骤703中,代码被生成以评估辅助表达式并存储它们的结果。该步骤可以涉及生成用于评估多个条件中至少一个的组合的代码。接下来,在步骤704中,代码被生成以取决于组合的条件将辅助表达式的结果组合,其中组合的条件是多个条件的组合,使得与关于条件不相关的分支对应的措辞取消。

再次考虑条件代码片段“ifbthenfelsegfi”。这样的语句的条件分支fg可以包括多个表达式,例如标示为例如“f;f”的运算的序列,包含循环、递归或附加的条件代码片段,比如附加if语句。后者的情形呈现嵌套布尔型受保卫的选择。

将程序p定义为:

现在,存在四个可替换方案(f,g,h,和j),其中只有一个将被执行。当上述技术应用到p1和p2时,取决于b1的主分支仍然不一定被所述隐藏技术完全覆盖。

一种解决这个问题的方式是用非嵌套if语句的序列取代嵌套的if语句,并且通过这样的方式做这件事:使得每一个分支(f,g,h,j)的表达式都在执行该非嵌套if语句序列的过程中被评估。

为了以此方式转变程序,首先可以通过插入虚拟运算来平衡表达式。

一种系统化方法可以被应用以使程序扁平化,使得它不再包含嵌套的if子句。

如我们之前看到的,如果程序关于熵完全平衡、特别是if子句的分支对完全平衡,则我们的方法关于密码工作得最好。在分支包含两个(无条件)分配以及一个或多个嵌套if子句的情况下,我们可以通过在if子句的每一个分支中如下分布这样的分配的副本来使那些程序“扁平化(flatten)”:

考虑下面的优选地关于变量x被平衡的嵌套if子句:

这里,exp0,exp1,exp2和exp3是取决于x的表达式。

引入p:=expi+expi+1和q:=expiexpi+1作为辅助变量,这个程序可以被变换成:

由于在两个第二层级的if子句之后的延续部分现在变得相同,因此,该程序可以被“扁平化”成:

程序1:

或者,使用乘法变体:

所得的两个if语句可以使用上文关于加密表达的技术来实现。例如,对于上述程序1的第一个if语句,表达r可以用来表示输入变量x,并且表达r1和r2可以用来表示p和q。另外的表达可以用来表示程序1的第二个if语句的输出x。

当if语句被嵌套到较深层级时,那么类似技术可以被应用来将它们转换成一系列顺序的if语句。例如,考虑下面的其中if语句被双嵌套的示例程序:

这个示例程序可以被转换成一系列非嵌套if语句。为做到这一点,可以采用两步骤方法。首先,类似于单个嵌套if语句的情况,来自第三层级if子句的延续部分可以通过引入如下辅助变量p和q来统一:p:=expi+expi+1,且q:=expi-expi+1。这在下面的代码中更详细地被说明:

这个程序可以被扁平化以获得没有任何嵌套if子句的下述代码:

对于任何表达式exp0至exp7,上面的将具有双重嵌套if子句的程序转换成具有顺序的非嵌套if子句的程序的转换过程可以应用到具有上述格式的任何程序。

图8图示了一种创建有条件地执行运算的计算机代码的方法。步骤801涉及识别条件和条件运算f,该条件运算将在变量w上执行,使得在条件成立的情况下计算变量,使得,其中是集合w的元素并且其中f是在w上定义的映射。步骤802涉及生成第一计算机代码,其中第一计算机代码被配置成在被执行时,借助于表达r表示变量w,其中w是集合w的元素,其中并且r是表达的集合的元素,其中σ是状态变量,该状态变量为集合σ的元素并且向w的表达r提供冗余,并且是从w×σ到预定集合的一一密码映射。步骤803涉及生成第二计算机代码,其中第二计算机代码被配置成在被执行时,基于关于条件的输入确定值的表达,其中是表达的集合的元素,其中,其中是状态变量,该状态变量为集合σ的元素并且向的表达提供冗余,其中是从w×σ到预定集合的一一密码映射;并且其中在根据输入所述条件成立的情况下,,并且在根据输入所述条件不成立的情况下,=,其中且h是从w×σ到w的映射。

程序中跳跃的移除可以用来禁止分析控制流或涉及的值。计算在if语句的所有分支、甚至关于条件不相关的分支中进行的计算以及将那些计算的结果组合在一个数据元件中可以帮助达到此目标。

其中跳跃被抑制的表驱动机器的系统可以被创建以移除程序的控制流中的变化,其中在布尔型受保卫的选择的情况下,形式的编码沿着通过至多未采取的分支以及沿着通过至少w采取的分支发展。

图9图示了一种用于隐藏程序的变量集合的变化的系统。该系统包括值表示构件902,用于借助于表达ri表示变量v1,v2,...,vn中的变量vi的值wi,其中w是集合w的元素,其中并且ri是表达的集合的元素,其中σi是状态变量,该状态变量为集合σ的元素并且向wi的表达ri提供冗余,并且是从w×σ到预定集合的一一密码映射。此值表示构件902可以使用上文公开的技术实现。值表示构件902可以被配置成以指定方式由相应的表达表示所有变量。例如,的值可以随机选择。值表示构件902可以被配置成基于底层值wi计算表达ri。值表示构件902还可以被配置成从另一个设备或从系统的另一个组件接收表达rin是正整数。即,一般地,变量集合v包含至少一个变量。

该系统可以进一步包括动作表示构件903,其用于借助于在上的动作和在v\上的动作表示v的子集中的变量的值上的动作,以获得更新的表达,其中,其中是从w×σ到预定集合的一一密码映射。可以与相等。可替换地,可以是不同于的密码映射。因而,有可能的是,当改变表达时改变密码映射。

而且,动作表示构件可以被配置成执行上的动作和v\上的动作。可替换地,动作表示构件可以被配置成仅通过生成在被执行时执行所述动作的程序代码来表示这些动作。在后者情况下,动作表示构件903可以被配置成识别(例如借助于解析器)定义子集中的变量的值上的动作的程序代码,并且将该程序代码变换成定义上的动作和v\上的动作的程序代码。

上的动作被配置成根据变量vj的变化值w’j改变变量的集合v'中的每一个变量vj的表达rj,并且v\v'上的动作被配置成根据状态变量σk的变化值改变v\v'中每一个变量vk的表达rk。特别地,v\v'中每一个变量vk的表达rk被改变成表示的相同值的表达。变量集合v'中的每一个变量vj的表达rj可以根据变量的变化值而改变,保持的相同值(或可选地的不同值)。

所述动作可以包括if语句,其在条件成立的情况下定义变量集合上的动作,并且在条件不成立的情况下定义变量集合上的动作,其中二者是v的子集。换言之,变量集合v包括的并集,从而。动作表示构件903可以被配置成在条件成立的情况下使用变量集合作为变量集合。这意味着动作表示构件903通过根据变量的变化值改变变量集合中的每一个变量vj的表达rj来执行v1上的动作,并且通过根据状态变量σk的变化值改变v\v1中每一个变量vk的表达rk来执行v\上的动作。

而且,动作表示构件903可以被配置成在条件不成立的情况下使用变量集合作为变量集合。这意味着动作表示构件903通过根据变量的变化值改变变量集合中的每一个变量vj的表达rj来执行v2上的动作,并且通过根据状态变量σk的变化值改变v\v2中每一个变量vk的表达rk来执行v\上的动作。

变量中的一些可以通过条件代码片段来改变,无论条件是否成立。在这样的情况下,变量集合v1和变量集合v2可以具有交集v3,其中。该动作在条件成立的情况下根据函数fm并且在条件不成立的情况下根据函数gm改变集合v3的每一个变量vm的值。该动作表示构件被配置成通过确定集合v3的每一个变化的变量vm的表达的动作表示这些动作,使得在所述条件成立的情况下,,但在所述条件不成立的情况下,。这里,hm是从w×σ到w的映射。

动作表示构件903可以借助于查找运算来实现。为此目的,一个或多个查找表可以被准备并存储在系统的存储器中。条件是否成立不需要由系统明确确定。相反,可以接收确定条件的值的输入。所述一个或多个查找表可以将这些输入值连同所述表达一起映射到对应的改变的表达。动作表示构件903因而可以被配置成使用至少一个查找表促成与关于条件的输入和表达对应的表达的查找,所述至少一个查找表将关于条件的输入和表达的元组映射到对应的表达

动作表示构件903还可以借助于上文参照图3描述的一个或多个交换运算来实现。动作表示构件903可以被配置成识别确定条件b的一个或多个输入变量,并且如上所述,可以包含用于变量集合中的每一个变量的第一交换单元305、函数评估单元307和/或第二交换单元306。

上面描述的值表示构件902和动作表示构件903可以操作地耦合到上面描述的转换单元601。转换单元601通过涉及第二多个条件的非嵌套条件运算的功能等价序列表示涉及第一多个嵌套条件的嵌套条件运算。例如,非嵌套条件运算的序列可以由转换单元601通过处理嵌套条件运算生成。每一个所得的非嵌套条件运算可以以所阐述的方式单独地通过动作表示构件903表示。

图10图示了一种隐藏程序的变量集合的变化的方法。在步骤1001中,由表达ri表示变量v1,v2,...,vn中的变量vi的值wi,其中w是集合w的元素,其中,并且ri是表达的集合的元素,其中σi是状态变量,该状态变量为集合σ的元素并且向wi的表达ri提供冗余,并且是从w×σ到预定集合的一一密码映射。在步骤1002中,由在v'上的动作和在v\v'上的动作表示v的子集v'的值上的动作,以获得更新的表达,其中,其中是从w×σ到预定集合的一一密码映射,并且其中在v'上的动作被配置成根据变量vj的变化值w'j改变变量的集合v'中的每一个变量vj的表达rj,并且在v\v'上的动作被配置成根据σk的变化值σ'k改变v\v'中每一个变量vk的表达rk

应当领会,本发明还适用于适于将本发明付诸实践的计算机程序,特别是载体上或载体中的计算机程序。涉及计算机程序产品的实施例包括与本文阐述的至少一个方法的每一个处理步骤对应的计算机可执行指令。这些指令可以被细分成子例程和/或存储在可以静态或动态链接的一个或多个文件中。涉及计算机程序产品的另一个实施例包括对于本文阐述的系统和/或产品中至少一个的每一个单元对应的计算机可执行指令。这些指令可以被细分成子例程和/或存储在可以静态或动态链接的一个或多个文件中。

计算机程序的载体可以是能够承载程序的任何实体或设备。例如,载体可以包括存储介质,比如rom,例如cdrom或半导体rom、或磁记录介质。而且,载体可以是可传输载体,比如电信号或光信号,其可以经由电气或光学线缆或通过无线电或其他手段被传达。当程序体现在这样的信号中时,载体可以由这样的线缆或其他设备或构件构成。可替换地,载体可以是程序体现在其中的集成电路,该集成电路适于执行相关方法或用在相关方法的执行中。

应当注意,上述实施例说明而非限制本发明,并且本领域技术人员将能够在不脱离随附权利要求的范围的情况下设计出许多可替换实施例。在权利要求中,置于括号之间的任何附图标记不应当被解释为限制权利要求。动词“包括”及其词形变化的使用不排除权利要求中叙述的那些之外的元件或步骤的存在。元件之前的冠词“一”不排除多个这样的元件的存在。本发明可以借助于包括若干不同元件的硬件以及借助于适当编程的计算机实现。在列举若干构件的设备权利要求中,这些构件中的若干个可以由同一项硬件体现。在相互不同的从属权利要求中叙述某些措施的纯粹事实并不表示这些措施的组合不能用于获益。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1