vlambda博客
学习文章列表

对称加密算法之DES

这是逸风同学密码学系列的第三篇,讲对称加密算法DES。什么是DES?具体加密逻辑是什么呢?请往下看。

   一       



在聊加密算法DES之前,我们先回顾一下第二期的文章,

首先,我们介绍了异或运算这种最简单的加(解)密算法。在计算机内处理时,所有的消息都被编码成二进制表示,随后可以使用与原文相同长度的二进制比特位作为加(解)密密钥,进行加(解)密操作。

其次,我们分析了一次性密码本算法所存在的问题。由于需要保存与原文相同长度的加密密钥,因此这种算法很难在实际场景中得到应用。

因此,我们所期望的实用的加密算法应当是能够使用固定长度的密钥对任意长度的文本进行加(解)密操作的,如何做到呢?

于异或运算中,明文与加密密钥必须长度相同,因此,我们可将上述问题划分为两个步骤。 第一步,我们可以设计一种仅支持加密固定长度(例如64bit)明文的加密算法。 第二步,我们可以设计一种分组加密的融合算法。

对于任意给定长度的明文,我们将其划分为多个分组(分组长度与所选定的加密算法相关),随后使用融合算法对各分组分别进行加密。 最简单的融合算法即是对每一分组分别加密,各分组密文组合即为原文所对应的密文。 稍微复杂一些的融合算法,可能会在各分组间引入依赖关系。 例如将前一分组加密的密文作为下一分组加密过程的输入。


接下来我们主要介绍支持加密固定长度明文的算法DES。关于分组加密的融合算法,会在后续的文章中,陆续介绍。

对称加密算法之DES

   二       



DES全称叫(Data Encryption Standard), 是1977年美国联邦信息处理标准(FIPS)中所采用的一种 对称加密算法,可实现对64bit明文的加密。

DES算法的基本结构是 Feistel网络在网络的每一轮处理中,输入的64bit被划分为左右两部分,各32bit。其中右侧32bit直接输出,将该轮子密钥与右侧32bit一起输入轮函数f,计算得到用于左侧32bit加密的密钥。可以看到,在Feistel网络的加密中,右侧32bit按照原文直接输出,因此在实际应用中,必须采用多轮加密,并且在下一轮处理中,需要将当前轮的左右两边进行互换。否则,右侧32bit一直是作为明文输出的。DES算法采用的Feistel网络包含16轮。在多轮加密中,每一轮的子密钥是根据算法初始密钥,使用子密钥生成算法计算得到的。

 

对称加密算法之DES

 

Feistel网络基本结构并不难理解,但是为什么它要如此设计呢?为了提高加密强度,feistel网络中使用轮函数对每一轮的子密钥和右侧数据进行计算,生成用于加密左侧的密钥,而不是直接使用子密钥对左侧明文进行加密。因此,轮函数设计的越复杂,算法被破解的难度也越高。为了支持任意复杂的轮函数,feistel网络不要求轮函数的可逆性。但是加密算法必须是可逆的,否则我们就无法对密文进行解密了。由此, 如果采用一个不可逆的轮函数,右侧文本必须是原文,只有这样,才能通过该轮函数计算出用于解密左侧文本的密钥。


对称加密算法之DES


观察Feistel网络的加密与解密过程,可以发现,加密与解密基本是完全一致的,唯一的区别在于加密与解密过程中使用的轮函数顺序是相反的。


以上,就是对DES算法的简单介绍。下篇文章,将介绍在分组加密中的各类分组融合算法。


对称加密算法之DES

   三       



附逸风同学的笔记图片

对称加密算法之DES