对称加密技术 - DES、3DES算法简介
DES
算法和DESSede
算法统称DES系列算法,是对称加密算法领域的经典加密算法。DESSede
(又称3DES
)使用三次迭代增加算法安全性。DES算法是众多对称加密算法的基础,很多算法都是基于该算法演变而来。
DES家族发展历史
- 1973年,美国国家标准计算研究所(NIST)征求对称加密算法方案,IBM提交了自己的算法;
- 1977年,IBM的算法(Luciffer算法)被正式采用,成为数据加密标准:
Data Encryption Standard
即DES算法; - DES算法密钥比较短,只有56位,迭代次数少,很容易受到密码分析手段的攻击,因此DES算法半公开,被怀疑是
NSA(美国国家安全局)
安置的后门,因此被各大密码学机构强烈质疑; - 1998年,出现DES算法破译机,DES算法被攻破,宣告不安全;
- 1999年,NIST公布新标准
3DES
,也就是DESede(TripleDES)
,3DES
取代DES
,DES
作为遗留系统的加密手段被废弃; - 目前攻破
DES
已经很简单-AES
正式替代了DES
;
虽然DES被取代了,但是DES的CBC工作模式是基础性的算法和工作模型,有很强的意义,在遗留系统中也有一些使用的。
大致算法流程
DES的算法是采用分组加密工作模式,流程比较复杂,大致流程如下:
- 1.将要加密的数据进行分组,56位为一组;
- 2.以组为单位进行加密处理,这个时候对每块的加密操作就有了不同的工作模式;
- 不同的工作模式算法效率和产生的密文差别比较大;
- 参考2.1节的工作模式小节;
- 3.最后一块儿不足56位,则需要填充到56位或者不填充,这就是填充模式;
- 不同的填充模式,影响到数据的安全性;
- 参考2.1节的填充小节;
应用场景及算法特点
DES
和3DES
适合一般加密性场景,当前大部分是遗留系统在使用,还有一部分可能是系统没有支持AES
等其他加密手段被迫使用。
JDK仅支持56位的密钥长度
(出口限制),对称加密系列算法的特点是:密钥长度越高安全性越高,因此JDK本身自带的DES
和3DES
算法仅适合学术和一般场景使用,Bouncy Castle提供了64位密钥长度的支持。
算法 | 密钥长度 | 密钥长度默认值 | 工作模式 | 填充方式 | 实现 |
---|---|---|---|---|---|
DES | 56 | 56 | ECB、CBC、PCBC、CTR、CTS、CFB、CFB8-CFB128、OFB、OFB8-OFB128 | NoPadding、PKCS5Padding、ISO10126Padding | JDK 6实现 |
DES | 64 | 56 | ECB、CBC、PCBC、CTR、CTS、CFB、CFB8-CFB128、OFB、OFB8-OFB128 | PKCS7Padding、ISO10126d2Padding、X932Padding、ISO7816d4Padding、ZeroBytePadding | Boouncy Castle实现 |
DES和3DES的比较
3DES
是对DES
的一种改良算法,针对DES
算法密钥短,迭代次数少的缺点做了改进。但是3DES
算法速度慢,密钥计算时间长,加密效率不高,实际使用也不多。
DES 的 3 大安全痛点:
- 密钥短:56位、68位确实不长 ;
- 迭代偏少:仅支持16次迭代;
- 半公开性:违反了
科克霍夫原则
,被怀疑有后门,主要是S盒
没被公布,因此S盒
被怀疑是NIS
的后门;
网友评论