在加密算法中使用机密数据时保护机密数据的方法技术

技术编号:13840516 阅读:155 留言:0更新日期:2016-10-16 08:15
本公开涉及一种生成算法的受保护实现的方法,所述方法包括:将实现所述算法的原始源代码扩展成单个真实操作集;将使用真实数据的每个真实操作与每个真实操作所使用的真实数据相组合,以获得以这样的方式表示的组合:该方式以不同于原始形式的形式使用实际真实数据片段;产生应用于引诱数据的表示所述算法的备选实现的重复和变异引诱操作集;将所述引诱操作集与包括所述组合的所述真实操作集相组合,以便获得其中所述引诱操作与所述真实操作和由所述真实操作处理的所述真实数据交互的实现,以使得难以分析所述实现中的真实数据流;以及将所述实现变换成能够被执行的结果代码。

【技术实现步骤摘要】
【国外来华专利技术】
技术介绍
近年来,加密在计算机软件中的作用已变得越发重要。在过去,加密的使用限于特定类型的应用,但最近对隐私性以及安全性的关注已迫使应用开发人员响应以显著增加加密在各种应用中的使用。遗憾的是,加密使用的这种增加(以及其他安全性领域的增加)在实践中并未显著提高隐私性或安全性。其中一个原因是标准加密算法基于现实世界中并非始终存在的前提。作为所有标准加密基础的基本前提是用于执行加密操作的机密(例如密钥)保密。如果机密暴露,则使用这些机密保护的任何信息也暴露。在加密文献中,参与信息交换的实体被建模为不透明端点,使得如果实体使用机密,则假设该机密对该实体保持私有,除非该实体传输允许另一个实体导出机密的信息。但是,在现实世界中,这些实体通常是在设备上运行的应用,这些设备可能受到恶意软件攻击或者甚至由恶意个人直接访问。如果攻击者直接访问在设备上运行的软件,则对于他们而言窃取这些应用中由加密操作使用的任何机密通常轻而易举。当发生这种情况时,上述前提不再成立并且受影响的应用将不再从加密的使用中获得任何好处。该问题近年来已导致称为白盒加密的新领域,白盒加密旨在通过以防止直接从应用提取这些机密的形式重新实现加密操作来解决该问题。在最低限度上,加密操作的白盒版本应该甚至在非常短的一段时间内防止在存储器中暴露机密数据。但是,在实践中,还需要抵抗旨在通过检查实现的内部细节而导出机密数据的攻击。早期产生白盒实现的尝试是高度算法特定的,即,专家必须使用专业
算法知识谨慎地设计用于每个算法的方法。这些白盒实现在防止在存储器中暴露机密数据方面非常有效,但在防止通过检查实现的内部细节而导出实现方面收效甚微。其中主要原因是大多数加密算法依赖于整体操作的复杂性-当从更细粒度级别观看时,这种复杂性不再存在,并且通常可以通过相对小的整体算法部分来观察数据流而导出机密。例如,高级加密标准(AES)算法多次执行相同的步骤序列(每次称为一轮),并且其强度依赖于使用10、12或14轮(取决于密钥大小)。如果攻击者能够观察个体轮的输入和输出,则他们将能够恢复密钥,并且远比在他们将所有轮作为单个不透明单元进行观察的情况容易。最新解决方案已尝试通过以下操作解决该问题:通过人工或自动化过程,使用其中极其难以遵循和理解程序和数据流的重度混淆的形式来实现算法的白盒版本。这些解决方案中的一些解决方案已在实践中被证明至少在防止密钥窃取方面非常有效。但是,它们并未明显减轻的一个问题是支持新算法需要的工作量。这仍是一个需要大量专业知识的相对手动过程。在常见使用中的有限数量算法的情况下,这可能看似不是严重问题,并且实际上,对于仅需要静态密钥的用例而言并不是问题,但对于需要动态密钥的用例而言确实造成问题。静态密钥是当生成白盒实现时知道的密钥,并且是白盒解决方案的基本元素-产生白盒的过程基本上涉及以难以导出密钥值的形式,将静态密钥嵌入到加密算法的某一版本中。动态密钥是仅在运行时才知道的密钥,这意味着动态密钥被传递到白盒而不是已经被嵌入白盒中,这违反了白盒的固有静态性质。为了适应动态密钥,一个简单解决方案是使用另一个密钥(并且可能使用不同算法)对密钥加密,其中该另一个密钥变成嵌入白盒中的静态密钥。然后使用白盒对真实密钥解密,该真实密钥然后与标准算法一起使用以便执行最初预期的操作。该简单解决方案的问题是当对真实密钥被解密时将在存储器中暴露真实密钥,这部分地违背了起初使用白盒的目的。现有解决方案已尝试通过
以下操作减轻该问题:组合操作序列并且通过通用混淆机制使结果混淆,以便更难隔离暴露真实密钥的点。这表示当应用于动态密钥时,对此类解决方案的效用的显著妥协。现有解决方案的另一个主要问题是它们并未解决针对白盒实现的特定类别攻击,这些攻击通常称为提升攻击(lifting attack),然而更准确的名称将是上下文外(out-of-context)攻击。上下文外攻击是这样的攻击:其中攻击者使用白盒实现以便代表他们执行加密操作,而不必曾经知道密钥的值。在实践中,如果没有针对该类攻击的特定防御,则白盒实现可能不比标准实现提供更多的安全性。为了在现实世界中提供足够的加密操作保护,因此需要具有这样的白盒实现:它们在没有明显削弱保护的情况下支持动态密钥,并且防止提升攻击。
技术实现思路
本公开描述一种直接从标准(非白盒)实现的源代码自动生成任意加密算法的白盒实现的方法。由该方法生成的白盒实现被设计为防止机密数据(例如密钥)被暴露或者由对包含所述实现的程序具有完全访问和控制权的攻击者以其它方式导出。本公开还描述一种生成白盒实现的方法,其中所述机密数据是动态的,即仅在运行时已知。这实现为所述第一种方法转换任意算法的能力的逻辑扩展,由此以支持使用动态机密而不在所述白盒外部暴露它们的形式,将两个加密算法组合成单个白盒实现。最后,本公开描述一种防止在上下文外使用白盒实现,即防止白盒实现直接由攻击者调用以便用于恶意目的而不是由应用调用以便用于其预期目的的方法。尽管本公开的方法的主要目的是生成加密算法的白盒实现,但所述方法本身并不限于针对加密算法操作,尽管它们针对其它算法的效用将依赖
于这些算法与加密算法共享多少个属性。具体地说,针对运行时输入数据具有高度确定性的算法通常将产生最有效的结果。各实施例涉及一种生成以存储在存储器中的代码形式表达的算法的受保护实现的计算机实现的方法,所述方法包括:将实现所述算法的原始源代码扩展成单个真实操作集;将使用真实数据的每个真实操作与每个真实操作所使用的真实数据相组合,以获得以这样的方式表示的组合:该方式以不同于原始形式的形式使用实际真实数据片段;产生应用于引诱数据的表示所述算法的备选实现的重复和变异引诱操作集;将所述引诱操作集与包括所述组合的所述真实操作集相组合,以便获得其中所述引诱操作与所述真实操作和由所述真实操作处理的所述真实数据交互的实现,以使得难以分析所述实现中的真实数据流;以及将所述实现变换成被存储在所述存储器中并且能够被执行的结果代码。根据一个实施例,所述算法是加密算法并且所述真实数据包括机密数据。根据一个实施例,扩展所述算法包括:由仿真器执行所述原始源代码,并且记录正在被执行的操作、发生的控制流改变以及发生的对存储器的改变;通过由所述仿真器使用不同运行时输入多次执行所述原始源代码并且将这些执行的结果组合成所述真实操作集来恢复在执行期间未被执行的代码;以及由所述仿真器通过将在所述执行期间未被执行的缺失代码注入所述真实操作集中来协调所述缺失代码。根据一个实施例,扩展所述算法包括产生对所述真实操作集中的操作与在所述真实操作间流动的数据值之间的数据依赖性建模的数据依赖性图。根据一个实施例,扩展所述算法包括消除所述真实操作集中产生静态已知值的操作,所述产生静态已知值的操作包括针对所述真实数据的操作,以使得所述真实数据的每个部分仅以最终导出形式存在并尽可能深入地被传播到结果真实操作集中。根据一个实施例,扩展所述算法包括减小所述真实操作集的大小,方
式为:消除通过所述仿真器的执行生成的所述真实操作集的一部分内联函数代码和展开循环,使用来自所述原始源代码的函数调用和循环替换这些内联函数代码和展开循环,使用为函数和基本块分配得分的决策模型,本文档来自技高网
...

【技术保护点】
一种生成以存储在存储器中的代码形式表达的算法的受保护实现的计算机实现的方法,所述方法包括:将实现所述算法的原始源代码扩展成单个真实操作集;将使用真实数据的每个真实操作与每个真实操作所使用的真实数据相组合,以获得以这样的方式表示的组合:该方式以不同于原始形式的形式使用实际真实数据片段;产生应用于引诱数据的表示所述算法的备选实现的重复和变异引诱操作集;将所述引诱操作集与包括所述组合的所述真实操作集相组合,以便获得其中所述引诱操作与所述真实操作和由所述真实操作处理的所述真实数据交互的实现,以使得难以分析所述实现中的真实数据流;以及将所述实现变换成被存储在所述存储器中并且能够被执行的结果代码。

【技术特征摘要】
【国外来华专利技术】2014.01.21 GB 1400992.21.一种生成以存储在存储器中的代码形式表达的算法的受保护实现的计算机实现的方法,所述方法包括:将实现所述算法的原始源代码扩展成单个真实操作集;将使用真实数据的每个真实操作与每个真实操作所使用的真实数据相组合,以获得以这样的方式表示的组合:该方式以不同于原始形式的形式使用实际真实数据片段;产生应用于引诱数据的表示所述算法的备选实现的重复和变异引诱操作集;将所述引诱操作集与包括所述组合的所述真实操作集相组合,以便获得其中所述引诱操作与所述真实操作和由所述真实操作处理的所述真实数据交互的实现,以使得难以分析所述实现中的真实数据流;以及将所述实现变换成被存储在所述存储器中并且能够被执行的结果代码。2.如权利要求1所述的方法,其中所述算法是加密算法并且所述真实数据包括机密数据。3.如权利要求1或2所述的方法,其中扩展所述算法包括:由仿真器执行所述原始源代码,并且记录正在被执行的操作、发生的控制流改变以及发生的对存储器的改变;通过由所述仿真器使用不同运行时输入多次执行所述原始源代码并且将这些执行的结果组合成所述真实操作集来恢复在执行期间未被执行的代码;以及由所述仿真器通过将在所述执行期间未被执行的缺失代码注入所述真实操作集中来协调所述缺失代码。4.如权利要求1至3中的一项所述的方法,其中扩展所述算法包括产生对所述真实操作集中的操作与在所述真实操作间流动的数据值之间的数据依赖性建模的数据依赖性图。5.如权利要求3或4所述的方法,其中扩展所述算法包括消除所述真实操作集中产生静态已知值的操作,所述产生静态已知值的操作包括针对所述真实数据的操作,以使得所述真实数据的每个部分仅以最终导出形式存在并尽可能深入地被传播到结果真实操作集中。6.如权利要求3至5中的一项所述的方法,其中扩展所述算法包括减小所述真实操作集的大小,方式为:消除通过所述仿真器的执行生成的所述真实操作集的一部分内联函数代码和展开循环,使用来自所述原始源代码的函数调用和循环替换这些内联函数代码和展开循环,使用为函数和基本块分配得分的决策模型,所述得分表示与通过这种消除发生的真实数据传播损失的成本相对的通过消除内联和/或展开获得的收益水平。7.如权利要求1至6中的一项所述的方法,其中扩展所述算法包括:将涉及导出的真实数据的所述源代码的原始操作拆分成多个新操作,以使得每个新操作使用一段所述导出的真实数据;将各段所述导出的真实数据变换成产生各段所述导出的真实数据块的唯一操作子集,其中这些操作子集使用在运行时生成的序列敏感数据值;以及将所述操作子集插入到所述真实操作集中。8.如权利要求1至7中的一项所述的方法,其中产生重复和变异引诱操作集包括多次重复扩展步骤以便产生多个引诱操作集,其中为每个引诱操作集供应随机生成的数据而不是所述真实数据,以便产生表示所述算法的备选虚假实现的多个引诱操作集。9.如权利要求1至8中的一项所述的方法,其中将所述引诱操作集与所述真实操作集相组合包括:使来自每个集合的操作与来自所有其它操作集的操作相交错以获得组合集,使得当所述组合集被执行时,同时有效地执行所有操作集;以及通过逐渐选择多组操作并且通过将每个输出转发到正确接收操作的新生成的路由操作路由所述多组操作的输出,将来自所述组合集中不同集合的操作的数据流彼此合并,由此使用唯一生成的不透明表达式来构造路由
\t操作,所述唯一生成的不透明表达式使用在运行时生成的序列敏感数据值。10.如权利要求1至9中的一项所...

【专利技术属性】
技术研发人员:N·斯图尔特
申请(专利权)人:麦塔福里克有限公司
类型:发明
国别省市:英国;GB

相关技术
    暂无相关专利
网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1