【随记】从入门到入土的密码学 | DES

答应过大家,咱们今天开始正式聊聊加密算法。今天给大家带来的是DES算法。

其中可能会涉及一些进阶的数学知识(当然,这次没有),但鹦鹉先生将会尽自己所能,把话说得尽量浅显易懂一些,也欢迎大家私信我,告诉鹦鹉先生:你更喜欢哪种解释说明的方法?

那么废话不多说,咱们开工!

 

DES全称为Data Encryption Standard,即数据加密标准,是一种使用对称密钥加密的块算法。由于如今计算机运算性能远超从前,DES已经不太安全了,但是我们还是要讲一讲它,因为它非常经典,通过分析它的结构,对后续进阶的加密算法的学习,有着巨大帮助。

Hashcat已有针对DES类算法的爆破手段

首先,我们来从全局看看DES长啥样:

从图中看,我们需要64比特的明文和56比特的密钥。之后,将两者塞进这个大结构里面,就可以得到密文了。

这里,先解决一些问题:

  • 有的朋友可能发现,DES一次只能加密64比特,万一我的数据远超64比特(大多数情况)或者少于64比特(极少数情况,我猜你是故意找茬的)咋办?

  • 算法具体怎么执行,这些“置换”、“移位”如何操作?

对于第二个问题,鹦鹉先生下面就会和大家讲清楚,咱们先来聊聊第一个有趣的问题。

在介绍DES时,鹦鹉先生说它是“块”加密算法,意思就是——一次只加密一小块数据。对于“块加密”类型的算法,我们需要将数据切割成很多个符合它“胃口”的数据块,再配合密码工作模式(后续章节会讲到),就可以源源不断地输出密文了。那不够64比特咋办?把它填充到64比特就OK了。

下面,咱们开始拆解DES的大结构,详细分析每一部分。

初始置换

其实就是简单查表。先把64比特的比特串按照8x8的方形排列好,再按照表上对应位置的序号,从方形矩阵里面拿出这个比特,放到对应位置即可。

举一个例子,表格的第一个“58”,意为——你需要在方形矩阵里,取出第58个比特,把它放到第一个位置。

熟练以后,你会发现:其实就是隔列从下到上取出比特串,再把它横着写成8x8的矩阵,就完事了!

至于大框架结束时的“逆初始置换”,也是查表,而且方法和初始置换一模一样。它的表格长这样:

写熟了,也就是隔行从右往左取出比特串,再把它竖着写成8x8的矩阵。

16轮迭代

每一轮都长这样:

把一组64比特的块,分成左右两半,右边一半直接是本轮输出的左半边,左半边要和右半边操作一下的结果进行异或操作,再得到本轮输出的右半边。这个操作为:进入“F”函数,再输入一个轮密钥。

其实就相当于左手倒右手,右手倒左手的橡皮泥,只不过左手的橡皮泥要再捏吧两下子。

把F函数拆开来,就长这样:

其中,“E”表示扩展变换,“P”表示置换变换,S1到S8叫“S盒”,用于代换操作,都是查表。

E扩展

将32比特写成8x4的矩阵,进行查表扩展操作:

红线中间的是原来的比特,两侧的是新加的比特,看看能不能找到规律?

S盒

将红线内的比特作为列标,红线外的比特作为行标,去查每一个S盒的表即可。

至此,DES的主加密过程已经讲解完毕。还有一个每轮48比特的轮密钥产生算法,咱们现在就解决它。

置换选择1 and 2

同样的,去查表,结束。

你可能发现了,咋没有8、16、24等等的这些位呢?因为它们是奇偶校验位,可以去掉。

循环左移

最后的最后,就是循环左移。只有第1、2、9、16轮移动1位,其余轮都左移2位。

以上内容,你,Get到了吗?

Reference: 

《现代密码学 -- 杨波 著》

《Cryptography and Secure Communication -- Richard E. Blahut》

《Computer Security: Principles and Practice (Fourth Edition)》

部分图片源于互联网

猜你喜欢

转载自blog.csdn.net/m0_60483056/article/details/125773880
DES