第一作者:刘伟(1991—),女,河北唐山人,硕士.研究方向为信息安全.email:14120405@bjtu.edu.cn.
对分组密码进行截断差分攻击时,部分S盒会产生很多组子密码候选值,导致暴力攻击剩余密钥位时消耗大量时间.本文详细分析了截断差分算法中出现多组密钥候选值的原因,并分析了其出现的概率.提出两种改进截断差分攻击方案,减少候选子密码的数量并提高了攻击效率.第1种方法基于各轮S盒子密钥的非独立性,利用轮密钥在初始密钥中的重复位得到最终的候选值,最终筛选出只有一组候选值的概率达到40%左右.第2种方法将计算得到的8个S盒的所有6比特候选子密钥进行计数,选取出现频率最高的密钥,最终使48比特的候选密码个数缩减为一个.通过对六轮DES密码算法攻击的实验数据分析得知:第2种方法能够恢复出唯一的48比特子密码.
In the process of the truncated differential attack to block cipher, some substitution-boxes(S-boxes) will have a great deal of cipher candidate values, which will use a lot of time when the remaining key is attacked by violence. This paper mainly analyzes the reasons and the related probability of the emergence of multi sets of recommended values, and then puts forward two improvement schemes to reduce the number of the candidate key and improve the efficiency of the attack. The first method uses the incomplete dependence among round keys, and makes full use of the identical key that is in the first and in the final round. But the probability of one set of candidate value is about 40%. The second method uses the whole 6 bits candidate key in 8 S-boxes, and obtains the final key by counting the numbers of values. Using this method can reduce the number of 48 bits candidate to 1 with the probability close to one. Through the 6-round DES attack experimental results, the second method can recover the initial key with the probability close to one.
数据加密标准(Data Encryption Standard, DES)由美国国家标准局于1977年颁布, 具有加解密速度快、易于标准化等特点[1].DES是典型分组密码算法之一, 早期对分组密码的研究基本都是围绕DES进行.到了20世纪90年代, 对DES类密码的分析研究更加深入[2], 并取得了丰硕的研究成果.具有重大意义的成果之一便是差分密码分析(Differential Cryptanalysis)[3]和线性密码分析(Linear Cryptanalysis)[4]的提出, 这两种分析方法也可用于当前的迭代密码.同时, 人们也在差分密码分析和线性密码分析的基础上, 提出了很多其他的分析方法.如对差分密码分析推广的高阶差分密码分析、不可能差分密码分析和矩阵分析等[5]; 而非线性密码分析、多重线性密码分析和差分-线性密码分析等都是线性密码分析的推广和扩充.
差分密码分析和线性密码分析被认为是迄今已知攻击迭代密码最有效的方法之一[6].线性密码分析方法与差分密码分析方法的结合也被认为是一种非常有效的方案[7, 8].差分密码分析在1990年的CRYpto会议上被发表[9, 10], 它由文献[10]针对DES算法提出, 本质上属于选择明文攻击.其分析过程如下:分析者寻找具有某些特定差分的明文, 同时获得相应的密文对, 比较这些带有某种特性的明文对和密文对, 计算密钥的概率值, 取概率最高的密钥作为最可能的加密密钥[11, 12].
但是差分攻击方法并不是对所有分组密码都有用, 因为对于某些分组密码, 几乎不可能找到高概率的差分特征[13].差分密码分析也会受到分组密码轮数的影响.如当轮数为17时, 差分密码分析需要花费的时间与穷尽密钥搜索相同.另一方面, 差分密码分析需要大量具有某些特定差分的明文对及其相应的密文对作为支持.
针对这些缺点, 1995年, 文献[14]提出了针对DES的截断差分密码分析方法.截断差分密码分析只需要知道部分比特上的差分特征, 相对于传统的差分特征, 它可以完成更多轮数的攻击, 或是以更低的复杂度攻击相同的轮数.因此截断差分的思想在分组密码中得到了广泛的应用, 如文献[15]使用截断差分的方法成功的攻击了13轮的3D分组密码.文献[16]应用了截断差分的思想攻击了5轮Salsa算法.文献[17]使用截断差分攻击方法成功的攻击了12轮Camellia-128算法, 恢复了所有的密钥.文献[18]则将截断差分的思想与线性密码分析方法结合, 分析了对9轮和11轮DES算法的攻击过程.
尽管截断差分攻击算法相对于传统的差分攻击算法具有一定的优点, 但是其密钥恢复算法存在缺陷.比如, 截断差分攻击在最终使用穷举方法前得到的45比特密钥候选值有很多组.所有的这些45比特密钥候选值剩余的11比特使用暴力攻击方法, 这将浪费很多资源.
本文作者针对上述问题, 提出了两种改进方案.实验结果表明:这两种方案都能减少候选密钥的个数, 特别是第2种方法能够以很大的概率获得唯一的候选密钥, 大大提高了密钥攻击时的效率.
DES加密算法是一种对称加密算法, 它使用56比特的密钥, 明文和密文的长度均为64比特, 加密算法和解密算法基本相同.算法中的S盒的结构对算法的安全性有较大的影响.
截断差分密码分析是差分密码分析的推广, 它只要求知道某些比特的差分, 甚至某些情况下, 仅仅知道1比特的差分就能够成功的攻击一个分组密码或其低轮变形.
六轮DES截断差分攻击方法基于一个四轮的截断差分特征, 如图1所示.由于DES的初始置换和末尾置换函数均为公开函数, 不影响攻击方法分析, 本文作者在分析过程中将忽略初始和末尾置换, 以及DES加密最后一轮得到密文也不再做交换.
在DES加密算法中, 由于扩展函数
用R表示扩展函数E的32 比特输入, K表示扩展函数E的轮密钥, 它的长度为48比特.表2为DES算法的比特选择表.
根据表2可知, 扩展函数
同理, 只改变
截断差分密码分析过程中, 对于每一个
对每一个K1, 1 的候选值, 都有相应的4个正确对与之对应, 如果每一个K1, 1与相对应的4个正确对是一一映射的关系, 文献[14]实现攻击的过程将会更加完美, 然而这种关系并不是一一映射关系, 而是多对多的关系.这种关系的存在使得在密钥恢复的过程中具有多种组合, 而且存在这种多对多的关系的密钥和明文对所占百分比为47%.其具体关系如表3所示.由于K1, 1 代表的是二进制000000到111111的所有可能取到的值, 可能情况较多且直接表示较为麻烦, 因此本文为了方便, 将二进制K1, 1 的所有取值使用十进制来表示.例如表中K1, 1等于10, 则实际代表的是6位二进制001010.
表3中, 数值0~63代表的就是K1, 1 可能取到的全部十进制值, 与该数值所对应的下一行数据代表的是与K1, 1 对应的4个正确明文对的下标值. 第1个明文对是Pi 和P1_j组成的正确对, 第2个明文对是P2_j和P3_j组成的正确对, 这两个明文对形成的差分为0x20000000.第3个则为Pi 和P2_j组成的正确对, 第4个为P1_j和P3_j组成的正确对, 这两个形成的差分为0x40000000, 其中
分析表3后可得以下结论, 在
本文的第1种改进方案选择了第1轮中第1个、第2个、第5个S盒, 并相应得到第6轮中第1个和第7个、第2个和第6个、第5个和第8个S盒的6比特子密钥.这样可以得到54比特的密钥, 但是因为有些轮密钥在初始密钥中所占的位是相同的, 所以最终得到的是45比特密钥.
同时, 充分利用这些恢复的密钥中有重复位这一特点, 如果初始密钥中有一位在某一轮密钥中不能确定时, 则因为另外一个轮密钥, 很有可能使得该位变得唯一而确定.如
为了进一步提高此阶段只有一个建议值的比例, 本文作者第2种改进方法对恢复的第1轮多个子密钥建议处理措施为直接抛弃, 具体措施如下:使用第1轮中第1个S盒, 可以获得第6轮第1个和第7个S盒子密钥, 以此类推, 结合表1, 如果第1轮的8个S盒均被使用, 恰好能够得到完整的两组第6轮8个S盒的48比特密钥, 通过对两组48比特密钥的筛选, 能够得到唯一确定的48比特子密钥.
每组轮密钥中, 每个S盒的6比特密钥可能具有多个值.解决方式是构建8个具有64个计数器的计数矩阵.将长度为6的子密钥视为一个0~63的整数表示, 用64个值对应位置0, 1, 2, 3, …, 63.也就是说, 位置标号代表着长度为6的子密钥.
8个计数矩阵代表8个S盒64种子密钥的候选值.将获得的两组子密钥按照对应标号对相应的计数矩阵做相应的操作, 这样, 每一个矩阵中都有相同的值2, 这些计数器的位置确定了8个S盒的子密钥, 最终获得48比特的第6轮子密钥.
由于第1种改进方法前面叙述的较为详细, 本节将重点介绍第2种改进方法的实现过程.
由于截断差分攻击属于一种选择明文攻击方法, 因此构造明文是重中之重.本算法构造明文的方法具体过程如下:
1)选取4个明文对, 选取的方法如下:
2)选取另4个明文, 选取方法为:
根据选用的明文
3)同理再选4个明文
同理, 将
本文实验在实现的过程中, 32比特的
对于
1)计算c0 =f(K1, PiR), c1 =f(K1,
2)在Pi和P1, j中寻找能够使得等式c0⊕c1 = PiL⊕P1, jL成立的明文对.
3)对P2, j和P3, j, P1, j和P2, j, 以及Pi和P3, j做同样的操作, 筛选出4个明文对.
4个正确对选出来之后, 过滤第6轮子密钥, 过滤方法如下:
1)首先获得DES第3轮函数的32比特输入差分, 记为L'3.在本实验中, 前两组明文对所对应的差分值为0x20000000, 后两组明文对的差分值为0x40000000.
2)将明密文对记为(L0R0, L6R6)和(
同样的,
从而有
式(3)中, R'6为R6和
式中, 每个Ci是长度为4的比特串.那么C1和C7分别是第6轮中S1和S7的输出异或.
3)对于每一个K6, 1和K6, 7的候选值, 按照下式进行计算
通过上述计算可以得到S1和S7的另一个输出异或.当两个异或相等时, 记录K6, 1和K6, 7的候选值, 即为该组正确对的候选密钥.最终结果选择4组明文对均建议的候选密钥.
经过上述筛选, 可以获得
接下来使用
该过程构造的明文为
Pi =Ai || PR其中i=0, 1, 2, 3, Ai = P(ai| r0 | r1| r2 |r3 | r4 | r5 | r6), PR和rk仍全部为0.
P1, j= Bj|| PR⊕0x02000000, P2, j= Bj|| PR⊕0x04000000, P3, j = Bj|| PR⊕0x06000000, 其中Bj =P( r0 |bj| r1| r2|r3| r4 | r5 | r6), j =0, 1, 2, 3, b0 =0x0, b1 =0x4, b2 =0x8, b3 =0xc.
对这十六个明文根据上述攻击第1个和第7个S盒子密钥做同样的操作, 即根据第2个S盒的6比特子密钥筛选出需要的4组正确对, 使用这些正确对按照筛选第6轮子密钥的算法获得
后面使用第3、4、5、6、7、8个第1轮S盒过程均与第2轮相同.明文与差分的选择过程较为方便, 只需要将
上述所有过程均实现完成之后, 则可以获得两组第6轮8个S盒的子密钥.构造8个具有64个计数器的计数矩阵.对两组内每个建议的S盒子密钥进行计数.例如第1组第1个S盒子密钥为010100和011000, 在
通过大量实验测试数据统计, 可得到以下结果:使用第1种方法时, 只有一个密钥候选值的比率在35%~40%左右.有两组候选值比例在45%左右.第2种方法能够使得只有一组密钥候选值的概率为1.
两种方法分别举例说明如下:第1种方法:当被攻击的密钥为0x1d1cf6932d3ce51c时, 以
根据表4中的4对明文及其相应的密文攻击得到的第1轮第1个S盒子密钥
由表5的数据可知, K1, 1有两位不能确定, K6, 1 有两组候选值, K6, 7有一组候选值.利用同样的方法, 可以得到其他所需要的子密钥候选值, 所有的候选值如表6所示.
由表6可知, 如果不做任何处理, 最终得到的45比特密钥的候选值将有4× 4× 4× 2=128种.如果利用轮密钥在初始密钥中的重复位, 可以去掉很多候选值, 如表7所示.
可以看到, 表7中有很多重复位, 当K1, 1 不能确定初始密钥的第25位时, 当K6, 1有两组候选值时, 由于K1, 1 能够确定初始密钥的第15位, 据此位就可确
到目前为止, 只有初始密钥中的第12位、第7位、第32位不能确定, 对这3位使用穷举方法将得到8组45比特子密钥候选值, 达到了降低候选值个数的目的.
第2种方法使用了8个S盒, 假设初始密钥为0x747b5237ba4e2afd, 仍以攻击
利用表9中的4对明文对与相应的密文对, 可以得到表10 中的K1, 1、K6, 1和K6, 7密钥候选值.其中K1, 1有4组候选值, K6, 1和K6, 7分别各有一组候选值.
同理, 按上述方式, 依次用其余7个S盒进行攻击, 这里不再列出相应明文对及密文对, 可得第1轮其他7个S盒子密钥的候选值及两组第6轮8个S盒子密钥候选值, 分别如表11和表12所示.
方法2中抛弃了第1轮8个S盒得到的相应候选值, 只保留两组第6轮8个S盒的子密钥, 将6比特子密钥的二进制形式转换为十进制数, 填入计数器中相应的位置.
通过8个计数器中数据可知, 每一个计数器中都有一个唯一的位置是2, 代表该位置的十进制数正是相应S盒6比特二进制子密钥转换得到, 通过8个计数器, 可以得到唯一的48比特子密钥候选值.
本文首先对截断差分密码攻击的整个过程做了详尽的介绍, 并分析了截断差分密码攻击过程中密钥恢复时会产生多组候选值的原因.基于上述不足, 本文作者提供了以下两种解决方案:
1)由于每一轮的轮密钥都是经过初始密钥变换得来的, 因此, 每轮的轮密钥经过相应的逆变换就可以得到初始密钥.这就导致了不同轮之间的轮密钥中某些位是由初始密钥中的同一位变换而来, 基于此性质, 本文提出了第1种改进方法.该方法能够实现只有一组密钥候选值的概率在35%~40%左右, 而有两组的概率为45%左右.
2)第2种改进方案依次使用了8个S盒进行攻击, 最终能够得到两组第6轮轮密钥候选值.由于这两组候选值中均包含正确的密钥值, 因此通过对这些候选值进行计数, 选出两组均建议的候选值即可.实验结果表明, 该方法的效果优于第1种, 它能够实现只有一组密钥候选值的概率接近为1.
The authors have declared that no competing interests exist.
[1] |
|
[2] |
|
[3] |
|
[4] |
|
[5] |
|
[6] |
|
[7] |
|
[8] |
|
[9] |
|
[10] |
|
[11] |
|
[12] |
|
[13] |
|
[14] |
|
[15] |
|
[16] |
|
[17] |
|
[18] |
|