1.DES简介
DES算法是由IBM公司在20世纪70年代发展起来的,于1976年11月被美国政府采 用,随后被美国国家标准局和美国国家标准协会承认,同时也成为全球范围内事实上的工业标准。
DES算法作为分组密码的代表,已成为金融界及其他各种行业广泛应用的对称密钥密码系统。它以feistel网络结构理论为基础,采用迭代分组形式,在提高算法的运行速度,改善了密码的实用性的同时,也大大的提高了密码的安全性,对于我们研究密码学以及展望密码学的发展方向有重要意义。
2.算法描述
DES使用56位密钥对64位的数据块进行加密,并对64位的数据块进行16轮编码。在每轮编码中,一个48位的密钥值由56位的“种子”密钥得出来。 DES算法把64位的明文输入快变成64位的密文输出块,整个算法的变换过程如图1.1所示。

而解密和加密过程大致相同,不同之处仅在于右边的16个子密钥的使用顺序不同,加密的子密钥的顺序为K1,K2,…,K16,而解密的子密钥的使用顺序则为K16,K15,…,K1。 IP即初始换位的功能是把输入的64位明文数据块按位重新组合,并把输出分为L0,R0两部分,每部分各长32位。其置换规则如表1.1所示。
DES算法初始换位规则表

表1.2 DES算法逆初始换位规则表

图1.2 DES算法的一次迭代过程图


P-盒置换规则如表1.4所示。 表1.4 P-盒置换规则表 16 7 20 21 29 12 28 17 1 15 23 26 5 18 31 10 2 8 24 14 32 27 3 9 19 13 30 6 22 11 4 25
S-盒是DES算法的核心,它的功能是将6位数据变为4位数据,它是一个选择函数,共有8个S函数,其功能表如表1.5所示。
表1.5 S-盒查询功能表

图1.3 子密钥产生过程图


表1.7 置换选择2

- DES的安全性 20多年来,尽管计算机硬件及破解密码技术的发展日新月异,若撇开DES的密钥太短,易于被使用穷尽密钥搜索法找到密钥的攻击法不谈,目前所知攻击法,如查分攻击法或线性攻击法,对于DES的安全也仅仅做到了“质疑”的地步,并未从根本上破解DES。 当然,对DES的批评也有很多,主要集中在以下几点: (1) DES的密钥长度(56位)可能太少。 (2) DES的迭代次数可能太少。 (3) S-盒中可能有不安全因素。 (4) DES的一些关键部分不应当保密。 比较一致的看法是DES的密钥太短,仅256个,不能抵抗穷尽密钥搜索攻击。事实上也确实如此,先后有人在较短的时间内就破解了DES。正因为如此,美国政府已经征集评估和判定出了新的数据加密标准AES以取代DES。尽管如此,DES还是对现代分组密码理论的发展和应用起了奠基性作用。
3.DES的工作模式 实际应用中,DES是根据其加密算法所定义的明文分组的大小(64bits),将数据割成若干64bits的加密区块,再以加密区块为单位,分别进行加密处理。根据数据加密时每个加密区块间的关联方式,可以分为4种加密模式,包括ECB,CBC,CFB及OFB。 3.1 电码本模式(ECB) ECB模式是DES加密的基本工作模式。 在ECB模式下,每一个加密区块依次独立加密,产生独立的密文区块,每一加密区块的加密结果不受其他区块的影响。使用此种方式下,可以利用并行处理来加速加密解密运算,且在网络传输时任一区块有任何错误发生,也不会影响到其他区块传输的结果。这是该模式的优点。 该模式的缺点是容易暴露明文的数据模式。 3.2 密码分组链接模式(CBC) 在CBC模式下,第一个加密区块先与初始向量IV做异或运算,再进行加密。其他每个加密区块加密之前,必须与前一个加密区块的密文作一次异或运算,再进行加密。每一个区块的加密结果均会受到前面所有区块内容的影响,所以即使在明文中出现多次相同的明文,也会产生不同的密文。 密文内容若遭剪贴、替换,或在网络传输过程中发生错误,则其后续的密文将被破坏,无法顺利解密还原,这是这一模式的的优点,也是缺点。 在CBC模式下,加密作业无法利用并行处理来加速加密运算,但其解密运算可以利用并行处理来加速。 3.3 密文反馈方式(CFB) 在CFB模式下,可以将区块加密算法当作流密码加密器使用,流密码加密器可以按照实际上的需要,每次加密区块大小可以自订,每一个区块的明文与前一个区块加密后的密文做异或后成为密文。因此,每一个区块的加密结果受之前所有区块内容的影响,也会使得在明文中出现多次相同的明文均产生不同的密文。在此模式下,位了加密第一个区块,也必须选择一个初始向量,且此初始向量必须惟一,每次加密时必须不一样,也难以利用并行处理来加快加密作业。 3.4 输出反馈模式(OFB) OFB与CFB大致相同,都是每一个区块的明文与之前区块加密后的结果做异或后产生密文,不同的是之前区块加密后的结果为独立产生,每一个区块的加密结果不受之前所有密文区块的内容的影响,如果有区块在传输过程中遗失或发生错误,将不至于无法完全解密,在此模式下,为了加密第一个区块,必须设置一个初始向量,否则难以利用并行处理来加快加密作业。