文献标识码: A
文章编号: 0258-7998(2015)05-0050-03
0 引言
随着计算机技术的发展、社会信息化程度的不断提高,安全问题越来越受到人们的广泛重现,因此各种形式的专用密码电路和密码算法处理器被广泛地应用于各类产品中。分组密码算法是一种最常用的加密手段,具有速度快、易于标准化和便于软硬件实现等特点。目前比较流行的分组密码算法有DES算法、AES算法等,其中DES[1]是目前使用非常广泛的数据加密方法,它于1977年被美国国家标准局作为第46号联邦信息处理标准而采用。
传统的密码分析方法是采用数学的分析手段。近年来随着测量分析方法的进步,各种分析攻击方法也不断发展,差分功耗攻击和故障攻击是具有代表性且对智能卡芯片威胁性较强的两种攻击方法。差分功耗攻击是1998年由Paul Kocher等[2]提出,它利用了密码设备运行期间泄露的侧信息与密码算法的中间值有一定的相关性,通过多次测量侧信息后进行统计分析,进而获得密钥信息。故障攻击的基本原理是将密码芯片置于强磁场中,或者改变芯片的电源电压、工作频率、温度等,使密码芯片中的寄存器、存储器在加解密过程中产生随机错误,某些输出比特从原来的0变成1或1变成0。通过对正确密文输出和错误密文输出的比较,经过理论分析得到芯片内部的秘密数据信息。
国内外对于差分功耗攻击和故障攻击防御方面的研究和技术方法也不断涌现,防御差分功耗攻击的方法包括:随机掩码、动态双轨电路技术、随机伪操作等,防御故障攻击的方法主要包括对相同的数据计算多次后比较运算结果是否一致。但有的防御方法往往会增加实现代价,而计算多次比较运算结果又会降低算法运算效率。本文以DES算法为例,提出了分组密码算法的一种有效防护方法,可以同时抵御差分功耗攻击和故障攻击。采用流水线技术同一时钟周期内有不同的轮运算操作叠加,增加了正常加解密运算的噪声,可以抵抗侧信道攻击,同一明文依次进入不同级的流水线进行运算,最后比较运算结果是否一致,可以抗故障攻击。通过对电路的仿真和分析,验证了其良好的抗攻击性能。
1 DES差分功耗分析及故障攻击
DES是一个分组算法,使用长度为56 bit的密钥加密长度为64 bit的明文,获得长度为64 bit的密文。它的加密过程如下:
(1)给定明文m,对m进行一个固定的初始IP置换。
(2)然后进行16轮完全相同的运算,将数据与密钥相结合。在16轮操作的每一轮中,DES都会进行8次S盒查表操作。这S盒的输入为6 bit的密钥与E扩展后的6 bit R寄存器的异或值,输出为4 bit。32 bit的S盒输出经过P置换,然后与L寄存器的值进行异或,接着将L和R的值进行交换。
(3)进行初始置换的逆置换,得到密文。具体过程如图1所示。
1.1 差分功耗分析
目前绝大多数集成电路均采用CMOS工艺制作,CMOS门级电路的功耗模型[3]为:
Ptota1=Pswitch+Pshort_circuit+Pleakage
其中Pswitch为逻辑门翻转引起负载电容充放电导致的功耗;Pshort_circuit为短路电流导致的功耗;Pleakage为泄漏电流导致的功耗。其中Pswitch是电路功耗的主要部分,功耗大小与逻辑门是否翻转有密切关系,因此电路中运算数据的0、1状态与电路的功耗必然具有一定的相关性,这个特性是DPA攻击的物理基础。
以DES算法为例,DPA攻击的主要步骤如下:
(1)随机生成大量明文,加密这些明文并记录下加密操作时的功耗曲线。
(2)关注第一轮第一个S盒输出的第一比特b,猜测第一个S盒对应的6 bit密钥,并用其与相应的明文计算出b。
(3)根据b的值,将能耗曲线按照b=0和b=1分为两类。
(4)计算出这两类的平均能耗曲线,并将二者相减求得差分能耗曲线。
(5)观察步骤(4)生成的能量曲线。若密钥猜测正确,则步骤(3)的分组就是正确的,差分能耗曲线中将出现明显的峰值。因此攻击者通过观察峰值来判断密钥的猜测是否正确。
(6)重复步骤(2)~(5),得到其他的子密钥。
这样,通过差分迹中的尖峰,就可以确定出完整的48 bit密钥信息。再使用穷举搜索或继续分析下一轮等方法,可以很容易地确定出剩下的8 bit密钥。
1.2 故障攻击
故障攻击是通过将故障引入到芯片中,如改变芯片的工作频率或工作电压,使得芯片工作不正常,从而获得芯片内部关键信息。
Biham和Shamir提出了对DES算法的差分故障分析[4],该攻击的基本方法如下:攻击者对同一明文加密两次,其中一次正常加密,另外一次在加密的第15轮运算时引入故障,使得芯片输出错误运算结果。攻击者通过记录正确加密结果和错误结果并对这两个结果进行数学分析,即可获得密钥的相关信息。
如图2所示,攻击者在第15轮的f函数运算期间注入故障,则有:
在该等式中只有K16是未知的,通过解方程即可获得密钥信息。
2 DES算法抗差分功耗攻击和故障攻击设计
流水线的概念在数字电路中应用得很广,它是加快数字电路的有效手段,在分组密码算法中应用得同样很广泛,如DES、AES等分组加密算法都有相关的流水线实现方案。
本文通过把流水线技术与抗差分功耗分析和故障攻击相结合,同一明文进入不同级的流水线进行运算,其他级流水线的输入为随机数,这样在同一时钟周期内有不同的运算操作叠加,增加了正常运算的噪声,可以抵抗差分功耗攻击;通过比较同一明文的运算结果是否一致,来检测运算过程中是否有故障注入,可以抵抗故障攻击。
如图3所示,DES算法采用四级流水线,每级流水线进行4轮运算。图中虚线部分表示随机数参与该级流水线运算。
首先产生所需的随机数,一个随机数用于确定这四级流水线中哪两级的输入为真实的明文P,两个随机数作为随机明文进入另外两级流水线,两个随机数分别作为密钥用于为两个随机明文产生随机轮密钥。
这里不妨假设前两级流水线的输入为真实的明文,后两级输入为随机数。待真实明文的两级流水线运算完成后对这两个密文进行比较,若一致则说明运算过程中没有注入故障,可输出正确密文;否则返回错误信息。
当然,为增加抗攻击能力,本文的方法可以与其他防护方法相结合,如每一级的流水线在实现时可以引入随机掩码,这样抗差分功耗攻击的效果会更好一些。
3 实验仿真及分析
以DES算法中轮输出的寄存器为攻击点,采用汉明距离模型,通过仿真实验对本文防护方法的有效性进行验证。
对标准的DES算法和本文的防护方法分别进行VLSI设计,采样后采用Riscure公司的Inspector侧信道分析平台对其FPGA实现进行分析,结果如图4所示。对于标准的DES算法,分析第一轮中的第一个S盒,当猜测到密钥为0x00时会出现明显的尖峰,这说明密钥猜测正确;对于本文的防护方法,当猜测到密钥仍为0x00时没有出现明显的尖峰,说明本方法可以有效的抵抗功耗分析。
4 结论
本文以DES算法为例,给出了一种既可以抵抗差分功耗分析,又可以抵抗故障攻击的分组密码算法防护方法,采用流水线技术不仅增加了正常加解密运算的噪声,同一明文依次进入不同级的流水线比较运算结果是否一致,可以抗故障攻击。通过实验验证,本方法可以有效地抵抗攻击。
参考文献
[1] FIPS PUB 4623,Data Encryption Standard,Federal Information Processing Standards Publication Reaffirmed 1999 October 25,U.S.Department of Commerce/National Institute of Standards and Technology.
[2] KOCHER P,JAFFE J,JUN B.Differential power analysis[C].Proceeding of Advances in cryptography(CRYPTO’99),1999:388-397.
[3] 韩军,曾晓洋,汤庭鳌.DES密码电路的抗差分功耗分析设计[J].半导体学报,2005,26(8):1646.
[4] BIHAME E,SHAMIR A.Differential fault analysis of secret key cryptosystems[C].Proceeding of Advances in Cryptology,1997,1294:513-525.
[5] 张丽娜,陈建华,张家宏,等.基于ASIC的有效DES/3DES流水线设计[J].计算机工程,2007,33(2).