《网络安全0-100》单钥加密体制

单钥加密体制

DES算法

DES属于对称密码算法中的分组加密(块加密),和流密码相对应。DES算法将明文分为若干个64位块(不足补充),秘钥为56位(8位校验位)。DES算法流程图如下

016e751a977542cb9ecf5f06735885fe.jpg

 接下来,进行DES算法关键步骤的逐步解析:

IP置换

IP置换和IP逆置换,还有后面提到的P置换逻辑都是一样的。例如下图IP置换矩阵的第一行第一列为58,含义即为将第58个元素位置换为第一个。置换完后密文长度不变,仍为64位。

a4cde933b1b147a1b2058abc1c115c0c.jpg

 E扩展

64位字段可以分为前32位和后32位,前32位不变,后32位进行E扩展置48位,具体扩展方法如下:

8689e65ad3ee4af194092e7f2a7fe46a.jpg

 例如图中原本的32位字段为,将32位字段分为8组,每组前后各加两个比特,组成新的6×8=48位字段。新加的两位分别是前一组字段的最后一位和后一组字段的第一位,见下所示。

11010001 0011 0100原文本

011010 100010 100110 101001 E扩展文本

S盒压缩

S盒是精心设计的8个矩阵,是DES算法中混淆的关键部分,他的质量(随机性)很大程度影响DES的加密效果。

之后,我们要再将E扩展后的48位后半字段,通过S盒压缩为32位,具体压缩方法如下:

先将48位分为8组,每组6位。6位取出前两位和中间四位,拼成2进制数,再将2进制转化为十进制,即经过一系列操作,将6位数变为2个十进制数。将这两个十进制数当作横纵坐标,寻找S盒中对应的十进制数,再将这个十进制数用4位2进制表示。至此,我们将48位文本压缩为了32位。

5dbfeb5c88724f63a4682fc45d3899fc.jpg

 (3,15)在S盒中对应的元素为13(查表得),之后转换为二进制1011,所以通过S盒我们将111111压缩为了1011。

P盒置换

P盒压缩和IP置换思路大致相似,例如第一行第一列元素为16,即将第16位置换到第一位,剩余以此类推。

7b17d599eac34218aad44c380c93f4ff.jpg

 秘钥生成

秘钥生成思路流程图如下:

ab39677bbc6e4ddc8dea128bede30180.jpg

 如图中的流程,首先需要进行一次PC-1的选择置换,即去掉密钥中的校验位(8,16,...,64)。去掉8位校验位还剩下56位密钥,将56位分为C_0(前28位)和D_0(后28位),根据下表进行密钥的循环左移(如图中密钥表的计算逻辑)。得到的C_iD_i进行合并后,再进行一次PC-2的选择置换,将密钥流变为48位。

Feistel结构及证明

5394c19f89694a91a45cc8b7d8fea101.jpg

 如图可见,只要密钥倒置就可以解密密文。数学证明如下:

加密过程是:明文m=LEol|REo,进行n轮迭代。

按下列规则计算LEn|REn,1sisn,轮函数为F

LE;=RE;-1

RE;=LE;-1F(RE;-1,K)

进行n轮迭代运算后,得LE_n和RE_n,输出密文C=REn||LEn

解密过程与加密过程采用相同的算法:密文分组C=RE,||LEn=LDol|RDo。

按下述规则计算LD,||RDn,1sisn,轮函数为F

LD;=RD;-1

RD;=LD;-1+F(RD;-1,Kn-i+1)进行n轮迭代运算后,得LD,|RD,,输出明文m=RDn LDn

下面即需要证明

m=LEol REo=RD, LDn,显然:LD;=RD;-1=LEn+1-i=REn-iRD; = LD;-1 F(RD;-1,Kn+1-i) 二

REn+1-i F(LEn+1-i,Kn+1-i)=LEn-i当i=0可得LEol|REo=RDn LDn,所以Feistel结构是可逆的。

猜你喜欢

转载自blog.csdn.net/2301_77069887/article/details/131312013