摘 要: 针对AES的差分故障攻击(DFA)过程,总结出对AES的DFA攻击算法与攻击模型的特点,在此基础上为AES密码芯片设计了一种基于TRC校验的防护电路,并对其抗差分故障攻击的可行性进行了仿真验证。结果表明,该防护电路能够快速准确地检测出导入错误,增强了AES芯片抗DFA攻击的能力。
关键词: 差分故障攻击; AES; 攻击模型; TRC; 防护电路
故障攻击是旁道攻击的一种,是一种通过旁道信息的密码攻击方法,利用随机硬件错误对RSA公钥密码体制进行攻击(最早由Boneh等人提出[1])。1997年,Biham和Shamir等将此种攻击方法应用到对称密码体制的旁道攻击中,并首次提出了“差分故障攻击”DFA(Differential Fault Attack)的概念[2]。他们设计了差分故障攻击的模型,成功破解了DES密码芯片的密钥。由此,差分故障攻击方法被应用到几乎所有公开文献中提出的密码系统中。但是,对基于代换置换网络SPN(Substitution-Permutation Network)架构的AES密码芯片来说,差分故障攻击方法并不能直接对其进行攻击,因为AES不是Feistel架构的。
目前,高级数据加密标准AES已经取代数据加密标准DES,广泛应用于IPsec协议、SSL、无线局域网及ATM等多个领域。与此同时,针对AES硬件实现密码芯片的攻击方法也在不断更新,旁道攻击中的故障攻击已经成为其严重威胁。本文描述了针对AES-128的差分故障攻击过程,并给出对AES的差分故障攻击的攻击算法,在此基础上总结了多种攻击模型的特点。针对差分故障攻击的弱点,在AES硬件实现中增加了抵抗DFA攻击的防护电路,并对其防护能力进行了仿真与验证。
1 差分故障攻击
差分故障攻击(DFA)的基本原理是将密码芯片置于强磁场中,或者改变芯片的电源电压、工作频率、温度等,使密码芯片中的寄存器、存储器在加解密过程中产生随机错误,某些输出bit从原来的0变成1或1变成0。通过对正确密文输出和错误密文输出的差分比较,经过理论分析,就可得到芯片内部的秘密数据信息。
故障攻击是一套方法的集合,参考文献[2]对DES的差分故障攻击进行了详细的分析。通过故障长度、故障位置和故障导入时间3个待定参数对差分故障攻击进行分类。故障长度是指在芯片内部导入错误时,影响数据位数,主要分为2种:单位错误和多位错误。单位错误导入是指仅仅能导入到密码系统中1位错误,多位错误导入是指能导入到密码系统中多位错误。故障位置是把错误导入到目标密码设备中的具体位置,方便进行差错分析。故障导入时间是指导入错误使其有效的时间,同时表明攻击者能控制设备的能力,主要分为瞬时故障和永久故障2种模式。瞬时故障是指在设备中导入错误,在不稳定的同时很容易在错误态和正常态之间跳转。在需要导入单位错误时,可以考虑这种故障模式。永久故障是指错误导入能使攻击者在他需要的时间内一直保持故障状态。比如,希望设备的某一位置一直为1或0,本文所述的模拟攻击过程就是使用单bit错误瞬时故障模式。
2 针对AES的DFA
2.1高级数据加密标准AES
AES是一种分组密码算法,其分组长度为128 bit,密钥长度为128 bit,192 bit或256 bit。本文以AES-128为例进行分析,其输入分组和解密算法的输出分组均为128 bit,并且分组是用以字节为单位的正方形矩阵描述。其结构的一个显著特征是每一轮都使用代换和混淆、并行处理整个数据分组的SPN架构,而不是Feistel结构。AES架构由轮函数通过10轮迭代实现,每一轮由4个不同的部分组成,包括一个混淆和3个代换,其中字节代换是用S盒完成分组中的按字节的代换;行移位是一个简单的置换;列混淆是利用在域GF(28)上的算术特性的代换,在最后一轮中没有列混淆;轮密钥加是利用当前分组和扩展密钥的一部分进行按位XOR,每一轮加解密需要1个轮密钥,轮密钥是由初始密钥通过固定的密钥调度算法产生的[3]。图1给出了AES最后二轮的加密流程。
其中,SB(Substitute Byte)是按字节的替换,SR(Shift Row)是按不同的位移量进行行移位,MC(Mix Columns)是每列并行应用线性变换GF(28)到GF(28)的列混淆,ADK(And Key)是“异或”密钥Key,Mi是中间加密数据寄存器,C是输出密文。
2.2 DFA攻击过程
针对AES-128的差分故障攻击已经有很多文献进行了研究[4-6],本文对其进行DFA攻击过程的分析。AES-128的明文与密钥都是4×4的矩阵,其最后一轮的3个变换都是字节到字节的变换,即最后一轮的输入中改变1个字节,相应的输出密文只有1个字节的变化,变换过程如图2所示。
由图2可知,G是输入的某一字节,经过字节代换后就被S[G]代换,行移位变换把S[G]循环右移到另外一个位置,接着通过密钥“异或”运算得到了密文C。由DFA原理可知,完成对AES的攻击,需要进行2次加密运算过程,一是在正常工作状态下的加密流程,这样可以得到正确的密文C。另一个是通过改变系统工作的外部环境,在最后一轮的当前输入(如图2所示)中导入故障,而后进行加密得到故障密文C′。对正确密文C与故障密文C′进行差分分析,计算它们之间的差值(记为D),其关系式如下:
3 抗DFA的防护电路设计
3.1 DFA攻击模型分析
参考文献[5-6]都对AES密码芯片进行了攻击实验,对AES的差分故障攻击模型的特点分析如下:
(1)控制AES密码系统设备,可以完成对已知信息的加解密。
(2) 通过外部环境的改变控制密码系统的工作,能在系统工作过程中导入随机故障。
(3) 密码系统在发生故障时,在同一时间只能发生1种故障,由1变成0或由0变成1,此故障称为单向故障。
通过分析故障攻击模型,可以发现,攻击者主要是通过外部环境的改变,导致芯片内部产生随机的故障,而且故障的类型主要是bit错误。这样在模拟攻击防护时,设定导入bit错误,以此来检验本文设计的防护电路的可行性。
3.2 防护电路设计
根据对DFA研究可知,差分故障攻击成功的基础是在芯片内部引入错误,使其在故障模式下能够继续工作,通过分析芯片在故障模式与正确模式下产生的数据,获取内部密钥等重要信息。为此,本文在设计抵抗差分故障攻击电路时,可以从两个层面进行防护:一种是检测错误诱导的条件,例如检测外部工作环境,防止错误导入。另一种是在芯片运算过程中,设计能够检测到错误产生的故障检测电路,在运算层面进行防护。由于在进行DFA攻击过程中,需要对芯片导入错误,所以本文没有考虑检测诱导条件的措施。故在设计模拟引入故障情况下,从密码芯片运算检测的角度对差分故障攻击进行防护。
针对DFA攻击的特点及抵抗其攻击的基础,只要使密码芯片在产生故障情况下停止工作,攻击者就无法得到错误的输出数据,从而使DFA失效。按照防护位置与检测技术的要求,在AES架构容易受到攻击的位置,设计基于TRC校验器抵抗DFA的防护电路。
TRC校验器是鉴别差分信号的电路结构[8],如图3所示,具有4输入2输出,如果输入信号a0、a1和b0、b1刚好是差分的,则输出z0、z1也是差分的,所以这种TRC电路很容易扩展成多bit的TRC校验器。对于加密过程的中间数据寄存器,没有直接采用TRC检测模块,这是因为需要检测的数据是128 bit,无法忍受直接使用TRC校验器带来的传输延时,故在检验前加入了计数器模块。
根据AES密码算法的特点及前文对差分故障攻击过程的分析可知,要抵抗DFA攻击,需在其中间数据寄存器上安装检测电路。如果错误导入,则输出错误产生反馈信号,这样才能防止攻击成功。因为AES的明文与密钥都是128 bit的,中间数据寄存器也是128 bit的,故在错误检验前给检测电路加上1个0计数器模块,这样就可以只通过8 bit的TRC差分校验器来实现检测功能。
如图4所示,设计的抗差分故障攻击电路模块EDN主要由3个模块组成,128 bit的计数器模块0_CT、8 bit反相器模块以及8 bit TRC校验器模块TRC。每一轮运算的初始阶段,128 bit中间加密信息位C传输到0计数器模块0_CT,产生8 bit检验位,并通过反相器传输到TRC校验器模块。同时128_reg寄存器输出数据,通过错误检测网络(EDN)的0计数器0_CT产生8 bit检验位,两组校验位进行TRC差分比较,输出结果Z0、Z1。
4 防护电路仿真与验证
为了检测设计的防护电路的可行性与性能,采用Verilog硬件语言,选用Altera 的EP2C35F672C8器件,使用QuartusII软件对设计电路进行了综合与仿真验证。在不加错误检测电路与加入错误检测电路的情况下,对AES进行综合分析,结果如表1所示。
其中EDN是指错误检测电路模块。从表中可以看出,防护电路占用资源比较少,只有709个逻辑单元,整个AES密码芯片的功耗只增加了18.22 mW,资源冗余增加不到整体资源的10 %,在设计抗故障攻击的电路时可以接受这样的防护电路。
仿真验证的过程中,为了更好地模拟故障攻击过程,对AES的中间存储顶层模块进行修改,引进了2个新的信号:change_en和ERROR。change_en代表对寄存器进行某些位的修改,当其为高电平时有效,即寄存器的某些位发生翻转。ERROR信号代表错误的产生,ERROR=~,当其为高电平时,表明寄存器产生了错误,低电平时表明寄存器正常工作。
从电路仿真结果图5中可以看到,输入正常的情况下(80 ns~150 ns)产生差分的Z0、Z1,ERROR信号为0,代表芯片正常工作,在模拟引入随机错误(155 ns时,change_en=1)之后,输入数据的最高位发生了变化,系统输出了差错信息,Z0、Z1不再是差分的,ERROR信号也变为高电平1。可见,此电路能正确检测出中间数据寄存器是否有错误产生,能够快速准确地检测出差分故障攻击导入的错误,提高了系统的安全性。仿真结果显示达到了设计的要求。
差分故障攻击已经成为密码芯片的严重威胁,本文分析了DFA攻击原理,对攻击过程和攻击算法进行了描述。针对DFA对AES密码芯片的攻击特点,设计了抗DFA的防护电路。在AES架构的中间数据寄存器处,增加了基于TRC校验器的抵抗差分故障攻击的模块。仿真结果表明,该防护电路能够达到防御DFA攻击的目的,增强了AES芯片抗故障攻击的能力。此外,这种基于TRC校验器的防护电路的设计思想也可以运用到其他需要防护DFA攻击的密码芯片中。
参考文献
[1] BONEH MILLO D, LIPTON. On the importance of checking cry-ptographic protocols for faults[C]. In proceedings of EUROCRYPT′97,LNCS,1997:37-51.
[2] BIHAM E, SHAMIR A. Differential fault analysis of secret key cryptosystems[C]. In:Proceedings of Crypto′97,1997,1294:513-52.
[3] STALLINGS W. 密码编码学与网络安全[M].北京:北京电子工业出版社,2006.
[4] CIET M, JOYE M. Elliptic curve cryptosystems in the presence of permanent and transient faults[J]. In designs,Codes and Cryptography,2004.
[5] PEACHAM D, THOMAS B. A DFA attack against the AES key schedule[J]. Siventure,October 2006.
[6] DUSART P,LETOURNEUX G, VILOLO O, et al. Fault analysis on AES[C]. Lecture Notes in Computer Science,2003,2846:293-306.
[7] MORADI A, MOHAMMAD T, SHALMA M,et al. A generalized method of differential fault attack against AES cryptosystem[C]. CHES 2006,2006: 91-100.
[8] 范益波,曾晓洋. 安全芯片中防御差分故障分析模块的VLSI设计[C].第十九届电路与系统学术年会.安徽合肥中国科学技术大学,2005.