一种针对分组密码的代数持久性故障分析方法及装置

文档序号:28956741发布日期:2022-02-19 11:58阅读:163来源:国知局
一种针对分组密码的代数持久性故障分析方法及装置

1.本技术涉及通信与信息安全领域,尤其涉及一种针对分组密码的代数持久性故障分析方法及装置。


背景技术:

2.分组密码算法是密码学当中一个重要的领域,它被广泛地应用于智能卡等商用设备中。目前广泛使用的诸如高级加密标准(advanced encryption standard),present等常见密码算法都有着极高的理论安全性能,传统的密码学分析方法很难对这些算法产生实质性的威胁。
3.对于分组密码,故障攻击是一类常见的攻击方式。故障攻击通过改变密码系统的运行条件,或是施加外部干扰使得密码算法的运行出错,进而获取到密码系统内部的敏感信息。按照实施过程,故障攻击可以分为两个阶段。第一阶段被称为故障注入阶段,该阶段攻击者需要对密码设备的运行进行干扰并使其出错,常见的故障注入手段包括电磁、激光、电压以及时钟毛刺等等。第二阶段被称为故障分析阶段,该阶段中攻击者对带有故障的密码设备的输出进行分析,从而推测出密码系统中的敏感信息。
4.常见的故障分析手段有dfa(差分故障分析)、afa(代数故障分析)、sfa(统计故障分析)等。对故障存在时间进行分类时可以分为瞬时故障(transient fault)、永久故障(permanent fault)和持久故障(persistent fault)等,其中,大多数传统的故障攻击方法多是针对于瞬时故障。
5.在2018年ches上张帆等人提出了pfa(持久性故障分析),持久性故障指在密码设备中持久性存在的故障但在设备重启时会消失。该分析方法会在分组密码的s盒中注入故障,使得s盒中某一项值发生改变,从而导致s盒的输出分布变得不再均匀。和分别表示s盒故障位置的原值和改变后的值,其有关系,其中表示故障差分值。假设密码算法的最后一轮为s盒的输出与密钥异或后得到故障密文。
6.由于s盒被注入了故障,导致s盒输出的一种输出不会再出现,即。在密钥保持不变的情况下,收集足够多的密文时,可以通过对密钥搜索空间大小进行缩减至一,即为真实密钥值。
7.在实现本发明的过程中,发明人发现pfa作为一种新的对分组密码进行故障分析的方法,其仍存在以下弊端:pfa需要大量故障密文,这在实际攻击场景中操作性较低;pfa故障注入位置和故障值的识别较难。


技术实现要素:

8.本技术实施例的目的是提供一种针对分组密码算法的代数持久性故障分析方法及装置,以解决pfa需要大量故障密文,这在实际攻击场景中操作性较低,pfa故障注入位置
和故障值的识别较难的技术问题。
9.根据本技术实施例的第一方面,提供一种针对分组密码的代数持久性故障分析方法,包括:对分组密码进行故障注入,得到含有故障的目标密码;将随机明文输入所述目标密码,得到故障密文;利用所述故障密文,获得故障值;根据所述故障值,为每条所述故障密文构建倒数轮的加密代数方程,并为所述加密代数方程添加对应的密钥约束代数方程;对所述加密代数方程进行求解,得到加密主密钥。
10.进一步地,对分组密码进行故障注入,得到含有故障的目标密码,包括:选择一个分组密码作为目标,使用故障注入技术对所述目标密码进行故障注入,得到含有故障的目标密码,所述故障包括故障值和故障位置。
11.进一步地,将随机明文输入所述目标密码,得到故障密文,包括:选取预定量随机明文输入所述目标密码,通过所述目标密码在含有故障的情况下加密所述随机明文,得到故障密文。
12.进一步地,利用所述故障密文,获得故障值,包括:利用所述故障密文,将故障密文通过最大似然函数估计出故障值,其中所述最大似然函数如下:其中表示故障值,表示故障候选值;表示故障密文中共有个元素,表示故障密文的第个元素,为元素的比特个数;表示中出现的次数;为克罗内克函数,满足:。
13.进一步地,根据所述故障值,为每条所述故障密文构建倒数轮的加密代数方程,并为所述加密代数方程添加对应的密钥约束代数方程,包括:根据所述目标密码,分析目标密码轮函数的组成;根据所述目标密码轮函数组成为轮函数中的线性加层建立第一方程;根据所述目标密码轮函数组成和故障值,通过枚举故障位置为轮函数中的替换层建立第二方程;根据所述目标密码轮函数组成为轮函数中的置换层建立第三方程;根据所述目标密码,将第一、第二、第三方程进行组合,为所述目标密码的轮函数建立第四方程;根据所述目标密码以及所述第四方程,建立倒数轮的加密方程;根据所述目标密码,为倒数轮中的轮密钥添加密钥约束方程;根据所述故障密文,为所述加密方程表示输出密文的变量赋值。
14.进一步地,根据所述目标密码,为倒数轮中的轮密钥添加密钥约束方程,包括:利用如下代数方程为密钥添加约束:其中,为元素的比特个数;为新增的中间变量,为s盒故障位置的原值的第个比特;和分别是通过轮密钥加后的变量和轮密钥经过逆置换层函数的第个比特。
15.进一步地,对所述加密代数方程进行求解,得到加密主密钥,包括:根据所述加密代数方程,将其输入至代数解析器当中并调用代数解析器进行求解;根据所述求解结果,恢复目标密码加密所使用的主密钥。
16.根据本技术实施例的第二方面,提供一种针对分组密码算法的代数持久性故障分析装置,包括:注入模块,用于对分组密码进行故障注入,得到含有故障的目标密码;加密模块,用于将随机明文输入所述目标密码,得到故障密文;计算模块,用于利用所述故障密文,获得故障值;分析模块,用于根据所述故障值,为每条所述故障密文构建倒数轮的加密代数方程,并为所述加密代数方程添加对应的密钥约束代数方程;求解模块,用于对所述加密代数方程进行求解,得到加密主密钥。
17.本技术的实施例提供的技术方案可以包括以下有益效果:由上述实施例可知,本技术引入了代数用于建立目标密码的倒数多轮加密方程,并且为倒数多轮添加了对应的密钥约束代数方程。与pfa相比,引入代数能够使用多轮故障泄露信息,进而能够减少所需密文的数量;本技术采用了pfa与代数相结合的方法,解决了原始pfa需要大量密文的缺点,进而在较少数量的密文下就能恢复主密钥,并提高故障分析效率;本技术同样引入了最大似然估计方法,解决了原始pfa在实践中难以识别具体故障的问题,进而能够提高持久性故障攻击的实用性。本技术使用的是基于代数的求解方法,对平台和目标算法没有限制,适用于各种场景下的分组密码持久性故障攻击。
18.应当理解的是,以上的一般描述和后文的细节描述仅是示例性和解释性的,并不能限制本技术。
附图说明
19.此处的附图被并入说明书中并构成本说明书的一部分,示出了符合本技术的实施例,并与说明书一起用于解释本技术的原理。
20.图1是根据本发明实施例的一种针对分组密码的代数持久性故障分析方法的流程图。
21.图2是根据本发明实施例的分组密码轮函数组成图。
22.图3是根据本发明实施例的分组密码故障泄露利用图。
23.图4是根据本发明实施例的一种针对分组密码的代数持久性故障分析装置的框图。
具体实施方式
24.这里将详细地对示例性实施例进行说明,其示例表示在附图中。下面的描述涉及附图时,除非另有表示,不同附图中的相同数字表示相同或相似的要素。以下示例性实施例中所描述的实施方式并不代表与本技术相一致的所有实施方式。相反,它们仅是与如所附权利要求书中所详述的、本技术的一些方面相一致的装置和方法的例子。
25.在本技术使用的术语是仅仅出于描述特定实施例的目的,而非旨在限制本技术。在本技术和所附权利要求书中所使用的单数形式的“一种”、“所述”和“该”也旨在包括多数形式,除非上下文清楚地表示其他含义。还应当理解,本文中使用的术语“和/或”是指并包含一个或多个相关联的列出项目的任何或所有可能组合。
26.应当理解,尽管在本技术可能采用术语第一、第二、第三等来描述各种信息,但这些信息不应限于这些术语。这些术语仅用来将同一类型的信息彼此区分开。例如,在不脱离本技术范围的情况下,第一信息也可以被称为第二信息,类似地,第二信息也可以被称为第一信息。取决于语境,如在此所使用的词语“如果”可以被解释成为“在
……
时”或“当
……
时”或“响应于确定”。
27.图1是根据一示例性实施例示出的一种针对分组密码的代数持久性故障分析方法的流程图,如图1所示,可以包括以下步骤:步骤s11,对分组密码进行故障注入,得到含有故障的目标密码;步骤s12,将随机明文输入所述目标密码,得到故障密文;步骤s13,利用所述故障密文,获得故障值;步骤s14,根据所述故障值,为每条所述故障密文构建倒数轮的加密代数方程,并为所述加密代数方程添加对应的密钥约束代数方程;步骤s15,对所述加密代数方程进行求解,得到加密主密钥。
28.由上述实施例可知,本技术引入了代数用于建立目标密码的倒数多轮加密方程,并且为倒数多轮添加了对应的密钥约束代数方程。与pfa相比,引入代数能够使用多轮故障泄露信息,进而能够减少所需密文的数量;本技术采用了pfa与代数相结合的方法,解决了原始pfa需要大量密文的缺点,进而在较少数量的密文下就能恢复主密钥,并提高故障分析效率;本技术同样引入了最大似然估计方法,解决了原始pfa在实践中难以识别具体故障的问题,进而能够提高持久性故障攻击的实用性。本技术使用的是基于代数的求解方法,对平台和目标算法没有限制,适用于各种场景下的分组密码持久性故障攻击。
29.在步骤s11的具体实施中,对分组密码进行故障注入,得到含有故障的目标密码;具体地,选择一个分组密码作为目标,使用故障注入技术对所述目标密码进行故障注入,得到含有故障的目标密码,所述故障包括故障值和故障位置。
30.更具体地,选择一个含有目标分组密码的软件或硬件,采用rowhammer或其他故障注入技术对该目标密码注入单故障,其中故障值为,故障位置为。使得s盒的第个元素发生故障,假设第个故障的原值为,注入故障后的故障值为,其中。
31.在步骤s12的具体实施中,将随机明文输入所述目标密码,得到故障密文;具体地,选取预定量随机明文输入所述目标密码,通过所述目标密码在含有故障的情况下加密所述随机明文,得到故障密文。
32.更具体地,将预定量的随机明文输入到所述含有故障的目标密码中,目标密码在固定密钥下加密所述随机明文,并输出同样数量的故障密文。收集所述故障密文,故障密文含有个元素,每个元素含有个比特。
33.在步骤s13的具体实施中,利用所述故障密文,获得故障值;具体地,利用所述故障密文,将故障密文通过最大似然函数估计出故障值,其中所述最大似然函数如下:其中表示故障值,表示故障候选值;表示故障密文中共有个元素,表示故障密文的第个元素,为元素的比特个数;表示中出现的次数;为克罗内克函数,满足:。
34.更具体地,通过对故障密文中每一个元素上出现过的值进行统计,存入二维数组,表示故障密文的第个元素出现的值为的个数。对于每个的值,并计算在该值下的结果。在所有中能够使得的结果最大的即为故障值。
35.使用最大似然估计能够在较少数量的密文下先恢复出故障值,使得故障值能够用于后续的分析当中。
36.在步骤s14的具体实施中,根据所述故障值,为每条所述故障密文构建倒数轮的加密代数方程,并为所述加密代数方程添加对应的密钥约束代数方程,包括以下子步骤:(1)根据所述目标密码,分析目标密码轮函数的组成;具体地,由图2可知分组密码的轮函数一般可以分为三层:线性加层、替换层、置换层。其中线性加层可以分为与密钥异或的密钥加层以及与常数异或的常数加层。另外将逆置换层记作。其中参与每层运算的数据块为,和分别表示的一个比特和一个元素(一个元素有个比特)。上述三者关系如下:其中为数据块的长度。
37.(2)根据所述目标密码轮函数组成为轮函数中的线性加层建立第一方程;具体地,令分别表示线性加层中的输入和输出的第个比特,表示子密钥的第个比特,所对应的代数方程可表示为:
表示常数加层时,所对应的代数方程可以表示为:其中为常数的第个比特。
38.(3)根据所述目标密码轮函数组成和故障值,通过枚举故障位置为轮函数中的替换层建立第二方程;具体地,令分别表示s盒的输入和输出,根据s盒的真值表可以构建出和的代数正规型(algebraic normal form, anf)的形式,anf的通项为:其中为的第个比特,为anf系数,取值为,为变量的比特个数。
39.以present加密算法的s盒为例,得到的anf如下:以present加密算法的s盒为例,得到的anf如下:以present加密算法的s盒为例,得到的anf如下:以present加密算法的s盒为例,得到的anf如下:对上述anf中的幂次大于1的项需要进行降幂处理,引入1个新变量来表示anf通项中的第项。通过以下cnf子句可以用表示anf的第项:其中和分别表示取反。
40.更进一步的,使用变量来表示anf,那么所示present的s盒可以表示为:来表示anf,那么所示present的s盒可以表示为:来表示anf,那么所示present的s盒可以表示为:来表示anf,那么所示present的s盒可以表示为:其中数字表示相应变量的下标。
41.(4)根据所述目标密码轮函数组成为轮函数中的置换层建立第三方程;具体地,置换层可以分为基于比特的置换以及基于mds矩阵乘法的置换。基于比特的置换操作一般由置换表参与置换,例如present加密算法的bitpermutaion,其置换表可以表示为。基于单比特的置换可以用如下代数方程表示:基于mds矩阵乘法的置换,其一般通过在有限域上的乘法操作来实现,例如led的mixcolumnsserial,其用如下式子表示置换:
其中可以表示为。
42.由此可见和之间所乘的常数是固定的,对于每一个常数,为其建立和的关系。
43.(5)根据所述目标密码,将第一、第二、第三方程进行组合,为所述目标密码的轮函数建立第四方程;具体地,根据所述目标密码轮函数的结构,将第一、第二、第三方程进行组合,例如present的轮函数可以表示为:其中分别表示第轮的输入变量以及轮密钥,且共有轮的轮函数。
44.(6)根据所述目标密码以及所述第四方程,建立倒数轮的加密方程;具体地,根据所述目标密码一轮轮函数的结构以及第四方程,为倒数轮轮函数建立方程。
45.(7)根据所述目标密码,为倒数轮中的轮密钥添加密钥约束方程;根据所述目标密码,为倒数轮中的轮密钥添加密钥约束方程,包括:利用如下代数方程为密钥添加约束:利用如下代数方程为密钥添加约束:其中,为元素的比特个数;为新增的中间变量,为s盒故障位置的原值的第个比特;和分别是通过轮密钥加后的变量和轮密钥经过逆置换层函数的第个比特。
46.具体地,请参阅图3,图3为本技术倒数轮中每轮可添加的密钥约束方程示意图。
47.如图3所示,倒数轮中,每一轮都可以为当前轮密钥添加密钥约束方程。这样可以在使用代数的情况下,利用持久性故障中的多轮故障泄露,提高故障的利用率,从而减少使用的密文数量。
48.(8)根据所述故障密文,为所述加密方程表示输出密文的变量赋值。
49.具体地,对所述倒数轮加密方程中表示输出密文的变量,使用实际收集到的故障密文进行赋值。故障密文中的第个比特为0时,加密方程中表示密文的变量赋值为0,反之赋值为1。通过这步可以将实际故障密文与代数方程相联系。
50.在步骤s15的具体实施中,对所述加密代数方程进行求解,得到加密主密钥;(1)根据所述加密代数方程,将其输入至代数解析器当中并调用代数解析器进行求解;
具体地,本技术基于可满足性(sat)问题的cryptominisat解析器。本技术采用python下pycryptosat库,首先创建求解器的对象,再将代数方程传入对象中,最后调用对象内置解析器进行求解。
51.(3)根据所述求解结果,恢复目标密码加密所使用的主密钥。
52.具体地,使用上述sat求解器进行求解后,其方程变量中用来表示主密钥的变量结果即为目标密码在加密时所使用的主密钥。
53.与前述的一种针对分组密码算法的代数持久性故障分析方法的实施例相对应,本技术还提供了一种针对分组密码算法的代数持久性故障分析装置的实施例。
54.图4是根据一示例性实施例示出的一种针对分组密码的代数持久性故障分析方法装置框图。参照图4,该装置包括:注入模块21,用于对分组密码进行故障注入,得到含有故障的目标密码;加密模块22,用于将随机明文输入所述目标密码,得到故障密文;计算模块23,用于利用所述故障密文,获得故障值;分析模块24,用于根据所述故障值,为每条所述故障密文构建倒数轮的加密代数方程,并为所述加密代数方程添加对应的密钥约束代数方程;求解模块25,用于对所述加密代数方程进行求解,得到加密主密钥。
55.关于上述实施例中的装置,其中各个模块执行操作的具体方式已经在有关该方法的实施例中进行了详细描述,此处将不做详细阐述说明。
56.对于装置实施例而言,由于其基本对应于方法实施例,所以相关之处参见方法实施例的部分说明即可。以上所描述的装置实施例仅仅是示意性的,其中所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本技术方案的目的。本领域普通技术人员在不付出创造性劳动的情况下,即可以理解并实施。
57.相应的,本技术还提供一种电子设备,包括:一个或多个处理器;存储器,用于存储一个或多个程序;当所述一个或多个程序被所述一个或多个处理器执行,使得所述一个或多个处理器实现如上述的一种针对分组密码的代数持久性故障分析方法。
58.相应的,本技术还提供一种计算机可读存储介质,其上存储有计算机指令,其特征在于,该指令被处理器执行时实现如上述的一种针对分组密码的代数持久性故障分析方法。
59.本领域技术人员在考虑说明书及实践这里公开的内容后,将容易想到本技术的其它实施方案。本技术旨在涵盖本技术的任何变型、用途或者适应性变化,这些变型、用途或者适应性变化遵循本技术的一般性原理并包括本技术未公开的本技术领域中的公知常识或惯用技术手段。说明书和实施例仅被视为示例性的,本技术的真正范围和精神由权利要求指出。
60.应当理解的是,本技术并不局限于上面已经描述并在附图中示出的精确结构,并且可以在不脱离其范围进行各种修改和改变。本技术的范围仅由所附的权利要求来限制。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1