将掩蔽自动插入到算法中制造技术

技术编号:18898726 阅读:33 留言:0更新日期:2018-09-08 13:37
用于将算法的调用图表示变换成所述算法的受保护调用图表示的计算机实现的方法、程序产品以及实现所述方法的系统。调用图包括输入(a,b,f)、作为图的边(c,d,e)的内部变量、作为图的节点的基本函数,所述函数是线性的或非线性的,并且包括输出(g),该方法包括:‑对调用图的每个输入进行掩蔽的步骤,‑用经掩蔽的变量替代调用图的每个未掩蔽的内部变量的步骤,‑用适用于经掩蔽的变量的等价函数至少替代调用图的每个非线性函数的步骤,‑对调用图的每个输出解除掩蔽的步骤。

Automatically insert masking into the algorithm.

A computer-implemented method, program product, and system for converting the call graph representation of an algorithm into a protected call graph representation of the algorithm. The call graph includes input (a, b, f), internal variables as edges (c, d, e) of the graph, and basic functions as nodes of the graph. The functions are linear or nonlinear, and include output (g). The method includes: (1) the step of masking each input of the call graph, (2) replacing each of the call graphs with masked variables Steps for each unmasked internal variable, steps for substituting at least each nonlinear function of the call graph with an equivalent function applicable to the masked variable, steps for de-masking each output of the call graph.

【技术实现步骤摘要】
将掩蔽自动插入到算法中
本专利技术应用于密码领域,并且更具体地涉及用于对针对边信道攻击的算法的实现进行保护的方法。
技术介绍
涉及对敏感数据加密的现有加密算法提供了针对密码分析和内容恢复攻击的有效鲁棒性。这些技术被称为“黑盒技术”,因为攻击者只知道加密算法的输入和输出。大多数加密算法是标准化的,其中已知使用最多的一种算法是高级加密标准(AES)。加密的机密性基于共享的秘密加密密钥。攻击者忽略秘密密钥的最佳选择是尝试所有可能的组合(蛮力解码)。当密钥是128位或256位长的时,所需的迭代次数使得蛮力解码在计算上非常难以管理。然而,被称为边信道攻击(SCA)的一些攻击给予攻击者基于从加密算法的物理实现泄漏的信息(如定时信息、功耗、电磁泄漏等)取回在加密算法中执行的秘密信息的机会。因此,首要需求是提供用于保护敏感算法的实现免受这种攻击的方法。任何算法都可以被表示为运算图或调用图,其为有向图,其中每个节点是函数并且每个边是中间变量(也被称为内部变量)。该调用图也可以被称为数据流图或控制流图。函数可以是单个运算或运算的线性或非线性的组合。函数是没有任何跳转的一段直线型代码。当函数包含多个操作数时,其可以分解成多个一元或二元操作数。典型的运算是可以在给定技术中实现的运算。例如,软件程序可以计算算术和逻辑运算,例如,加法(“+”)或异布尔OR(“XOR”)。数字信号处理器(DSP)或现场可编程门阵列(FPGA)可以使用MAC单元(累乘-累加)来计算在查找表(LUT)或算术运算中实现的任何函数。专用集成电路(ASIC)可以利用标准单元库来计算任何类型的运算。函数可以用高级语言来表达,但是也可以映射为一系列运算。编译器的职责是将这种潜在地用高级语言描述的函数变换成机器语言,从而优化处理时间和资源消耗。表示算法的图是有向图:每个节点或函数具有与输入变元一样多的进入边以及与输出结果一样多的引出边。例如,如果函数仅是二元运算(存在两个变元和一个结果),则存在两个输入和一个输出。边承载从节点传递到节点的类型化变量。该类型可以是字节、32位字等。本专利技术的目的是考虑被描述为调用图的敏感算法(例如,密码算法),并且对该算法进行变换以便保护其免受边信道攻击,而不管算法的类型或者对其实现的任何考虑。为了增加算法针对边信道攻击的鲁棒性,已知的是对算法的敏感数据进行掩蔽。掩蔽的一个示例是基于秘密共享,其在于将初始变量分开在多个新变量中,以使得新变量的总和产生初始变量。总和必须根据变量的根本类型来理解。例如,当变量是字节时,总和可以是按位XOR,或者是模256加法。当影响经掩蔽的数据的运算是线性函数时,可以根据经掩蔽的输入来计算函数的经掩蔽的输出的值。然而,当函数是非线性的时(例如,幂函数、密码算法的替换盒……),掩码计算可能是不可能的。必须在函数的输入处移除掩码,并且在函数的输出处插入新的掩码。各种掩蔽技术是已知的,其中一些已被证实。这些掩蔽技术适用于直线型程序,其为线性调用图。掩蔽在于链接运算,其中在适当的时候在运算之间随机地重新共享(或刷新)掩码。然而,当图不在一条直线上时可能会出现一些漏洞。在M.Rivain和E.Prouff的Provablysecurehigher-ordermaskingofAES(CHES2010,第413-427页)中给出了完整的经掩蔽的AES算法。在本文中,描述了对特定线性函数和非线性函数的掩蔽,并且函数被链接以便描述完整的AES算法。然而,如在JE.Coron、E.Prouff、M.Rivain以及T.Roche的High-OrderSideChannelSecurityandMaskRefreshing(FSE2013,第11-13页)中所指示的,即使利用专门用于AES算法的方法,也会出现一些实现问题。这些实现问题来自一些变量的重用,因此实现的安全性级别降低。因此,如今大多数掩蔽实现方式是手动完成的,这容易出现实现错误(例如,敏感变量未被掩蔽)。只有少数研究考虑自动掩蔽。在这些研究中有A.Moss、E.Oswald的Compilerassistedmasking,CryptographicHardwareandEmbeddedSystems(CHES2012,第58-75页)的文章。在这篇文章中,敏感数据由程序员注释,并且其秘密性被视为允许编译器通过程序传播秘密性信息的网格中的值。一旦被编译,秘密数据在程序执行期间永远不会以明文形式出现,从而保证了经掩蔽的数据的秘密性,特别是针对边信道攻击。该算法然后执行在程序中的每个值中搜索敏感信息泄漏的步骤,特别是在转换表达式时引入的临时变量中,并且当发生泄漏时尝试使用一组程序变换来防止泄漏。该文章中揭示的解决方案的缺点是其仅适用于一阶布尔掩蔽方案和直线型代码。此外,搜索泄漏和对程序进行变换以防止这种泄漏的步骤不一定收敛。在EldibH.、WangC.的Synthesisofmaskingcountermeasuresagainstsidechannelattacks,Computeraidedverification(第114-130页,SpringerInternationalPublishing,2014年1月)中,提出了对整个算法进行掩蔽,包括所有中间值。为了处理非线性函数,提出了确定在功能上等价的线性函数,并且验证该函数对于所有可能的输入等价并且被完美地掩蔽。该方法具有与Moss等人的方法类似的缺点,因为其仅适用于布尔类型的调用图,这将范围缩小到硬件实现。另外,该方法遵循反复试验方法,其执行时间不被保证。因此,存在对于将未受到保护的算法变换成所述算法的安全版本的完全自动且鲁棒方法的更精确的需求。
技术实现思路
为了解决这个问题和其他问题,提供了用于将算法的调用图表示变换成所述算法的受保护调用图表示的计算机实现的方法。调用图包括一个或多个输入、一个或多个边(c,d,e)、一个或多个节点(P,Q,R,S)以及一个或多个输出(g)。调用图的边表示所述算法的内部变量(或中间变量),并且调用图的节点表示算法的线性基本函数或非线性基本函数。根据本专利技术的计算机实现的方法包括:·对调用图的每个输入进行掩蔽的步骤,·用经掩蔽的变量替代调用图的每个未掩蔽的内部变量的步骤,·用适用于经掩蔽的变量的等价函数至少替代调用图的每个非线性函数的步骤,·对调用图的每个输出解除掩蔽的步骤。该方法有利地适用于线性调用图和非线性调用图,具有有限且确定的执行时间,并且不限于布尔类型的运算。将未受到保护的算法变换成所述算法的安全版本满足两个要求的性质:·保留语义,即,与原始程序相比,从一组确定的输入获得相同的结果,以及·对所有中间变量(即,由顶点携带的变量)进行掩蔽。当调用图包括被迭代地处理的部分时,可以通过以下操作来确保用经掩蔽的内部变量替代未掩蔽的内部变量的步骤:对用作调用图的被迭代地处理的部分的输入和输出两者的内部变量进行识别,以及针对这些变量在调用图的所述部分的输入中和输出中使用相同的掩码。可替代地,可以通过以下操作来确保用经掩蔽的内部变量替代未掩蔽的内部变量的步骤:对用作调用图的被迭代地处理的部分的输入和输出两者的内部变量进行识别,以及在所述迭代部分的反馈边中插入用于对所述内部变量本文档来自技高网
...

【技术保护点】
1.一种用于将算法的调用图表示变换成所述算法的受保护调用图表示的计算机实现的方法,所述调用图包括至少一个输入(a,b,f)、至少一个边(c,d,e)、至少一个节点(P,Q,R,S)以及至少一个输出(g),所述调用图的边表示所述算法的内部变量,所述调用图的节点表示所述算法的线性基本函数或非线性基本函数,所述计算机实现的方法包括:‑对所述调用图的每个输入进行掩蔽的步骤(601),‑用经掩蔽的变量替代所述调用图的每个未掩蔽的内部变量的步骤(602),‑用适用于经掩蔽的变量的等价函数至少替代所述调用图的每个非线性函数的步骤(603),‑对所述调用图的每个输出解除掩蔽的步骤(604)。

【技术特征摘要】
2017.02.24 EP 17305202.81.一种用于将算法的调用图表示变换成所述算法的受保护调用图表示的计算机实现的方法,所述调用图包括至少一个输入(a,b,f)、至少一个边(c,d,e)、至少一个节点(P,Q,R,S)以及至少一个输出(g),所述调用图的边表示所述算法的内部变量,所述调用图的节点表示所述算法的线性基本函数或非线性基本函数,所述计算机实现的方法包括:-对所述调用图的每个输入进行掩蔽的步骤(601),-用经掩蔽的变量替代所述调用图的每个未掩蔽的内部变量的步骤(602),-用适用于经掩蔽的变量的等价函数至少替代所述调用图的每个非线性函数的步骤(603),-对所述调用图的每个输出解除掩蔽的步骤(604)。2.根据权利要求1所述的计算机实现的方法,其中,所述调用图包括被迭代地处理的部分,用经掩蔽的内部变量替代未掩蔽的内部变量的步骤(602)包括对用作所述调用图的被迭代地处理的部分的输入和输出两者的内部变量(b,g)进行识别,以及针对这些变量在所述调用图的所述部分的输入和输出中使用相同的掩码(m2)。3.根据权利要求1所述的计算机实现的方法,其中,所述调用图包括被迭代地处理的部分,用经掩蔽的内部变量替代未掩蔽的内部变量的步骤(602)包括对用作所述调用图的被迭代地处理的部分的输入和输出两者的内部变量(b,g)进行识别,以及在所述迭代部分的反馈边中插入用于对所述内部变量的掩码进行修改的附加节点(120)。4.根据前述权利要求中任一项所述的计算机实现的方法,其中,所述调用图的被迭代地处理的部分中的内部变量的掩码以定期的间隔被改变,并且相关联的函数被相应地修改。5.根据权利要求4所述的计算机实现的方法,还包括在所述调用图中插入用于对所述迭代部分的内部变量的掩码...

【专利技术属性】
技术研发人员:P·阮S·吉耶
申请(专利权)人:智能IC卡公司
类型:发明
国别省市:法国,FR

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

1