本发明涉及一种检测RIPEMD-160杂凑密码算法抵御差分故障攻击的方法,用于评测出该算法抵御差分故障攻击的能力,主要应用在检验封装有该算法的产品的安全性。
背景技术:
随着大数据时代的到来,各种各样的信息存储在网络服务器中,如何防止攻击者的主动攻击,并保证这些信息的完整性,成为保证数据安全的核心问题。RIPEMD-160算法是由欧洲研究学者提出的一种杂凑密码,具有抗第一原像性、抗第二原像性和无碰撞性,是信息完整性保护的基础部件。
差分故障攻击是一种将故障攻击与差分分析相结合密码攻击技术。它针对密码算法的结构和轮函数的特性,通过在算法执行时导入故障,分析其对输出的影响,最终获得关键信息。在对RIPEMD-160算法抵御差分故障攻击的能力评测方面,目前还没有公开的分析方法,这就给封装有RIPEMD-160杂凑算法的密码设备的安全性带来了隐患。
技术实现要素:
本发明的目的是提供一种评估RIPEMD-160算法抵御查分故障攻击能力的方法。
为了达到上述目的,本发明的技术方案是提供了一种检测RIPEMD-160算法抵御差分故障攻击的方法,其特征在于,包括以下步骤:
步骤1:随机生成要处理的明文消息X;
步骤2:利用RIPEMD-160算法处理明文消息X,RIPEMD-160算法对消息按512比特长的分组为单位进行处理,总共由5轮运算组成,每一轮都对缓存区进行16步迭代运算,输出为160比特的杂凑值,将得到的正确输出Y和错误输出Y*保存于160比特的缓存区中,其中,缓存区用5个32比特长的寄存器A,B,C,D,E表示;
步骤3:计算正确输出Y和错误输出Y*的差分值ΔY,令ΔY=(ΔY0,ΔY1,ΔY2,ΔY3,ΔY4),保存于5个32比特长的寄存器A,B,C,D,E表示的缓存区中,ΔY0,ΔY1,ΔY2,ΔY3,和ΔY4均为32比特,分别代表缓存区中最后一轮输出结果的差分:
步骤4:分析差分值ΔY,判断RIPEMD-160算法是否受到差分故障攻击的影响,并推导出故障导入的位置,分析其有效性,令Ai,Bi,Ci,Di,Ei分别为第i步迭代运算缓存区的寄存器A,B,C,D,E中的值,i∈[1,80],则具体方法为:
(1)有效故障:
I)当ΔY0、ΔY1、ΔY2、ΔY3≠0时,故障导入的位置为C77;
II)当ΔY1、ΔY2、ΔY3、ΔY4≠0时,故障导入的位置为B77;
III)当ΔY0、ΔY1、ΔY2、ΔY3、ΔY4中均不为0时,故障导入的位置为B76以及B76之前的任何位置;
(2)无效故障:
I)当ΔY=0时,说明导入的故障值等于当前位置上的原值,相当于没有导入故障,故障无效;
II)当ΔY≠0时:
(i)当ΔY0、ΔY1、ΔY2、ΔY3、ΔY4中有且仅有一个不为0时:
a)当ΔY0≠0时,故障导入的位置为A80;
b)当ΔY1≠0时,故障导入的位置为B80或E80;
c)当ΔY2≠0时,故障导入的位置为C80;
d)当ΔY3≠0时,故障导入的位置为D80;
e)当ΔY4≠0时,故障导入的位置为E80。
(ii)当ΔY0、ΔY1、ΔY2、ΔY3、ΔY4中只有两个同时不为0时,
a)当ΔY1≠0且ΔY0≠0时,故障导入的位置为E79;
b)当ΔY1≠0且ΔY2≠0时,故障导入的位置为B79;
c)当ΔY1≠0且ΔY3≠0时,故障导入的位置为C79;
d)当ΔY1≠0且ΔY4≠0时,故障导入的位置为D79;
(iii)当ΔY0、ΔY1、ΔY2、ΔY3、ΔY4中只有三个同时不为0时,
a)当ΔY0、ΔY1、ΔY2≠0时,故障导入的位置为D78;
b)当ΔY1、ΔY2、ΔY3≠0时,故障导入的位置为B78;
c)当ΔY1、ΔY2、ΔY4≠0时,故障导入的位置为C78。
优选地,在所述步骤2中,在用RIPEMD-160算法对明文消息X处理的过程中,使用两种实验环境控制从而得到正确输出Y和错误输出Y*,具体步骤如下:
步骤2.1:输入明文消息X,保证实验环境不受其他任何不相关事物的干扰,让RIPEMD-160算法能够正确无误地进行,从而得到正确输出Y;
步骤2.2:重新输入明文消息X,再次用RIPEMD-160算法对其加密处理,同时借助其他物理设备改变运行环境,诱导产生故障来干扰RIPEMD-160算法的处理过程,从而得到错误输出Y*。
优选地,在所述步骤2.2中,改变运行环境诱导产生故障的方法包括:改变时钟、电压、湿度、辐射、压力、光和涡电流,将故障随机地导入RIPEMD-160算法处理过程,以得到错误输出Y*。
本发明提供的方法简单准确,易于实现,不仅可以评估RIPEMD-160算法对差分故障攻击的抵抗能力,还能推导出差分故障攻击导入的位置,给使用RIPEMD-160算法封装的产品的安全性测评提供了理论依据。
附图说明
图1为RIPEMD-160算法抵御差分故障攻击的方法流程图;
图2为RIPEMD-160算法差分故障攻击分析路径图;
图3为检验RIPEMD-160抵御差分故障攻击能力实验环境示意图。
具体实施方式
为使本发明更加清晰明了,现列出优选实施例,详细的配图说明如下所示。
使用RIPEMD-160算法对于同一个明文消息X使用同一个密钥进行处理时,如果实验环境(如时钟、电压、湿度、辐射、压力、光和涡电流等)不同,攻击者可以分别获得正确输出Y和错误输出Y*,通过计算出这两个值的输出差分值,即表示异或运算,就可推导出关键信息。攻击者可以在处理设备运行RIPEMD-160算法期间诱导故障发生,但是不知道故障发生的具体位置以及具体的错误值。在某些特定条件下,能从差分ΔY中推导出故障导入的位置,此时导入的故障称为有效故障。相反,当导入故障为无效故障的时候,本次导入的故障并不能给分析密钥提供帮助,即通过ΔY不能得到重要的信息。
图1为本发明提供的检测RIPEMD-160算法抵御差分故障攻击的方法的流程图,所述的检测RIPEMD-160算法抵御差分故障攻击的方法包括如下步骤:
步骤1:随机生成要处理的明文消息X;
步骤2:处理明文消息X,得到正确输出Y和错误输出Y*;
步骤3:计算正确输出Y和错误输出Y*的差分值ΔY;
步骤4:分析差分值ΔY,推断出导入位置,并判断导入故障是否有效。
针对步骤2,用RIPEMD-160算法对明文消息X进行处理,实验过程中,对运行环境实施两种不同的控制,即:
(1)输入明文消息X,控制实验环境不受其他任何不相关事物的干扰,使得RIPEMD-160算法能够正确无误地进行,从而得到正确输出Y;
(2)重新输入明文消息X,再次用RIPEMD-160算法对其进行处理,同时借助其他物理设备改变运行环境,诱导产生故障来干扰RIPEMD-160算法的处理过程,从而得到错误输出Y*。
其中,步骤(2)中诱导故障产生的方法包括:改变时钟、电压、湿度、辐射、压力、光和涡电流等;
针对步骤3,计算差分其中代表异或运算,ΔY为160比特,令ΔY=(ΔY0,ΔY1,ΔY2,ΔY3,ΔY4),保存于160比特的缓存区中,缓存区用5个32比特长的寄存器(A,B,C,D,E)表示,令ΔY=(ΔY0,ΔY1,ΔY2,ΔY3,ΔY4),ΔY0,ΔY1,ΔY2,ΔY3,和ΔY4均为32比特,分别代表缓存区中最后一轮输出结果的差分;
针对步骤4,对ΔY的差分分析及确定故障位置的原理如下:
RIPEMD-160算法对消息按512比特长的分组为单位进行处理,总共由5轮运算组成,每一轮都对缓存区进行16步迭代运算,输出为160比特的杂凑值,RIPEMD-160的中间结果和最终结果保存于160比特的缓存区中,缓存区用5个32比特长的寄存器(A,B,C,D,E)表示,如图2所示,第i+1步的迭代公式如下:
Ai+1=Ei,
Ci+1=Bi,
Di+1=Rq(Ci),
Ei+1=Di。
其中,代表异或运算,i是迭代的步数,i∈[0,79],Ai、Bi、Ci、Di、Ei是第i步迭代运算缓存区的寄存器(A,B,C,D,E)中的值,fi(B,C,D)是第i步迭代运算的基本逻辑函数,S是32比特的变量循环左移p位,R是32比特的变量循环左移q位,Wi是从当前输入的512比特的分组导出的32比特长的字,Ki是加法常量。
RIPEMD-160算法的正确输出Y为:
(A0,B0,C0,D0,E0)为缓存区中的初始值,将其代入上述等式即可得到最后的输出结果(A80,B80,C80,D80,E80)。在此,我们考虑
将B79=C80,Rq(C79)=D80,D79=E80,E79=A80,代入B80得知在上述等式中,只有A79和W79是未知的,而攻击者的目的是要恢复W79,如果A79的值是已知的,那么W79就可以由以下等式求解得到:
根据算法结构可知A79=E78,即求得E78的值便可知道A79,这样我们就可以推导出W79。
同理,我们也可以得到:
上式中要推导出W78,需要知道A78和E78,又因为A78=E77,所以我们需要知道E78和E77的值,才能求得W78。
通过分析当故障导入的位置在C77时,可以求得E78和E77的值,进而推导出W78和W79。由RIPEMD-160算法的结构可以看出,同理当故障导入在B77时,与故障导入在C77时的作用是完全相同。因而B77或C77为有效的故障位置。
其中,对故障位置的有效性,具体分析如下:
(1)有效故障:
I)当ΔY0、ΔY1、ΔY2、ΔY3≠0时,故障导入的位置为C77;
II)当ΔY1、ΔY2、ΔY3、ΔY4≠0时,故障导入的位置为B77;
III)当ΔY0、ΔY1、ΔY2、ΔY3、ΔY4中均不为0时,故障导入的位置为B76以及B76之前的任何位置;
(2)无效故障:
I)当ΔY=0时,说明导入的故障值等于当前位置上的原值,相当于没有导入故障,故障无效;
II)当ΔY≠0时:
(i)当ΔY0、ΔY1、ΔY2、ΔY3、ΔY4中有且仅有一个不为0时,
a)当ΔY0≠0时,故障导入的位置为A80;
b)当ΔY1≠0时,故障导入的位置为B80或E80;
c)当ΔY2≠0时,故障导入的位置为C80;
d)当ΔY3≠0时,故障导入的位置为D80;
e)当ΔY4≠0时,故障导入的位置为E80;
(ii)当ΔY0、ΔY1、ΔY2、ΔY3、ΔY4中只有两个同时不为0时,
a)当ΔY1≠0且ΔY0≠0时,故障导入的位置为E79;
b)当ΔY1≠0且ΔY2≠0时,故障导入的位置为B79;
c)当ΔY1≠0且ΔY3≠0时,故障导入的位置为C79;
d)当ΔY1≠0且ΔY4≠0时,故障导入的位置为D79;
(iii)当ΔY0、ΔY1、ΔY2、ΔY3、ΔY4中只有三个同时不为0时,
a)当ΔY0、ΔY1、ΔY2≠0时,故障导入的位置为D78;
b)当ΔY1、ΔY2、ΔY3≠0时,故障导入的位置为B78;
c)当ΔY1、ΔY2、ΔY4≠0时,故障导入的位置为C78。
综上分析,当ΔY0、ΔY1、ΔY2、ΔY3≠0时,导入的故障位置为C77,当ΔY1、ΔY2、ΔY3、ΔY4≠0时,导入的故障位置为B77,当ΔY0、ΔY1、ΔY2、ΔY3、ΔY4中均不为0时,导入的故障位置为B76及B76之前的任何位置,这些位置均为有效的故障导入位置。
针对上述执行步骤,选择实验环境如图3所示,其中用计算机来产生RIPEMD-160的输入消息X以及分析输出结果;封装有RIPEMD-160算法的设备用来处理输入的消息;产生故障的设备用来改变实验执行环境,目的是干扰对输入消息的处理过程,从而实现导入故障功能,产生错误的输出结果。
利用上述分析方法,本发明在Intel(R)Core(TM)i5-3210M CPU 2.50GHz 4GB内存的计算机上,在Eclipse开发工具下采用Java语言编程来模拟故障导入和消息处理过程,重复执行1000次,实验结果表明上述检测方法准确无误。该方法为评估RIPEMD-160算法的安全性提供了充分的理论依据,而且此方法操作简单,结果准确。