SHA‑256散列算法抵御差分故障攻击的检测方法与流程

文档序号:12691847阅读:426来源:国知局
SHA‑256散列算法抵御差分故障攻击的检测方法与流程

本发明涉及一种检测SHA-256散列函数抵御差分故障攻击的方法,用于评测出SHA-256散列算法抵御差分故障攻击的能力,主要应用在检验封装有该算法的密码设备及相关产品的安全性,属于信息安全技术领域。



背景技术:

随着信息在军事系统、政府机构、金融系统、医疗保健、通信网络、教育系统等方面的广泛应用,信息系统的安全保密已成为影响社会稳定和国家安危的战略性问题。安全保密的核心是使用现代密码算法来保护信息系统中的关键信息。SHA-256算法作为美国国家标准与技术研究院(NIST)发布的经典散列算法,具有抗第一原像性、抗第二原像性和无碰撞性。与SHA-1算法相比,SHA-256算法具有更加复杂的结构,安全性能更高,在电子签名、消息认证、身份识别等领域中有着广泛的商业应用。

差分故障攻击凭借其出众的攻击能力和简单的软件实现等特点已经引起国内外的广泛关注。这种攻击不需要深入剖析散列算法内部的数学结构,通过对硬件进行特殊的物理处理,诱导在处理消息的过程中产生随机故障,并基于差分分析,即可恢复原始消息。对SHA-256算法抵御差分故障攻击的能力评测方面,目前还没有公开的检测方法,这极大地增加了封装有SHA-256散列算法的密码设备及相关产品的安全隐患。



技术实现要素:

本发明要解决的技术问题是如何评估SHA-256散列算法抵御差分故障攻击的能力。

为了解决上述技术问题,本发明的技术方案是提供一种SHA-256散列算法抵御差分故障攻击的检测方法,其特征在于:其特征在于,包括以下步骤:

步骤1:随机生成要处理的明文消息,记为X;

步骤2:利用SHA-256算法处理消息X,得到正确输出和错误输出,分别记为Y和Y*

步骤3:计算Y和Y*的差分值,结果记为ΔY;

步骤4:分析ΔY,判断SHA-256算法是否受到差分故障攻击的影响,并推导出故障导入的位置,分析其有效性;具体方法如下:

计算正确输出Y和错误输出Y*的差分其中代表异或运算;ΔY为256比特,令ΔY=(ΔY0,ΔY1,ΔY2,ΔY3,ΔY4,ΔY5,ΔY6,ΔY7),保存于256比特的缓存区中,缓存区用8个32比特长的寄存器(A,B,C,D,E,F,G,H)表示;ΔY0,ΔY1,ΔY2,ΔY3,ΔY4,ΔY5,ΔY6和ΔY7均为32比特,分别代表缓存区中最后一轮输出结果的差分;记Ai、Bi、Ci、Di、Ei、Fi、Gi、Hi为第i步缓存区相应寄存器中的值,其中i∈[0,64];

(1)有效故障:

I)当ΔY0×ΔY1×ΔY2×ΔY4×ΔY5×ΔY6×ΔY7≠0时,故障导入的位置为E61

II)当ΔY0×ΔY1×ΔY2×ΔY4×ΔY5×ΔY6≠0时,故障导入的位置为F61

III)当ΔY0,ΔY1,ΔY2,ΔY3,ΔY4,ΔY5,ΔY6,ΔY7中均不为0时,故障导入的位置为D60以及在其之前的任何位置;

(2)无效故障:

I)当ΔY=0时,说明导入的故障值等于当前位置上的原值,相当于没有导

入故障,故障无效;

II)当ΔY≠0时:

(i)当ΔY0,ΔY1,ΔY2,ΔY3,ΔY4,ΔY5,ΔY6,ΔY7中有且仅有一个不为0时,

a)当ΔY0≠0时,故障导入的位置为A64

b)当ΔY1≠0时,故障导入的位置为B64

c)当ΔY2≠0时,故障导入的位置为C64

d)当ΔY3≠0时,故障导入的位置为D64

e)当ΔY4≠0时,故障导入的位置为E64或者D63

f)当ΔY5≠0时,故障导入的位置为F64

g)当ΔY6≠0时,故障导入的位置为G64

h)当ΔY7≠0时,故障导入的位置为H64

(ii)当ΔY0,ΔY1,ΔY2,ΔY3,ΔY4,ΔY5,ΔY6,ΔY7中只有两个同时不为0时,

a)当ΔY0×ΔY1≠0时,故障导入的位置为A63

b)当ΔY0×ΔY2≠0时,故障导入的位置为B63

c)当ΔY0×ΔY3≠0时,故障导入的位置为C63

d)当ΔY0×ΔY4≠0时,故障导入的位置为H63

(iii)当ΔY0,ΔY1,ΔY2,ΔY3,ΔY4,ΔY5,ΔY6,ΔY7中只有三个同时不为0时,

a)当ΔY0×ΔY1×ΔY2≠0时,故障导入的位置为A62

b)当ΔY0×ΔY1×ΔY3≠0时,故障导入的位置为B62

c)当ΔY0×ΔY1×ΔY4≠0时,故障导入的位置为C62或者G62

d)当ΔY0×ΔY4×ΔY5≠0时,故障导入的位置为D62或者E63

f)当ΔY0×ΔY4×ΔY6≠0时,故障导入的位置为F63

g)当ΔY0×ΔY4×ΔY7≠0时,故障导入的位置为G63

(iv)当ΔY0,ΔY1,ΔY2,ΔY3,ΔY4,ΔY5,ΔY6,ΔY7中只有四个同时不为0时,

a)当ΔY0×ΔY1×ΔY2×ΔY3≠0时,故障导入的位置为A61

b)当ΔY0×ΔY1×ΔY4×ΔY5≠0时,故障导入的位置为H62

c)当ΔY0×ΔY1×ΔY3×ΔY4≠0时,故障导入的位置为B61

(v)当ΔY0,ΔY1,ΔY2,ΔY3,ΔY4,ΔY5,ΔY6,ΔY7中只有五个同时不为0时,

a)当ΔY0×ΔY1×ΔY4×ΔY5×ΔY6≠0时,故障导入的位置为E62

b)当ΔY0×ΔY1×ΔY4×ΔY5×ΔY7≠0时,故障导入的位置为F62

c)当ΔY0×ΔY1×ΔY2×ΔY4×ΔY6≠0时,故障导入的位置为D61

d)当ΔY0×ΔY1×ΔY2×ΔY4×ΔY5≠0时,故障导入的位置为C61

(vi)当ΔY0,ΔY1,ΔY2,ΔY3,ΔY4,ΔY5,ΔY6,ΔY7中只有六个同时不为0时,

a)当ΔY0×ΔY1×ΔY2×ΔY4×ΔY5×ΔY6≠0时,故障导入的位置为G61或者H61

优选地,所述步骤2中,使用SHA-256算法处理消息X的过程中,控制出两种实验环境,具体步骤如下:

步骤2.1:输入消息X,控制实验环境不受任何不相关事物的干扰,使得SHA-256算法能够正确无误地进行,从而得到正确的输出结果,将其记为Y;

步骤2.2:重新输入消息X,再次用SHA-256算法对其进行处理,同时借助物理设备改变运行环境,诱导产生故障,来干扰SHA-256算法的处理过程,将输出结果记为Y*

优选地,所述步骤2.2中,改变运行环境诱导产生故障的方法包括:改变时钟、电压、湿度、辐射、压力、光和/或涡电流,将故障随机地导入SHA-256算法处理流程,以得到错误的输出结果,记为Y*

本发明提供的方法填补了现有技术的空白,简单、准确、快速,易于实现,不仅可以评估SHA-256算法对差分故障攻击的抵抗能力,还能推导出差分故障攻击导入的位置,给使用SHA-256算法封装的产品的安全性测评提供了理论依据。

附图说明

图1为SHA-256散列算法抵御差分故障攻击的检测方法流程图;

图2为SHA-256散列算法差分故障攻击分析路径图;

图3为检验SHA-256散列算法抵御差分故障攻击能力的实验环境示意图。

具体实施方式

下面结合具体实施例,进一步阐述本发明。应理解,这些实施例仅用于说明本发明而不用于限制本发明的范围。此外应理解,在阅读了本发明讲授的内容之后,本领域技术人员可以对本发明作各种改动或修改,这些等价形式同样落于本申请所附权利要求书所限定的范围。

一、基本记号和符号说明

记X为输入的明文消息;

记Y为算法处理消息后的正确输出;

记Y*为算法导入故障后的错误输出;

记ΔY为正确输出Y与错误输出Y*之间的差分值;

记ΔY0、ΔY1、ΔY2、ΔY3、ΔY4、ΔY5、ΔY6、ΔY7为缓存区中最后一轮输出结果的差分;

记为异或运算;

记Ai、Bi、Ci、Di、Ei、Fi、Gi、Hi为第i步缓存区寄存器中的值,其中i∈[0,64],每个寄存器长度均为32比特。

二、SHA-256散列算法抵御差分故障攻击的检测方法

使用SHA-256算法对于同一个消息X使用同一个密钥进行处理时,如果实验环境(如时钟、电压、湿度、辐射、压力、光和涡电流等)不同,攻击者可以分别获得正确输出Y和错误输出Y*,通过计算出这两个值的输出差分值,即就可推导出关键信息。攻击者可以在处理设备运行SHA-256算法期间诱导故障发生,但是不知道故障发生的具体位置以及具体的错误值。在某些特定条件下,能从差分ΔY中推导出故障导入的位置,此时导入的故障称为有效故障。相反,当导入故障为无效故障的时候,本次导入的故障并不能给分析密钥提供帮助,即通过ΔY不能得到重要的信息。

图1为本发明提供的SHA-256散列算法抵御差分故障攻击的检测方法流程图,所述的SHA-256散列算法抵御差分故障攻击的检测方法包括如下步骤:

步骤1:随机生成要处理的消息,记为X;

步骤2:处理消息X,得到正确输出和错误输出,分别记为Y和Y*

步骤3:计算Y和Y*的差分值,结果记为ΔY;

步骤4:分析ΔY,推断出导入位置,并判断导入故障是否有效。

针对步骤2,用SHA-256算法对X进行处理,实验过程中,对运行环境实施两种不同的控制,即:

(1)输入消息X,控制实验环境不受其他任何不相关事物的干扰,使得SHA-256算法能够正确无误地进行,从而得到正确的输出结果,将其记为Y;

(2)重新输入消息X,再次用SHA-256算法对其进行处理,同时借助其他物理设备改变运行环境,诱导产生故障来干扰SHA-256算法的处理过程,将输出结果记为Y*

其中,诱导故障产生的方法包括:改变时钟、电压、湿度、辐射、压力、光和涡电流等。

针对步骤3,计算差分其中代表异或运算,ΔY为256比特,令ΔY=(ΔY0,ΔY1,ΔY2,ΔY3,ΔY4,ΔY5,ΔY6,ΔY7),保存于256比特的缓存区中,缓存区用8个32比特长的寄存器(A,B,C,D,E,F,G,H)表示,令ΔY0,ΔY1,ΔY2,ΔY3,ΔY4,ΔY5,ΔY6和ΔY7均为32比特,分别代表缓存区中最后一轮输出结果的差分;

针对步骤4,对ΔY的差分分析及确定故障位置的原理如下:

SHA-256算法对消息按512比特长的分组为单位进行处理,总共由4轮运算组成,每一轮都对缓存区进行16步迭代运算,输出为256比特的Hash值,SHA-256的中间结果和最终结果保存于256比特的缓存区中,缓存区用8个32比特长的寄存器(A,B,C,D,E,F,G,H)表示,如图2所示,第i+1步的迭代公式如下:

Bi+1=Ai

Ci+1=Bi

Di+1=Ci

Fi+1=Ei

Gi+1=Fi

Hi+1=Gi

其中,代表异或运算,i是迭代的步数,i∈[0,64],Ai、Bi、Ci、Di、Ei、Fi、Hi、Gi是第i步缓存区中的值,f0(Ai,Bi,Ci)与f1(Ei,Fi,Gi)是第i步的基本逻辑算法,S0与S1是32比特的变量循环逻辑算法,Wi是从当前输入的512比特的分组导出的32比特长的字,Ki是加法常量。

SHA-256算法的正确输出Y为:

A0、B0、C0、D0E0、F0、G0、H0为缓存区中的初始值,将其代入上述等式即可得到最后的输出结果A64、B64、C64、D64、E64、F64、G64、H64。在此,考虑

将A63=B64,B63=C64,C63=D64,E63=F64,F63=G64,G63=H64代入A64和E64得知在上述等式中,只有H63和W63是未知的,而攻击者的目的是要恢复W63,如果H63的值是已知的,那么W63就可以由以下等式求解得到:

根据算法结构可知H63=G62,即求得G62的值便可知道H63,这样就可以推导出W63

同理,也可以得到:

上式中,要推导出W62,只需要知道H62和W62,又因为H62=G61,所以需要知道G62和G61的值,才能求得W62

通过分析当故障导入的位置在E61或者F61时,可以求得G62和G61的值,进而推导出W62和W63。因而E61或者F61为有效的故障位置。

其中,对故障位置的有效性,具体分析如下:

(1)有效故障:

I)当ΔY0×ΔY1×ΔY2×ΔY4×ΔY5×ΔY6×ΔY7≠0时,故障导入的位置为E61

II)当ΔY0×ΔY1×ΔY2×ΔY4×ΔY5×ΔY6≠0时,故障导入的位置为F61

III)当ΔY0,ΔY1,ΔY2,ΔY3,ΔY4,ΔY5,ΔY6,ΔY7中均不为0时,故障导入的位置为D60以及在其之前的任何位置;

(2)无效故障:

I)当ΔY=0时,说明导入的故障值等于当前位置上的原值,相当于没有导入故障,故障无效;

II)当ΔY≠0时:

(i)当ΔY0,ΔY1,ΔY2,ΔY3,ΔY4,ΔY5,ΔY6,ΔY7中有且仅有一个不为0时,

a)当ΔY0≠0时,故障导入的位置为A64

b)当ΔY1≠0时,故障导入的位置为B64

c)当ΔY2≠0时,故障导入的位置为C64

d)当ΔY3≠0时,故障导入的位置为D64

e)当ΔY4≠0时,故障导入的位置为E64或者D63

f)当ΔY5≠0时,故障导入的位置为F64

g)当ΔY6≠0时,故障导入的位置为G64

h)当ΔY7≠0时,故障导入的位置为H64

(ii)当ΔY0,ΔY1,ΔY2,ΔY3,ΔY4,ΔY5,ΔY6,ΔY7中只有两个同时不为0时,

a)当ΔY0×ΔY1≠0时,故障导入的位置为A63

b)当ΔY0×ΔY2≠0时,故障导入的位置为B63

c)当ΔY0×ΔY3≠0时,故障导入的位置为C63

d)当ΔY0×ΔY4≠0时,故障导入的位置为H63

(iii)当ΔY0,ΔY1,ΔY2,ΔY3,ΔY4,ΔY5,ΔY6,ΔY7中只有三个同时不为0时,

a)当ΔY0×ΔY1×ΔY2≠0时,故障导入的位置为A62

b)当ΔY0×ΔY1×ΔY3≠0时,故障导入的位置为B62

c)当ΔY0×ΔY1×ΔY4≠0时,故障导入的位置为C62或者G62

d)当ΔY0×ΔY4×ΔY5≠0时,故障导入的位置为D62或者E63

f)当ΔY0×ΔY4×ΔY6≠0时,故障导入的位置为F63

g)当ΔY0×ΔY4×ΔY7≠0时,故障导入的位置为G63

(iv)当ΔY0,ΔY1,ΔY2,ΔY3,ΔY4,ΔY5,ΔY6,ΔY7中只有四个同时不为0时,

a)当ΔY0×ΔY1×ΔY2×ΔY3≠0时,故障导入的位置为A61

b)当ΔY0×ΔY1×ΔY4×ΔY5≠0时,故障导入的位置为H62

c)当ΔY0×ΔY1×ΔY3×ΔY4≠0时,故障导入的位置为B61

(v)当ΔY0,ΔY1,ΔY2,ΔY3,ΔY4,ΔY5,ΔY6,ΔY7中只有五个同时不为0时,

a)当ΔY0×ΔY1×ΔY4×ΔY5×ΔY6≠0时,故障导入的位置为E62

b)当ΔY0×ΔY1×ΔY4×ΔY5×ΔY7≠0时,故障导入的位置为F62

c)当ΔY0×ΔY1×ΔY2×ΔY4×ΔY6≠0时,故障导入的位置为D61

d)当ΔY0×ΔY1×ΔY2×ΔY4×ΔY5≠0时,故障导入的位置为C61

(vi)当ΔY0,ΔY1,ΔY2,ΔY3,ΔY4,ΔY5,ΔY6,ΔY7中只有六个同时不为0时,

a)当ΔY0×ΔY1×ΔY2×ΔY4×ΔY5×ΔY6≠0时,故障导入的位置为G61或者H61

综上分析,当ΔY0×ΔY1×ΔY2×ΔY4×ΔY5×ΔY6×ΔY7≠0时,导入的故障位置为E61,当ΔY0×ΔY1×ΔY2×ΔY4×ΔY5×ΔY6≠0时,故障导入的位置为F61,ΔY0,ΔY1,ΔY2,ΔY3,ΔY4,ΔY5,ΔY6,ΔY7中均不为0时,导入的故障位置为D60及其之前的任何位置,这些位置均为有效的故障导入位置。

针对上述执行步骤,选择实验环境如图3所示,其中用计算机来产生SHA-256的输入消息X以及分析输出结果;封装有SHA-256算法的设备用来处理输入的消息;产生故障的设备用来改变实验执行环境,目的是干扰对输入消息的处理过程,从而实现导入故障功能,产生错误的输出结果。

利用上述分析方法,本发明在Intel(R)Core(TM)i5-3210M CPU 2.50GHz 8GB内存的计算机上,在Eclipse开发工具下采用Java语言编程来模拟故障导入和消息处理过程,重复执行2500次,实验结果表明上述检测方法准确无误。该方法为评估SHA-256算法的安全性提供了充分的理论依据,而且此方法操作简单,结果准确。

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