基于Feistel网络的DES和3DES加密算法

来源:互联网 发布:网络投稿怎么赚钱 编辑:程序博客网 时间:2024/06/01 22:57

DES加密算法为美国国家标准局公布为数据加密标准的一种分组加密算法

DES算法的分组大小为64位,所用的加密密钥和解密密钥也是64位,因为其中有8个位是做奇偶校检的,所以64位中实际起密钥作用的就只有56位,DES加密和解密所用的算法除了子密钥的顺序不同之外,其他部分是完全相同的

(一)  Feistel网络

1. DES密码结构基于Feistel网络结构,Feistel定义了一个迭代的分组密码算法,其本质是利用乘积密码顺序地执行多个基本密码系统,使得最后的密码强度大于每个基本密码系统所产生的结果

2. 对于一个分组长度为2n位的r轮Feistel型密码,每轮迭代执行的运算相同,每轮的输入取决于前轮的输出

3. 以第i轮为例,描述每轮迭代的运算过程:

        i.     将第i-1轮的输出结果m(i-1)作为本轮的输入,第一轮的输入为原始分组m,并将输入划分为左右长度相等的两部分,记为m(i-1)=L(i-1)R(i-1)

       ii.     将左右两部分交换位置,并将右半部分R(i-1)直接作为本轮输出m(i)的左半部分L(i),同时将右半部分R(i-1)和轮密钥K(i)作为轮函数F的输入,将轮函数F的输出与左半部分L(i-1),这里注意是L(i-1)进行逐位异或运算,得到的输出作为输出m(i)的右半部分R(i)

     iii.     数学表达:
L(i)=R(i-1);
R(i)=L(i-1) ⊕F(R(i-1),Ki);其中⊕代表异或运算

(二)  DES算法原理

        i.     首先对输入的64位分组数据进行初始置换(IP),搅乱数据的原始顺序之后,再分为L0和R0两个32位分组,进入16轮迭代运算(16轮迭代运算结构如下图1),16轮迭代运算的结果作为逆初始置换IP-1的输入,得到加解密结果,而加密与解密的不同之处在与16轮迭代运算中所使用的16个子密钥的顺序不同,加密子密钥的顺序正好与解密子密钥的顺序相反


图1

    ii.     DES算法的初始置换和逆初始置换均通过查表运算完成对输入的换位处理,两个置换表均定义了各自的换位位置,如m1换为m58,m2换为m50



初始置换表           逆初始置换表

     iii.     DES算法中轮函数F计算原理

a. 扩展置换

¨       将32位的R(i-1)输入通过扩展置换为48位数据,扩展置换是一个与密钥无关的纯移位变换,把32位变为48位是为了方便与48位的密钥进行异或运算,扩展变换通过重复选择某些数据来达到目的

¨       将扩展后的48位数据与48位子密钥进行异或运算

¨       通过代换盒(Substitution Box简称S盒)将48位变为32位输出

¨       S盒是一种代换函数,把6位的输入映射为4位的输出,S盒的选择规则为把6位输入的第一位和第六位数字组成的二进制数值代表选中的行号,其余4位数字所组成的二进制数值代表选中的列号,例如,对于输入101011,第一位和第六位组合为11(BIN)=3(DEC),也就是选中的行号为3,然后中间的四位0101(BIN)=5(DEC)也就是第5列,读出来的是9(DEC)=1001(BIN)这样就实现了压缩


         S盒的构成

¨       换位置换使用的盒为P盒,P盒定义了移位表变换,将压缩代换后的32位重新排列得到加密结果,下图为P盒的构成


P盒的构成

       iv.     轮密钥生成算法

a. 首先从64位输入密钥中选出56位来,选择的方法是在一个8x8的列表中每行都有最后一位被忽略,这样就只剩下56位,然后将56位分成两个28位的半密钥作为后面16轮迭代的输入,且这两个半密钥都会被左移1或2位(由迭代次数决定,也是有个表)然后再进行一遍置换选择产生48位的子密钥作为轮函数F的输入

        v.     解密算法中,除了子密钥输出的顺序相反外,密钥的调度过程与加密相同

(三)  3DES算法

1. 目前攻击DES算法最有效的办法是通过穷举攻击,所以可以使用DES算法的派生算法3DES算法来进行加密,3DES算法就是进行3次DES加密

2. 算法原理如下,现有密钥k1,k2,k3,k1可以等于k3,但是三者不能同时相等,用E来表示加密,用D来表示解密
c=E(K3)(D(K2)(E(K1)(m)));  在这里使用了3个密钥进行加解密运算
m=D(K1)((E(K2)(D(K3)(c)));

首发于我的个人网站:点击打开链接


0 0
原创粉丝点击