现代密码算法---DES算法

上一期,我介绍了密码学的基本理论,然后还介绍了最古老的代换密码凯撒密码。当然了古典密码还有很多比如仿射密码、Hill密码、Play fair密码等等,我在这里就不一一介绍了,毕竟这些古典密码基本已经没什么实用价值了,介绍这些也只是让大家了解一下加密/解密的过程,从现在起开始给大家介绍一下现代密码算法。

现代加密算法大致分为量大了两大类分别是:对称加密算法和非对称加密算法。其中对称加密算法还分为分组密码和流密码。它的示意图大概是这个样子的(后面的那些是比较常见的算法,不是全部):

对称钥匙加密系统是加密和解密均采用同一把秘密钥匙,而且通信双方都必须获得这把钥匙,并保持钥匙的秘密。

非对称密钥加密系统采用的加密钥匙(公钥)和解密钥匙(私钥)是不同的

还有一部分算法是用来对数据做提炼的,为消息提供完整性服务。有消息认证码(MAC)和产生消息哈希值的散列函数。这方面技术似乎和现在的区块链结合的挺紧密的,等讲到这部分的时候再说吧。

今天就介绍一些分组密码中的经典DES算法。

说到DES算法,就不得不讲Feistel框架了,

Feistel框架

一种近乎完美大密码体制,同时也是目前大多数分组密码采用的结构它主要采用了乘积密码的思想,交替使用代换和置换。

下面是Feistel的基本结构:

Feistel框架的整个加密就是对同一步骤进行多次循环(DES选择的是16轮循环)。轮数越多加密的效果越好,当然其加密时间也就越长。

现在拿出一轮给大家做一下分析:首先它将输入分为两段,一段为L;一段为R。然后通过轮函数F对左半轮(即L)进行代换,最后在置换:交换左右两段的数据。

在Feistel框架中会把原始密钥生成为若干子密钥,然后子密钥作为每一轮F函数的输入。

写出来,大概是这个样子:

LEi+1=REi

REi+1=LEi⊕F(REi+Ki+1)

其中Ki是子密钥;

下面说DES算法:

DES算法简介

64比特的明文分组输入;64比特的密文分组输出;同时它采用64比特的密钥(但是实际只使用了56位,其中的第8,16,24,3 2,40,48,54,64这八位用作奇偶校验);也就是说DES的密钥共有2的56次方种可能;在DES中Feistel框架进行了16轮操作,在Feistel中64位的数据被分为R和L各32位,子密钥是48位。

DES加密

下面用这个图说明一下DES算法的加密流程吧:

DES解密

加密和解密可以使用相同的算法。加密和解密唯一不同的是秘钥的次序是相反的。就是说如果每一轮的加密秘钥分别是K1、K2、K3...K16,那么解密秘钥就是K16、K15、K14...K1。为每一轮产生秘钥的算法也是循环的。加密是秘钥循环左移,解密是秘钥循环右移。解密秘钥每次移动的位数是:0、1、2、2、2、2、2、2、1、2、2、2、2、2、2、1

DES的解密

当然,就现在的计算机运算速度而言,56位密钥的加密算法,穷举攻击应该很短的时间就能破解了。