DES算法详解一(概述)
在过去30年中的大多数时间里,数据加密标准(Data Encryption Standard,DES)显然是最主流的分组密码。尽管当前DES已经不再安全——因为它的**空间实在太小;但DES任然用于那些历史遗留下来难以更新的应用中。此外,使用DES连续三次对数据进行加密——这个过程也成为3DES——也可以得到非常安全的密码,并且此方法至今仍广泛使用。更重要的是,由于DES是目前研究最透彻的对称算法,其设计理念给当前许多密码设计提供了一定的启发作用。因此,学习DES也可以帮助我们更好的理解其他许多对称算法。
1.强加密的基本思想与理念
根据著名信息理论学家Clauder Shannon的理论,强加密算法都是基于以下两种本质操作:
(1) 混淆:是一种使秘钥和密文之间的关系尽可能模糊的加密操作。如今实现混淆常用的一个元素就是替换,这个元素在DES和AES中都有使用;
(2) 扩散:是一种为了隐藏明文的统计属性而将一个明文符号的影响扩散到多个密文符号的加密操作。最简单的扩散元素就是位置换,它常用于DES中;而AES中则使用更高级的Mixcolumn操作。
仅执行扩散的密码是不安全的,比如移位密码。然而将扩散操作串联起来就可以建立一个更强壮的密码。这样的密码也叫乘积密码。目前,所有的分组密码都是乘积密码,因为他们都是由对数据重复操作的轮组成的。
上图所示的是N轮密码的基本原理,其中轮都执行一次扩散和混淆操作,现代分组密码都具有良好的扩散属性。从密码级别来说,这以为这修改明文中的一位将会导致平均一般的输出为发生改变,即第二位密文看上去与第一位密文完全没有关系。需要牢记的是,这个属性对分组密码的处理非常重要。
2.DES算法概述
DES是一种使用56位秘钥对64位分组进行加密的密码(如图)。
DES是一种对称密码,即其加密过程和解密过程使用相同的秘钥。与几乎现在所有的分组加密一样,DES也是一种迭代算法。DES对明文中每个分组的加密过程都包含16轮,且每轮的操作完全相同。每轮使用不同的**秘钥,并且所有子**都是从主**k中推导出来的。
下面将详细介绍DES的内部结构,下图中所示的结构称为Feitel网络。仔细设计这个内部结构,就可以得到非常强壮的密码。很多现在分组密码都使用了Feistel网络(实际上AES不是)。除了潜在的密码学强度之外,Feistel网络的另外一个优势是它的加密过程和揭秘过程完全相同。DES的解密仅仅需要一个逆向过程密码编排,这在软件和硬件实现上是一个优势。(画图太浪费时间,所以我就直接拍书上图了,毕竟也只是整理学习笔记)
如图所示,将64位的明文x进行IP置换后,此明文会被分为L0和R0两部分;然后将得到的32位的左右两部分输入到Feistel网络,而Feistel网络包含16轮操作。右半部分Ri将被送入f函数中。f函数的输出将于左半部分的Li进行XOR。最后左右两部分进行交换,后面的每轮都重复这个过程,可以表示为: