# DES 学习笔记
# DES 优点
DES 算法作为堆成算法的一种,保留了对称算法的优点:速度快,在消息发送方需要加密大量数据时更便于使用,算法公开、计算量小、加密速度快、加密效率高等。 同时也有一些自身独特的优势。比如在加密时无论使用任何函数作为轮函数都可以正确解密。换句话说,即便用轮函数的输出结果无法逆向计算出输出的值(即该函数不存在反函数)也可以。不需考虑解密的问题,可以设计的很复杂。其次,由于使用了 Feisel 网络结构,所以加密和解密可以使用完全相同的结构来实现。
# DES 缺点
对称密码由于加密密钥和解密密钥是相同的,所以自身存在一些不可避免的缺陷。在数据传输前,发送方和接收方必须提前商量好密钥,并且双方都需要将密钥保管好,如果这其中有一方的密钥被泄露了,那么信息就不安全了。另外,每次加密使用对称密码的算法时,都需要使用第三方不知道的唯一密码,这会使得收、发双方所保管的钥匙数目巨大,对其的管理也会成为负担。 首先,DES 最直观的缺点就是密钥长度过短。DES 的加密单位仅仅有 64 位二进制,而且其中还有部分用于奇偶校验和其他的通讯开销,最终有效密钥长度只有 56 位。这必然降低了它的安全性。早在 DES 算法公开之初,斯坦福的密码学家马丁·赫尔曼与惠特菲尔德·迪菲就指出 DES 算法容易被暴力破解,如果有可能的话还会有一台机器可以测试出所有的密钥。现实是再二十年后由于芯片的价格下降性能不断提升,这种机器确实地被研究出来。1997 年 RSA 公司首次举办了 DES 挑战赛,洛克·沃瑟所带领的团队耗时 96 天破解成功。紧接着又举办了第二次挑战赛,这次从初赛通过的志愿者们一同工作耗时 39 天就破解了密文:Many hands make light work.(众人拾柴火焰高)。在进行第二届复赛时,电子前哨基金会的建造的“深泽”也参与到其中,并仅耗时 56 小时。第三届挑战赛上密文再次以更短的时间被破解,用时 22 小时 15 分。也是在此之后美国政府宣布推荐使用更强大的三重 DES 替代先前的 DES 算法。 其次,DES 还有一个缺点就是弱密钥。当密钥全为 0 或者全为 1,或者一般为 0 或 1 时,就会产生弱密钥或半弱密钥,此时安全性会降低,在设置密钥时需要避免此类情况的发生。如果不考虑校验位,弱密码一共有 8 组,分别为
- 0x0101010101010101
- 0xFEFEFEFEFEFEFEFE
- 0xE0E0E0E0F1F1F1F1
- 0x1F1F1F1F0E0E0E0E
- 0x0000000000000000
- 0xFFFFFFFFFFFFFFFF
- 0xE1E1E1E1F0F0F0F0
- 0x1E1E1E1E0F0F0F0F
弱密码的不安全之初在于,DES 解密时需要逆序使用 16 组子密钥,若使用了弱密码,则此时 K0=K15,K1=K14……K7=K8,破译者不用逆序只需再次按原有的顺序使用相同的子密钥即可进行破解。 半弱密钥是相同的原理,如果两个密钥产生的子密钥正好是对称的,那么就可以使用另一个密钥对前一个密钥加密过的文件进行破解。 半弱密码共有 6 组,分别为
- 0x011F011F010E010E 和 0x1F011F010E010E01
- 0x01E001E001F101F1 和 0xE001E001F101F101
- 0x01FE01FE01FE01FE 和 0xFE01FE01FE01FE01
- 0x1FE01FE00EF10EF1 和 0xE01FE01FF10EF10E
- 0x1FFE1FFE0EFE0EFE 和 0xFE1FFE1FFE0EFE0E
- 0xE0FEE0FEF1FEF1FE 和 0xFEE0FEE0FEF1FEF1
###DES 现有的改进研究——3DES 算法(三重数据加密算法) 由于 DES 算法的密钥长度容易被暴力破解,所有推出了 3DES 算法对原先的 DES 进行改进变形,相当于对原有数据进行三重 DES 算法计算。 3DES 是用 3 个 DES 密钥加密一串明文,所以密钥长度为 168 位,有时不足的位数会通过重复或者填 0 的方式来填充。它使用 3 条 56 位的密钥对数据进行 3 次加密。 3DES 是在 DES 算法上的改进,所以 3DES 可以兼容 DES 算法。 3DES 的解密过程也与加密过程相反,逆序使用密钥,与加密过程的“加密(密钥 1)-解密(密钥 2)-加密(密钥 3)”相对应,解密过程为“解密(密钥 3)-加密(密钥 2)-解密(密钥 1)”。 当然,由于有 3 种密钥,所以关于密钥的搭配也可以随意组合变换。例如常见的 DES-EEE3 模式、DES-EDE3 模式、DES-EEE2 模式、DES-EDE3 模式。其中 E 表示加密,D 表示解密,数字 2 或 3 表示在计算中是使用两种还是三种不同的密钥。 与 DES 算法相比,3DES 的密钥长度更长,安全性也更高,但伴随的也是计算速率的减慢,所以也有了后来的 AES 加密算法,改善了 3DES 的计算速率的问题。