作者:李悦
1DES算法加密原理
DES算法为密码体制中的对称密码体制,又被称为美国数据加密标准。典型的DES以64位为分组对数据进行加密,加密和解密用的是同一个秘钥。DES算法密钥长为64位,但实际有效秘钥长度是56位,另外8位(第8、16、24、32、40、48、56、64位)作为奇偶校验位使用。分组后的明文组和56位的密钥按位替代或交换的方法形成密文组。图1为DES算法的加密流程图。
图1 DES算法加密流程图
加密步骤:
1)输入64位明文数据,并进行初始IP置换;
2)在初始IP置换后,明文数据被分为左右两部分,每部分32位,以L0,R0表示;
3)在秘钥的控制下,经过16轮运算(f);
4)16轮后,左、右两部分交换,并连接再一起,再进行逆置换;
5)输出64位密文。
加密和解密唯一不同的是秘钥的次序是相反的。就是说如果每一轮的加密秘钥分别是K1、K2、K3...K16,那么解密秘钥就是K16、K15、K14...K1。为每一轮产生秘钥的算法也是循环的。加密是秘钥循环左移,解密是秘钥循环右移。
1.1IP置换IP置换目的是将输入的64位明文按位重新组合,并把输出分为L0、R0两部分,每部分各长32位。IP置换规则如表1所示:
表1 IP置换表
表中的数字代表新数据中此位置的数据在原数据中的位置,即原数据块的第58位放到新数据的第1位,第50位放到第2位,……依此类推,第7位放到第64位。
置换后的数据分为L0和R0两部分,L0为新数据的左32位,R0为新数据的右32位。要注意一点,位数是从左边开始数的,即最0x0000 0080 0000 0002最左边的位为1,最右边的位为64。
1.2密钥置换DES算法由64位秘钥产生16轮的48位子秘钥。在每一轮的迭代过程中,使用不同的子秘钥。子秘钥产生过程如下:
1) 把密钥的奇偶校验位(即每个字节的第8位)忽略不参与计算,将64位密钥降至56位,然后根据密钥置换选择PC-1将这56位分成两块C0(28位)和D0(28位);
2) 将C0和D0进行循环左移变化,每轮循环左移的位数由轮数决定,如表2所示;
3) 变换后生成C1和D1,然后C1和D1合并,并通过密钥置换选择PC-2生成子密钥K1(48位);
4) C1和D1再次经过循环左移变换,生成C2和D2,然后C2和D2合并,通过密钥置换选择PC-2生成密钥K2(48位);
5) 以此类推,得到K16(48位)。
表2 循环左移位数表
表3 密钥置换选择PC-1表
表4 密钥置换选择PC-2表
经过IP置换后,进行16轮完全相同的运算,在运算过程中数据与秘钥结合。函数f的输出经过一个异或运算,和左半部分结合形成新的右半部分,原来的右半部分成为新的左半部分。每轮迭代的过程可以表示如下:
其中:Kn是向第N层输入的48位的秘钥,f是以Rn-1和Kn为变量的输出32位的函数。
函数f由三步运算构成:E扩展置换、S盒代替、P盒置换。图2为函数f的计算流程。
图2 函数f运算流程图
1.3.1 E扩展置换
扩展置换改变了位的次序,重复了某些位。扩展置换的目的:
a、产生与秘钥相同长度的数据以进行异或运算,Rn是32位,子秘钥是48位,所以Rn要先进行扩展置换之后与子秘钥进行异或运算;
b、提供更长的结果,使得在S盒代替运算时能够进行压缩。通过扩展置换E,数据的右半部分Rn从32位扩展到48位。E扩展置换规则如表5所示:
表5 E扩展置换表
表中的数字代表位,两列红色数据是扩展的数据,4位变为6位。可以看出,扩展的数据是从相邻两组分别取靠近的一位,如靠近32位的位为1,靠近1位的位为32。
1.3.2 S盒代替
E扩展置换之后,右半部分数据Rn变为48位,与密钥置换得到的轮密钥进行异或,其结果作为输入块进行S盒代替运算。
S盒代替是把48位数据变为32位数据。代替运算由8个不同的代替盒(S盒)完成。每个S-盒有6位输入,4位输出。所以48位的输入块被分成8个6位的分组,每一个分组对应一个S盒代替操作。经过S盒代替,形成8个4位分组结果。
表6为S盒代替表。一个S盒就是一个4行16列的表,盒中的每一项都是一个4位的数。S盒的6个输入确定了其对应的输出在哪一行哪一列,输入的高低两位做为行数H,中间四位做为列数L,在S盒中查找第H行L列对应的数据(<32)。
表6 S盒代替表
S盒计算过程:以S盒8为例
假设S盒8的输入(即异或函数的第43~18位)为110011。第1位和最后一位组合形成了11(二进制),对应S盒8的第3行。中间的4位组成形成1001(二进制),对应S盒8的第9列。所以对应S盒8第3行第9列值是6。则S盒输出是0110(二进制)。
S盒代替是DES算法的关键步骤,所有的其他的运算都是线性的,易于分析,而S盒是非线性的,相比于其他步骤,提供了更好安全性。
1.3.3 P盒置换
S盒代替运算,每一盒得到4位,8盒共得到32位输出。S盒代替运算的32位输出按照P盒进行置换。该置换把输入的每位映射到输出位,任何一位不能被映射两次,也不能被略去。经过P盒置换的结果与最初64位分组的左半部分异或,然后左右两部分交换,开始下一轮迭代。P盒置换规则如表7所示:
表7 P盒置换表
IP逆置换是初始置换的逆运算,DES最后一轮,左、右两半部分并未进行交换,而是两部分合并形成一个分组做为逆置换的输入。IP逆置换规则如表8所示:
表8 IP逆置换表
IP逆置换方法同IP置换,此处省略。经过以上步骤,就可以得到密文了。
2DFA攻击原理
DFA主要利用在相同秘钥下对若干明文进行加密的过程中产生的错误来回复秘钥。攻击假设攻击者能够采集到若干个密文对(C,C’),每对都应用明文P被正确加密时产生的C和错误加密时产生的C’。攻击中,DFA通过分析C与C’之间的差分值来推到秘钥。
2.1错误传递分析图3是f函数变换的错误传播过程,阴影表示该部分数据注入了错误。假设错误注入在第15轮迭代之后,即选取中间状态中R15的某个比特并取反。因为R16=R15,所以R16的同1比特也发生错误,而L16是R15经过f变换得到,f变换中的E变换有可能将单比特错误扩散为2比特,然后经过非线性的S盒变换,此时就可能有1个或者2个S盒的输出产生错误,随后的P盒置换和逆IP置换只会改变比特的位置而不会增加错误的比特数。因此,对错误密文与正确密文都进行IP变换恢复出各自对应的L16和R16之后,再将L16进行逆P变换,将很容易观察到预想的1个或者2个S盒的错误。
图3 错误传递流程图
2.2第16轮攻击DFA攻击过程
假设错误注入在第15轮迭代之后,则针对DES算法的差分故障分析可分为三步:
Ø 首先,通过对DES算法第16轮DFA攻击获得第16轮子密钥K16(48bit);
Ø 其次,通过一组明文-密文28穷举获得56bit种子密钥;
Ø 最后,每7bit补充1bit奇偶校验即为64bit加密密钥。
3.1获得第16轮子密钥K 161)根据1对密文对(C,C’)计算出活跃S盒的K16,i候选值
置换差分密文对(C,C’)得到第16轮运算后的密文对(C16,C16’),其中C16=IPC,C16’=IPC’,拆分后可分别得到(L16,R16)=C16和(L16’,R16’)=C16’
将L16、R16、L16’、R16’带入等式(3),遍历K16,i(000000-111111),并令等式左边不等于0的值即为获得的可能的K16,i
2)根据多个密文对最终确定K16,i及K16
3.2获得56bit种子密钥1)对K16(48bit)逆PC-2置换获得部分C16(28bit)和D16(28bit),未知位可以x代替(共8bit)
2)对(C16,D16)逆PC-1置换获得56bit种子密钥,未知位可以x代替(共8bit),通过一组明文-密文穷举28即可获得56bit种子密钥
3.2 每7bit补充1bit奇偶校验即为64bit加密密钥K 4软件实现
根据上述章节内容,本节采用C++实现了针对DES算法的加密、解密运算以及基于差分分析思想的密码故障攻击算法,其软件界面如图4所示。
图4 DES算法差分故障分析软件界面
热烈欢迎对密码差分故障分析感兴趣的老师、朋友们交流学习。
你可能错过了的好文章:
密码芯片激光故障注入测试
器件SEE薄弱点的激光测绘技术
单粒子锁定的幽灵再现28nm等工艺SRAM型FPGA
做实验,搞科研,学知识
▼