本发明涉及隐藏程序执行的细节。更特别地,本发明涉及隐藏条件运算。更特别地,本发明涉及在包含条件计算的程序中隐藏程序流和数据流。
背景技术:
可以利用表驱动方法实现加密值的计算,不使用暴露它们的功能的运算符。程序代码、即其运算可以通过使用查找表来隐藏。将这些表应用于加密数据给出了加密结果、隐藏的运算的结果。然而,辨识像比较(<,=,...)那样的运算符是相当容易的,因为那些指令被限于数字,典型地导致控制流的改变,并且它们的结果是加密的布尔类型的。如果此加密的布尔型保卫条件运算,例如在if-then或if-then-else构造的情况下,攻击者可以从控制流辨识运算的各方面。进一步地,攻击者可以创建对被比较的加密值的排序。最后,这可以导致破解加密。
在软件程序中,执行比较通常是必要的。例如,为了检查是否已经被达到某阈值或者是否某输入等于预定值。在混淆程序中,这样的比较可以帮助攻击者破解编码。
us7,809,135b2公开了与增加具有密码功能的软件所使用的密钥的密码安全性有关的方法和系统。这是通过增加软件的数学复杂度来进行的。首先确定软件所使用的组件和函数,并且使用这些组件、函数和它们之间交换的数据,使得软件对分析的抵抗性更强。在增加分析抵抗力中使用的方法被分组为3种一般类型:调节组件之间交换的信息,将某些组件用不同但相关的组件代替,以及调节组件之间的数据流。
技术实现要素:
将会有利的是,在程序的执行期间,具有改进的方法和系统以防止信息从程序中泄漏。
为了解决这个问题,在第一方面,提供一种用于隐藏程序的变量集合v={v1,v2,...,vn}的变化的系统。该系统包括:
值表示构件,用于借助于表达ri表示变量v1,v2,...,vn中的变量vi的值wi,其中wi是集合w的元素,其中
动作表示构件,用于通过在v'上的动作和在v\v'上的动作表示v的子集v'的值上的动作,其中
在v'上的动作根据变量vj的变化值w'j改变变量集合v'中的每一个变量vj的表达rj,使得
其中在v\v'上的动作根据σk的变化值σ'k改变v\v'中每一个变量vk的表达rk,使得
使用此系统,对攻击者而言,难以发现程序中哪一个变量实际变化,因为通过改变状态变量σ,未改变的变量的表达也被变更。
例如,所述动作包括if语句,其定义了在条件成立的情况下在变量集合v1上的动作,以及在条件不成立的情况下在变量集合v2上的动作,其中变量集合v是v1和v2的并集,从而
变量集合v1和变量集合v2可以具有被所述两个动作影响的变量的交集v3,从而
其中hm是从w×σ到w的映射。
使用此特征,攻击者难以发现是fm实际应用到变量wm还是gm应用到变量wm。
动作表示构件可以被配置成使用将关于条件的输入和表达
在一个特定示例中,
其中
其中
当计算表达
动作表示构件可以进一步包括函数评估单元,其用于计算函数以基于表达
其中f是在w上定义的映射并且g是在w上定义的映射。
这样,取决于之前执行的交换运算,函数f和g可以应用到表达
在一个特定示例中,
在一个示例中,对于w和σ的所有值和
在一个示例中,在
其中在
其中对于
这是对表达做出了什么改变的示例。
权利要求2或3的系统进一步包括嵌套条件表示构件,用于将涉及第一多个嵌套条件的嵌套条件运算表示成涉及第二多个条件的非嵌套条件运算的功能等价序列。
该系统可以进一步包括用于将涉及第一多个嵌套条件的嵌套条件运算转换成涉及第二多个条件的非嵌套条件运算的功能等价序列的转换单元。这有助于改进信息泄漏的防止,因为每一个非嵌套条件运算例如借助于第一和第二生成单元生成的代码被评估,使得条件运算中出现的所有表达式被评估并且可以影响表达
例如,转换单元可以被配置成:将嵌套条件运算的相应条件分支的相应表达式组合成辅助表达式的措辞,其中相应表达式与要被分配给特定变量的可替换的值相关联;重复将相应条件分支的相应表达式组合成辅助表达式的措辞的步骤,使得多个辅助表达式被生成,其中所述措辞以不同方式组合;生成评估辅助表达式的代码并存储它们的结果;并且取决于组合的条件生成组合辅助表达式的结果的代码,其中组合的条件是多个条件的组合,使得与关于该条件无关的分支对应的措辞取消。这样的系统可以用来通过将嵌套的if语句扁平化成未被嵌套的if语句的序列来隐藏嵌套的if语句。通过将不同条件分支中出现的表达式组合成辅助表达式并且随后以这样的方式组合辅助表达式以使得关于条件不相关的表达式取消,许多所述表达式在程序中被评估并且可以影响加密结果,从而使得难以分析哪些表达式实际影响对应于加密结果的解密值
动作表示构件可以被配置成识别非嵌套条件运算的序列的至少一个条件运算和第二多个条件中的对应条件,并且其中动作表示构件被配置成使用所识别的条件运算作为所述动作并且使用所识别的对应条件作为if语句的条件。这样的组合提供了对在条件代码块中发生的情况的特别好的隐藏。进一步地,识别单元可以被配置成识别非嵌套条件运算的序列的每一个条件运算以及第二多个条件中的每一个对应条件,其中第一生成单元和第二生成单元被配置成处理每一个所识别的条件运算和对应条件。
在另一个方面,提供一种用于隐藏程序的变量集合
借助于表达ri表示变量v1,v2,...,vn中的变量vi的值wi,其中w是集合w的元素,其中
借助于在v'上的动作和在v\v'上的动作表示v的子集v'的值上的动作,以获得更新的表达
在v'上的动作被配置成根据变量vj的变化值w'j改变变量的集合v'中的每一个变量vj的表达rj,并且
在v\v'上的动作被配置成根据σk的变化值σ'k改变v\v'中每一个变量vk的表达rk。
根据另一个方面,提供一种用于隐藏条件运算的系统,该系统包括:
表示单元,用于借助于表达r表示值w,其中w是集合w的元素,其中
导出单元,用于基于关于条件的输入从表达r导出值
表示单元提供了表达r,其为值w的冗余表达。即,w的任何单个值具有许多不同的表达r,因为r可以是
确定单元可以被配置成确定表达
导出单元可以被配置成使用将输入和表达r的元组映射到对应的表达
例如,
其中
其中
当计算表达
导出单元可以进一步包括函数评估单元,其用于计算基于表达
其中g是在w上定义的映射。
这样,取决于之前执行的交换运算,函数f和g可以应用到表达
例如,对于w和
确定单元可以被配置成确定表达
根据本发明的另一个方面,提供一种有条件地执行运算的方法。该方法包括以下步骤:
借助于表达r表示值w,其中w是集合w的元素,其中
基于关于条件的输入从表达r导出值
根据本发明的另一个方面,提供一种用于创建有条件地执行运算的计算机代码的系统。该系统包括:
识别单元,用于识别条件和条件运算f,其将在变量w上执行,从而在条件成立的情况下计算变量
第一生成单元,用于生成第一计算机代码,其中第一计算机代码被配置成在被执行时,借助于表达r表示变量w,其中w是集合w的元素,其中
第二生成单元,用于生成第二计算机代码,其中第二计算机代码被配置成在被执行时,基于关于条件的输入确定值
这样的系统可以用于将明文(非隐藏)运算转换成隐藏的代码。例如,该系统可以实现为生成隐藏代码的编译器的部分。例如,生成的计算机代码可以包括机器代码、伪代码或虚拟机代码。
根据另一个方面,提供一种创建有条件地执行运算的机器代码的方法,该方法包括:
识别条件和条件运算f,其将在变量w上执行,从而在条件成立的情况下计算变量
生成第一计算机代码,其中第一计算机代码被配置成在被执行时,借助于表达r表示变量w,其中w是集合w的元素,其中
生成第二计算机代码,其中第二计算机代码被配置成在被执行时,基于关于条件的输入确定值
根据另一个方面,提供一种包括用于促使处理器执行上文阐述的方法中的一个或多个的指令的计算机程序产品。
本领域技术人员将会领会,本发明的上述实施例、实现方式和/或方面中的两个或更多个可以以任何被认为有用的方式组合。
本领域技术人员在本说明书的基础上可以实施对应于所述系统的所描述的修改和变形的方法和计算机程序产品的修改和变形。
附图说明
本发明的这些和其他方面根据下文描述的实施例而是清楚明白的并且将参照这些实施例进行阐述。
图1是用于取决于条件执行变换的系统的框图。
图2是用于隐藏条件运算的系统的框图。
图3是用于隐藏条件运算的导出单元的框图。
图4是隐藏条件运算的方法的流程图。
图5是用于创建有条件地执行运算的机器代码的系统的框图。
图6是用于创建有条件地执行运算的机器代码的另一个系统的框图。
图7是转换嵌套条件运算的方法流程图。
图8是创建有条件地执行隐藏运算的机器代码的方法的流程图。
图9是用于隐藏变量集合的变化的系统的框图。
图10是隐藏变量集合的变化的方法的流程图。
具体实施方式
在下文中,给出关于如何改进数据值的加密以及隐藏程序的内部工作的描述。例如,这样的技术可以被应用以创建安全虚拟机。使用本文公开的技术也可以保护其他种类的系统抵御信息泄漏。贯穿本文档,词语隐藏被用来指示程序的功能难以例如通过逆向工程被发现。混淆是用于指示难以发现在程序代码中执行什么功能操作的另一术语。
图1图示了一种包括被配置成执行条件运算的变换单元101的系统。即,变换单元101接收值w和条件b,并且输出取决于b的
图2图示了用于以隐藏方式执行条件变换的系统。该系统包括用于识别值w的密码表达的表示单元102。例如,w的值在表示单元102的输入105处被提供,并且表示单元102被配置成加密w的值以生成w的加密表达r。可替换地,表示单元102可以被配置成接收表达r作为输入值101,并且将表达r转发至导出单元103。在任一情况下,值w与其密码表达r之间的示例关系可以被解释如下。
令
考虑要被编码(或隐藏)的函数
在此示例中,
如等式1中所定义的运算
对于指令的描述,可以采用等式1的对称一般化。考虑函数
在这样的情况下,等式1中
为了掩盖程序流,跳跃运算可以被消除并且用上述表达上的可替换的运算代替。然而,与现代处理器架构的if转换特征的情况不同的是,此if转换未被进行以防止昂贵的管道破坏,而是移除控制流中任何可观察到的变化。这样,控制流的分析并不暴露在程序中进行的任何选择。进一步地,当对诸如“如果布尔型b为真,则进行运算f,不然进行运算g”之类的条件程序进行编码时,可以借助于本文公开的技术确保两个分支(“运算f”和“运算g”)都对
•w的发展由对应于条件的结果的分支确定,
•
例如,由图1的变换单元101执行的变换的程序表示可以如下:
ifbthen
在图2所示的示例实施例中,导出单元103接收如上文所解释的值w的加密表达r,以及关于条件b104的输入信息。此输入信息可以是布尔型的或者加密的布尔型变量。可替换地,输入信息可以包括可以通过例如变换单元101在定义条件的述语中组合的一个或多个变量。
图1的上述条件程序可以通过使用如上所述的状态变量引入冗余来重新编程,其中
ifb
then
else
运算
如从上文可以看到,运算f和g二者对表达
图3图示了导出单元103的示例实现方式。在这个特定实现方式中,if语句(或条件跳跃运算)被两个交换运算305和306取代。这样的交换运算可以例如以查找表的形式实现。下面三行中每一个相应行中描述的运算可以例如通过相应的查找表实现。
输入:b和r,其中
行1:ifbthen
行2:
行3:ifbthen
输出:
上述代码片段中的行1解释了交换运算305的功能,其基于条件b(数字104)有条件地交换表达
注意到,取决于b,
行1和3各自表示交换函数。这样的交换函数可以实现为查找表,其中基于b和表达r(或
参照图2,执行对应于该代码片段的隐藏计算的导出单元103也可以被配置成确定输出如下:
输入:条件b和表达r,其中
ifb
then
else
这里,h为从
一种特殊情况是,在程序的非隐藏版本中不存在else分支,即考虑程序
ifbthen
在这种情况下,先前示例的函数
这本身没有造成安全风险,因为总是存在某种发展并且熵散布通过将函数f应用到w或应用到加密域的状态
其中,例如
换言之,包括多个分支(其中每一个分支取决于条件而被有条件地执行)的条件代码片段可以通过下述进行平衡:
•确定在条件分支的至少一个分支中变化但在条件分支的至少一个其他分支中不变的变量;
•创建针对确定的变量的虚拟运算;
•将该虚拟运算包括在条件分支的所述至少一个其他分支中。
上面的三个步骤可以针对条件分支中涉及的每一个变量进行重复。
图4图示了一种有条件地执行运算的方法。在步骤401中,借助于表达r表示值w,其中w是集合w的元素,其中
在步骤402中,确定值
在一个特定示例中,上述方法将f应用于加密表达
图5图示了一种用于创建有条件地执行运算的机器代码的系统。该系统包括:识别单元501,用于识别条件和条件运算f,该条件运算将在变量w上执行,使得在条件成立的情况下计算变量
识别单元501可以将关于识别的条件和条件运算的信息提供给第一生成单元502,其生成机器代码。生成的机器代码在被执行时借助于表达r表示变量w,其中w是集合w的元素,其中
该系统进一步包括第二生成单元503。第二生成单元503生成用于基于表达r和关于条件的输入确定值
图6图示了用于生成有条件地执行运算的机器代码的系统的另一个实施例。与图5类似的项目已被给出相同的附图标记,并且不需要再次详细讨论。该系统包括将涉及多个条件的嵌套条件运算转换成非嵌套条件运算的序列的转换单元601。特别地,在输出值相同的意义上,具有对应的条件的非嵌套条件运算的序列等价于嵌套条件运算。而且,具有对应的条件的非嵌套条件运算可以通过识别单元501以及代码生成单元502和503来处理。
图7图示了一种将涉及多个条件的嵌套条件运算转换成非嵌套条件运算的序列的示例方法。图6的转换单元601可以被配置成执行图7中图示的方法。
在步骤701中,嵌套条件运算的相应条件分支的相应表达式被转换成辅助表达式的措辞。取决于条件,这些相应表述与要被分配给特定变量的可替换值相关联。即,所述表达式被指定为分配给生成的代码的相同变量,但是所述条件确定哪个表达式将最终被分配给该变量。在步骤702中,如果确定了步骤701应当被重复,则流程返回到步骤701,使得多个辅助表达式被生成,其中措辞以不同方式组合。如果在步骤702中,确定了已经生成了足够的辅助表达式,使得每一个条件运算等价于辅助措辞的特定组合,则该方法从步骤703继续进行。在步骤703中,代码被生成以评估辅助表达式并存储它们的结果。该步骤可以涉及生成用于评估多个条件中至少一个的组合的代码。接下来,在步骤704中,代码被生成以取决于组合的条件将辅助表达式的结果组合,其中组合的条件是多个条件的组合,使得与关于条件不相关的分支对应的措辞取消。
再次考虑条件代码片段“ifbthenfelsegfi”。这样的语句的条件分支f和g可以包括多个表达式,例如标示为例如“f
将程序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:=expi−expi+1作为辅助变量,这个程序可以被变换成:
由于在两个第二层级的if子句之后的延续部分现在变得相同,因此,该程序可以被“扁平化”成:
程序1:
或者,使用乘法变体:
所得的两个if语句可以使用上文关于加密表达
当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上执行,使得在条件成立的情况下计算变量
程序中跳跃的移除可以用来禁止分析控制流或涉及的值。计算在if语句的所有分支、甚至关于条件不相关的分支中进行的计算以及将那些计算的结果组合在一个数据元件中可以帮助达到此目标。
其中跳跃被抑制的表驱动机器的系统可以被创建以移除程序的控制流中的变化,其中在布尔型受保卫的选择的情况下,
图9图示了一种用于隐藏程序的变量集合
该系统可以进一步包括动作表示构件903,其用于借助于在
而且,动作表示构件可以被配置成执行
在
所述动作可以包括if语句,其在条件成立的情况下定义变量集合
而且,动作表示构件903可以被配置成在条件不成立的情况下使用变量集合
变量中的一些可以通过条件代码片段来改变,无论条件是否成立。在这样的情况下,变量集合v1和变量集合v2可以具有交集v3,其中
动作表示构件903可以借助于查找运算来实现。为此目的,一个或多个查找表可以被准备并存储在系统的存储器中。条件是否成立不需要由系统明确确定。相反,可以接收确定条件的值的输入。所述一个或多个查找表可以将这些输入值连同所述表达一起映射到对应的改变的表达。动作表示构件903因而可以被配置成使用至少一个查找表促成与关于条件的输入和表达
动作表示构件903还可以借助于上文参照图3描述的一个或多个交换运算来实现。动作表示构件903可以被配置成识别确定条件b的一个或多个输入变量,并且如上所述,可以包含用于变量集合
上面描述的值表示构件902和动作表示构件903可以操作地耦合到上面描述的转换单元601。转换单元601通过涉及第二多个条件的非嵌套条件运算的功能等价序列表示涉及第一多个嵌套条件的嵌套条件运算。例如,非嵌套条件运算的序列可以由转换单元601通过处理嵌套条件运算生成。每一个所得的非嵌套条件运算可以以所阐述的方式单独地通过动作表示构件903表示。
图10图示了一种隐藏程序的变量集合
应当领会,本发明还适用于适于将本发明付诸实践的计算机程序,特别是载体上或载体中的计算机程序。涉及计算机程序产品的实施例包括与本文阐述的至少一个方法的每一个处理步骤对应的计算机可执行指令。这些指令可以被细分成子例程和/或存储在可以静态或动态链接的一个或多个文件中。涉及计算机程序产品的另一个实施例包括对于本文阐述的系统和/或产品中至少一个的每一个单元对应的计算机可执行指令。这些指令可以被细分成子例程和/或存储在可以静态或动态链接的一个或多个文件中。
计算机程序的载体可以是能够承载程序的任何实体或设备。例如,载体可以包括存储介质,比如rom,例如cdrom或半导体rom、或磁记录介质。而且,载体可以是可传输载体,比如电信号或光信号,其可以经由电气或光学线缆或通过无线电或其他手段被传达。当程序体现在这样的信号中时,载体可以由这样的线缆或其他设备或构件构成。可替换地,载体可以是程序体现在其中的集成电路,该集成电路适于执行相关方法或用在相关方法的执行中。
应当注意,上述实施例说明而非限制本发明,并且本领域技术人员将能够在不脱离随附权利要求的范围的情况下设计出许多可替换实施例。在权利要求中,置于括号之间的任何附图标记不应当被解释为限制权利要求。动词“包括”及其词形变化的使用不排除权利要求中叙述的那些之外的元件或步骤的存在。元件之前的冠词“一”不排除多个这样的元件的存在。本发明可以借助于包括若干不同元件的硬件以及借助于适当编程的计算机实现。在列举若干构件的设备权利要求中,这些构件中的若干个可以由同一项硬件体现。在相互不同的从属权利要求中叙述某些措施的纯粹事实并不表示这些措施的组合不能用于获益。