一种检测和抵御差分故障攻击的方法与流程

专利2022-05-09  170


本发明涉及信息安全领域,具体是一种检测和抵御差分故障攻击的方法。



背景技术:

故障攻击(faultattack,fa)可以使得攻击者能够针对密码设备随意选择所注入故障的值以及位置,极大地减少了获取密钥信息所需的数据量,攻击者能够在更短的时间内实现其目标。差分故障攻击(differentialfaultattack,dfa)是fa中的一种非常有效的攻击技术,主要是依赖于在加密设备执行期间恶意注入故障,然后通过分析故障输出和非故障输出之间的差异来推出相关的密钥信息,具有故障注入灵活、分析效率高、攻击复杂度低等特点。如何设计有效防护方法抵御此类攻击的威胁,保护密码设备,是至关重要的。

在过去的十多年中,人们针对dfa的攻击提出了许多对策来保护密码设备的安全。例如,beierle等人[1]提出一种可调分组密码算法craft,并使用可调模型来保护其免受差分故障攻击。aghaie等人[2]提出用基于底层错误检测编码的方案来达到百分百检测故障的目的。feng等人[3]提出了一种采用将感染函数与无保护密码算法分离的思想来作为适用于各种感染对策和攻击场景的评估框架。这些防护对策大致可以分为两种,即基于检测的防护对策和基于感染的防护对策。基于检测的防护对策主要是通过显式地检查故障密文和非故障密文之间的差分值δ是否等于0来判断密码设备执行过程中是否被注入了故障,如果有故障注入,则密文差分值δ≠0,那么检测对策将会通过抑制输出或者将输出随机化来阻止加密设备产生错误的输出值,从而达到阻止攻击者获取任何有效信息的目的。检测的思想一般是通过编码与信息论的知识而完成的,如线性奇偶校验,非线性[n,k]编码等。但是检测对策通常只针对某种特定的目标算法,不具有通用性。而感染对策的提出则是为了弥补检测对策的这一缺点,它主要是通过隐式地检查密文差分值δ是否等于0,同样的,δ≠0意味着有故障注入。不同的是,感染对策检测到故障之后,会通过引入一个感染函数来将密文差分值δ随机化,将受到感染之后的原始值输出给攻击者,从而使攻击者无法对加密设备进行dfa。

感染方案的工作过程主要是依赖于密码算法实际计算和冗余计算之间的(非零)差异。如果实际计算和冗余计算都受到相同故障的影响,那么将会导致两种计算的输出相同,即对应的差分值δ=0。在这种情况下,感染方案将会认为加密算法没有被注入故障,并且会把有故障的密文输出被攻击者利用。这种类型的故障会使得感染防护方案是无效的,被称为双重故障。因此,如何有效检测双重差分故障的攻击,快速找到故障源并进行防护是目前亟待解决的问题。

参考文献:

[1]c.beierle,g.leander,a.moradi,s.rasoolzadeh.craft:lightweighttweakableblockcipherwithefficientprotectionagainstdfaattacks[j].iacrtrans.symmetriccryptol.,2019(1)5-45。

[2]a.aghaie,a.moradi,s.rasoolzadeh,a.r.shahmirzadi,f.schellenberg,t.schneider.impeccablecircuits[j].ieeetransactionsoncomputers,2020,69(3)361-376。

[3]j.feng,h.chen,y.li,z.p.jiao,w.xi.aframeworkforevaluationandanalysisoninfectioncountermeasuresagainstfaultattacks.ieeetransactionsoninformationforensicsandsecurity,(2020)391-406。



技术实现要素:

本发明的目的是提出一种通用的检测和抵御差分故障攻击的新方法。该方法能够检测双重差分故障攻击,并针对差分故障攻击能够定位故障源并进行防护。

实现本发明目的的技术方案是:

一种检测和抵御差分故障攻击的方法,其特征在于,所述方法包括三部分:

(1)构建冗余;

根据原始加密模块构建冗余加密模块;

(2)双重差分故障检测;

基于消息认证码方法检测冗余加密模块是否存在故障注入,并与原始加密模块对比检测原始加密模块是否存在故障注入,完成双重差分故障攻击或差分故障攻击检测;

(3)定位故障源及防护;

在确定存在差分故障注入后,基于密文差分值和感染函数检测目标算法的每一轮密文差分值,定位攻击者所注入的故障源,并使用随机数和感染函数对密文差分值进行隐藏实现防护。

所述构建冗余,具体是对某一分组加密算法e进行完全复制为e',称e为原始加密模块,e'为冗余加密模块;对e和e'分别输入相同的明文p和密钥k进行加密,输出原始密文为c=ek(p),冗余密文为c'=e'k(p)。

所述双重差分故障检测,采用消息认证码进行检测,具体过程如下:

(2.1)为检测在冗余加密中是否存在故障注入,在冗余加密模块中增加一个检测模块,用于消息认证码检测;

(2.2)在冗余加密前,冗余加密模块先采用哈希函数根据密钥k计算e'的明文p的消息认证码mac,将mac(p)发送给检测模块,由检测模块接收并保存mac(p);冗余加密模块再将明文p与mac(p)合并在一起记为x作为输入,进行冗余加密;

(2.3)检测模块从冗余加密模块获取进行冗余加密后的输入数据x',并对输入数据x'进行数据分离,由于不确定原始的明文信息p是否已经发生改变,将所分离的明文信息记为p',采用哈希函数和密钥k计算p'的mac值,记为mac(p');

(2.4)检测模块判断mac(p)值与mac(p')值是否一致,若两者相同,转(2.5);若两者不同,转(2.6);

(2.5)若mac(p)=mac(p'),表明冗余加密模块中信息p没有被篡改,没有被注入故障,从而进行正常的加密,在去除消息认证码后,输出冗余加密的密文c'=e'k(p),转(2.7);

(2.6)若mac(p)≠mac(p'),表明冗余加密模块中信息p被篡改,冗余加密模块中有故障注入,将存在故障注入的明文信息记为p',输出冗余加密的密文c'=e'k(p'),转(2.11);

(2.7)将原始加密密文c=ek(p)和冗余加密密文c'=e'k(p)进行异或,得出密文差分值c为原始密文,c'为冗余密文;

(2.8)判断δ是否为0,若δ=0,转(2.9);若δ≠0,转(2.10);

(2.9)若δ=0,说明原始加密算法e中也没有被注入故障,结束检测;

(2.10)若δ≠0,说明原始加密算法e中被注入了故障,转(2.15);

(2.11)将原始加密密文c=ek(p)和冗余加密密文c'=e'k(p')进行异或,得出密文差分值

(2.12)判断δ是否为0,若δ=0,转(2.13);若δ≠0,转(2.14);

(2.13)若δ=0,说明原始加密算法e中被注入了与冗余加密算法e'相同的故障,即检测到双重故障,结束检测;

(2.14)若δ≠0,说明原始加密算法e中没有被注入故障,故障只在冗余加密模块e'中存在;

(2.15)定位故障源及防护的操作,结束检测。

针对存在的故障注入,需要对注入的故障进行定位,所述定位故障源及防护,具体过程如下:

(3.1)设加密算法e的总轮数为r轮,从高往低依次检测加密算法e的每一轮,设置检测的轮数为i,i=r-1;

(3.2)计算第i轮的密文差分值其中,ci为原始加密算法e第i轮的加密密文,ci'为冗余加密算法e'第i轮的加密密文;

(3.3)判断δi是否为0,若δi=0,转(3.4);若δi≠0,转(3.5);

(3.4)若δi=0,表明所注入的故障在第i 1轮,转(3.7);

(3.5)若δi≠0,为防止攻击者获取密文差分值δi进行差分故障攻击,将第i轮的密文感染值输出并保存,其中,ci为原始加密算法e第i轮正确加密的密文,z(·)为感染函数,δi为第i轮的密文差分值,αi和βi分别为第i轮的两个不同的随机值,i表示检测的轮数为第i轮;

(3.6)令i=i-1,转(3.2);

(3.7)根据第i 1轮的密文差分值δi 1的值进行比特查询,找到δi 1中不为0的比特位n,即为加密算法e中被注入故障的比特位,确定定位结果;

(3.8)输出定位结果,即故障位于第i 1轮的第n个比特位;

(3.9)为避免攻击者获取进行故障注入后的密文差分值δi 1,使用随机数和感染函数对δi 1进行隐藏,输出第i 1轮的密文感染值其中,ci 1为原始加密算法e第i 1轮正确加密的密文,z(·)为感染函数,δi 1为原始加密算法e和冗余加密算法e'在第i 1轮的密文差分值,αi 1和βi 1分别为第i 1轮的两个不同的随机值,针对被隐藏后输出的密文感染值,攻击者将无法进行差分故障攻击,结束定位过程。

本发明的有益效果是:

(1)本发明方法可以有效检测双重差分故障的攻击。

(2)本发明方法能够快速确定攻击者在目标算法中所注入差分故障的具体位置,并针对注入的差分故障,利用随机数和感染函数进行防护,使得攻击者无法进行差分故障攻击。

(3)本发明方法在单数据块下,计算量相对较小。

(4)本发明方法准确度高并具有通用性,适用于所有加密算法。

附图说明

图1为本发明检测和抵御差分故障攻击的方法的流程图;

图2为本发明方法中双重差分故障检测的流程图;

图3为本发明方法中定位故障源及防护的流程图。

具体实施方式

下面结合实施例和附图对本发明内容作进一步的详细说明,但不是对本发明的限定。

实施例

参照图1,本发明是一种检测和抵御差分故障攻击的方法,方法包括三部分:

(1)构建冗余;根据原始加密模块构建冗余加密模块;

(2)双重差分故障检测;

基于消息认证码方法检测冗余加密模块是否存在故障注入,并与原始加密模块对比检测原始加密模块是否存在故障注入,完成双重差分故障攻击或差分故障攻击检测;

(3)定位故障源及防护;

在确定存在差分故障注入后,基于密文差分值和感染函数检测目标算法的每一轮密文差分值,定位攻击者所注入的故障源,并使用随机数和感染函数对密文差分值进行隐藏实现防护。

参照图2,双重差分故障检测,采用消息认证码进行检测,具体过程如下:

(2.1)为检测在冗余加密中是否存在故障注入,在冗余加密模块中增加一个检测模块,用于消息认证码检测;

(2.2)在冗余加密前,冗余加密模块先采用哈希函数根据密钥k计算e'的明文p的消息认证码mac,将mac(p)发送给检测模块,由检测模块接收并保存mac(p);冗余加密模块再将明文p与mac(p)合并在一起记为x作为输入,进行冗余加密;

(2.3)检测模块从冗余加密模块获取进行冗余加密后的输入数据x',并对输入数据x'进行数据分离,由于不确定原始的明文信息p是否已经发生改变,将所分离的明文信息记为p',采用哈希函数和密钥k计算p'的mac值,记为mac(p');

(2.4)检测模块判断mac(p)值与mac(p')值是否一致,若两者相同,转(2.5);若两者不同,转(2.6);

(2.5)若mac(p)=mac(p'),表明冗余加密模块中信息p没有被篡改,没有被注入故障,从而进行正常的加密,在去除消息认证码后,输出冗余加密的密文c'=e'k(p),转(2.7);

(2.6)若mac(p)≠mac(p'),表明冗余加密模块中信息p被篡改,冗余加密模块中有故障注入,将存在故障注入的明文信息记为p',输出冗余加密的密文c'=e'k(p'),转(2.11);

(2.7)将原始加密密文c=ek(p)和冗余加密密文c'=e'k(p)进行异或,得出密文差分值c为原始密文,c'为冗余密文;

(2.8)判断δ是否为0,若δ=0,转(2.9);若δ≠0,转(2.10);

(2.9)若δ=0,说明原始加密算法e中也没有被注入故障,结束检测;

(2.10)若δ≠0,说明原始加密算法e中被注入了故障,转(2.15);

(2.11)将原始加密密文c=ek(p)和冗余加密密文c'=e'k(p')进行异或,得出密文差分值

(2.12)判断δ是否为0,若δ=0,转(2.13);若δ≠0,转(2.14);

(2.13)若δ=0,说明原始加密算法e中被注入了与冗余加密算法e'相同的故障,即检测到双重故障,结束检测;

(2.14)若δ≠0,说明原始加密算法e中没有被注入故障,故障只在冗余加密模块e'中存在;

(2.15)定位故障源及防护的操作,结束检测。

参照图3,定位故障源及防护,具体过程如下:

(3.1)设加密算法e的总轮数为r轮,从高往低依次检测加密算法e的每一轮,设置检测的轮数为i,i=r-1;

(3.2)计算第i轮的密文差分值其中,ci为原始加密算法e第i轮的加密密文,ci'为冗余加密算法e'第i轮的加密密文;

(3.3)判断δi是否为0,若δi=0,转(3.4);若δi≠0,转(3.5);

(3.4)若δi=0,表明所注入的故障在第i 1轮,转(3.7);

(3.5)若δi≠0,为防止攻击者获取密文差分值δi进行差分故障攻击,将第i轮的密文感染值输出并保存,其中,ci为原始加密算法e第i轮正确加密的密文,z(·)为感染函数,δi为第i轮的密文差分值,αi和βi分别为第i轮的两个不同的随机值,i表示检测的轮数为第i轮;

(3.6)令i=i-1,转(3.2);

(3.7)根据第i 1轮的密文差分值δi 1的值进行比特查询,找到δi 1中不为0的比特位n,即为加密算法e中被注入故障的比特位,确定定位结果;

(3.8)输出定位结果,即故障位于第i 1轮的第n个比特位;

(3.9)为避免攻击者获取进行故障注入后的密文差分值δi 1,使用随机数和感染函数对δi 1进行隐藏,输出第i 1轮的密文感染值其中,ci 1为原始加密算法e第i 1轮正确加密的密文,z(·)为感染函数,δi 1为原始加密算法e和冗余加密算法e'在第i 1轮的密文差分值,αi 1和βi 1分别为第i 1轮的两个不同的随机值,针对被隐藏后输出的密文感染值,攻击者将无法进行差分故障攻击,结束定位过程。


技术特征:

1.一种检测和抵御差分故障攻击的方法,其特征在于,所述方法包括三部分:

(1)构建冗余;

根据原始加密模块构建冗余加密模块;

(2)双重差分故障检测;

基于消息认证码方法检测冗余加密模块是否存在故障注入,并与原始加密模块对比检测原始加密模块是否存在故障注入,完成双重差分故障攻击或差分故障攻击检测;

(3)定位故障源及防护;

在确定存在差分故障注入后,基于密文差分值和感染函数检测目标算法的每一轮密文差分值,定位攻击者所注入的故障源,并使用随机数和感染函数对密文差分值进行隐藏实现防护。

2.根据权利要求1所述的检测和抵御差分故障攻击的方法,其特征在于:所述构建冗余,具体是对某一分组加密算法e进行完全复制为e',称e为原始加密模块,e'为冗余加密模块;对e和e'分别输入相同的明文p和密钥k进行加密,输出原始密文为c=ek(p),冗余密文为c'=e'k(p)。

3.根据权利要求1所述的检测和抵御差分故障攻击的方法,其特征在于:所述双重差分故障检测,具体过程如下:

(2.1)为检测在冗余加密中是否存在故障注入,在冗余加密模块中增加一个检测模块,用于消息认证码检测;

(2.2)在冗余加密前,冗余加密模块先采用哈希函数根据密钥k计算e'的明文p的消息认证码mac,将mac(p)发送给检测模块,由检测模块接收并保存mac(p);冗余加密模块再将明文p与mac(p)合并在一起记为x作为输入,进行冗余加密;

(2.3)检测模块从冗余加密模块获取进行冗余加密后的输入数据x',并对输入数据x'进行数据分离,由于不确定原始的明文信息p是否已经发生改变,将所分离的明文信息记为p',采用哈希函数和密钥k计算p'的mac值,记为mac(p');

(2.4)检测模块判断mac(p)值与mac(p')值是否一致,若两者相同,转(2.5);若两者不同,转(2.6);

(2.5)若mac(p)=mac(p'),表明冗余加密模块中信息p没有被篡改,没有被注入故障,从而进行正常的加密,在去除消息认证码后,输出冗余加密的密文c'=e'k(p),转(2.7);

(2.6)若mac(p)≠mac(p'),表明冗余加密模块中信息p被篡改,冗余加密模块中有故障注入,将存在故障注入的明文信息记为p',输出冗余加密的密文c'=e'k(p'),转(2.11);

(2.7)将原始加密密文c=ek(p)和冗余加密密文c'=e'k(p)进行异或,得出密文差分值c为原始密文,c'为冗余密文;

(2.8)判断δ是否为0,若δ=0,转(2.9);若δ≠0,转(2.10);

(2.9)若δ=0,说明原始加密算法e中也没有被注入故障,结束检测;

(2.10)若δ≠0,说明原始加密算法e中被注入了故障,转(2.15);

(2.11)将原始加密密文c=ek(p)和冗余加密密文c'=e'k(p')进行异或,得出密文差分值

(2.12)判断δ是否为0,若δ=0,转(2.13);若δ≠0,转(2.14);

(2.13)若δ=0,说明原始加密算法e中被注入了与冗余加密算法e'相同的故障,即检测到双重故障,结束检测;

(2.14)若δ≠0,说明原始加密算法e中没有被注入故障,故障只在冗余加密模块e'中存在;

(2.15)定位故障源及防护的操作,结束检测。

4.根据权利要求1所述的检测和抵御差分故障攻击的方法,其特征在于:所述定位故障源及防护,具体过程如下:

(3.1)设加密算法e的总轮数为r轮,从高往低依次检测加密算法e的每一轮,设置检测的轮数为i,i=r-1;(3.2)计算第i轮的密文差分值其中,ci为原始加密算法e第i轮的加密密文,ci'为冗余加密算法e'第i轮的加密密文;

(3.3)判断δi是否为0,若δi=0,转(3.4);若δi≠0,转(3.5);

(3.4)若δi=0,表明所注入的故障在第i 1轮,转(3.7);

(3.5)若δi≠0,为防止攻击者获取密文差分值δi进行差分故障攻击,将第i轮的密文感染值输出并保存,其中,ci为原始加密算法e第i轮正确加密的密文,z(·)为感染函数,δi为第i轮的密文差分值,αi和βi分别为第i轮的两个不同的随机值,i表示检测的轮数为第i轮;

(3.6)令i=i-1,转(3.2);

(3.7)根据第i 1轮的密文差分值δi 1的值进行比特查询,找到δi 1中不为0的比特位n,即为加密算法e中被注入故障的比特位,确定定位结果;

(3.8)输出定位结果,即故障位于第i 1轮的第n个比特位;

(3.9)为避免攻击者获取进行故障注入后的密文差分值δi 1,使用随机数和感染函数对δi 1进行隐藏,输出第i 1轮的密文感染值其中,ci 1为原始加密算法e第i 1轮正确加密的密文,z(·)为感染函数,δi 1为原始加密算法e和冗余加密算法e'在第i 1轮的密文差分值,αi 1和βi 1分别为第i 1轮的两个不同的随机值,针对被隐藏后输出的密文感染值,攻击者将无法进行差分故障攻击,结束定位过程。

技术总结
本发明公开了一种检测和抵御差分故障攻击的方法,该方法首先根据原始加密模块构建冗余加密模块;其次,基于消息认证码方法检测冗余加密模块是否存在故障注入,并与原始加密模块对比检测原始加密模块是否存在故障注入,完成双重差分故障攻击或差分故障攻击检测;最后,在确定存在差分故障注入后,基于密文差分值和感染函数检测目标算法的每一轮密文差分值,定位攻击者所注入的故障源,并使用随机数和感染函数对密文差分值进行隐藏实现防护。本发明方法能够快速确定攻击者在目标算法中所注入差分故障的具体位置,并针对注入的差分故障,利用随机数和感染函数进行防护,使得攻击者无法进行差分故障攻击。

技术研发人员:韦永壮;张小娜;武小年;李灵琛;张润莲
受保护的技术使用者:桂林电子科技大学
技术研发日:2021.04.30
技术公布日:2021.08.03

转载请注明原文地址:https://doc.8miu.com/read-2554.html

最新回复(0)