一、差分分析
上图是2轮DES的框架图。是已知的,试图找出B和C的差分值:
同样,为了计算方便,将L0等于L0*,那么,差分值就变成:
二、代码实现
如果大家对代码实现感兴趣的话,可以根据2轮DES差分分析原理,对1轮差分分析代码做出调整,完成2轮差分分析代码实现。这里把2轮DES差分分析的过程以视频的形式呈现给大家:
第一步,我们创建了一个2轮的DES用来接下来的差分分析,这里将初始密钥和子密钥都打印了出来,主要是为了学习过程中将差分攻击结果和正确密钥进行对比,通过观察密钥的一些细节变化,增加大家对DES的整个差分攻击过程的理解和印象。接下来的差分分析过程中除了生成用于差分分析的明密文对时需要使用的这一步生成的密钥之外,其他操作皆不使用。
第二步,进行5次差分分析,每次都生成两对明密文对,用于差分分析。差分分析的结果为密钥猜测列表,随着差分分析次数不断累加,具体的差分分析过程为:
1、将两对明密文对进行分组,明文1使用(L0,R0)表示,明文2使用(LL0,RR0)表示,编号的最后一位表示第几轮数据,因此我们使用(L2,R2)表示密文1,(LL2,RR2)表示密文2。
2、将密文分组中的L2和LL2 做E盒运算,扩充为48bit,做异或运算获取48bit大小的第2轮DES加密输入差分,然后将差分结果6bit一组分成8组。
3、将R2和RR2异或,获取32bit第2轮DES加密输出差分,将差分结果4bit一分组分成8组。
4、输入差分第一组对应S1盒输入差分,输出差分第一组作为S1盒输出差分,输入差分第二组对应S2盒输入差分,输出差分第二组作为S2盒输出差分,以此类推,通过每个S盒的输入输出差分关系表获取每个S盒可能的输入值(明文异或子密钥后的值,这里用B表示)
5、将L2或者LL2做E盒运算,获取48bit输入明文,然后将48bit明文6it一分组分为8组,对应8个S盒。
6、将上一步获取的8组6bit输入明文中第一组明文跟和S1盒对应的所有B值依次异或,获取2轮S1盒的密钥猜测列表,依次类推,最终获取8个S盒的所有第2轮密钥猜测列表。
将以上操作进行5次累加操作后,获取一个比较大的密钥猜测列表:
第三步,对已获取的密钥猜测列表进行统计分析,统计列表共分为8组,默认每一组中出现频率最高的为正确密钥,将每一组中猜测的正确密钥转化为6bit二进制后再转化为16进制,依次拼接,获取48bit的16进制串,作为猜测的第二轮DES加密子密钥。
第四步,对上一步生成的48bit子密钥剩余8bit进行穷尽,然后置换为64bit,获取初始密钥,这个时候大家会发现我们猜测的初始密钥跟实际的初始密钥个别位置并不相同,不着急,我们接着进行测试。
第五步,使用第一步的密钥加密获取1000对明密文,然后使用第四步我们猜测获取的初始密钥对每一个密文进行解密,发现解密结果正确率100%,大家可以思考这是为什么。
欢迎关注赛格睿特的伙伴们在评论区留言想看的专题和想要探讨的内容哦!
标签:分析,DES,差分,明文,获取,密钥,密文 From: https://www.cnblogs.com/sgrtsec/p/18246156