加密算法

DES

DES算法是1972年由IBM设计的,然后被美国政府选为标准加密算法。
分组大小64位,缺点是密钥较短,只有56位,抵抗破解的能力较弱,后来有了3DES。

3DES

3DES算法1981年从DES发展而来,对一块数据用3个不同的密钥进行3次DES加密,强度更高。
不过3DES的计算量较大,效率较低。在密钥长度、迭代次数等方面难以扩展,所以有了AES。

AES

AES前身是Rijndael算法,由1997年美国国家标准与技术研究院(NIST)的公开邀请而创建。
NIST通过公开选拔挑选出来作为国家标准的加密算法,2000年正式成为高级加密标准(AES)。
分组大小固定为128位,支持128、192、256、512位密钥的加密。
优点是速度快,安全级别高,是目前最常见的对称加密算法。

Blowfish

Blowfish是由Bruce Schneier于1993年开发的,最初目的是替代DES,
它采用和DES相同的分组大小64位,但密钥长度可扩展32-448位。
其安全性并不弱于AES,但不如AES知名度高。

Camellia

Camellia算法由三菱和日本电信电话(NTT)在2000年共同发明,2003年入选欧洲NESSIE工程。
Camellia算法的分组长度为128位,密钥长度可以使用128、192或256位。
具有与AES同等级的安全强度及运算量。

ARIA

ARIA是韩国Daesung Kwon等提出的一种分组密码算法,
ARIA于2004年确认为韩国标准分组密码算法。
ARIA算法的分组长度为128位,密钥长度可变,可取128、192或256位。


加密模式

加密模式在分组加密中用来对每个分组的数据进行调整,包括填充以提高数据整体的安全性。
常用的模式有以下一些:

ECB(Electronic Codebook Mode)
ECB是最简单和最基本的模式,对每个分组使用相同的方式加密,
相同的明文数据块会被加密成相同的密文,降低了破解的难度,所以实际应用中很少使用。

CBC(Cipher Block Chaining Mode)
CBC模式中,每个数据块加密时直接使用明文跟上个数据块加密后产生的密文
或初始向量进行异或,再与密钥进行加密,得到密文。
它的缺点是不利于并行、传递误差、需要初始化向量。

OFB(Output Feedback Mode)
每个数据块加密过程中的中间输出会反馈到下个数据块的加密过程中。
缺点跟CBC类似。

CFB(Cipher Feedback Mode)
每个数据块加密产生的密文会反馈到下个数据块的加密过程中。
缺点跟CBC类似。

CTR(Counter Mode)
用密钥对输入的计数器加密,然后跟明文异或得到密文。
优点是可以并行,避免误差传递问题。
缺点是可以针对单个数据块进行攻击。

CCM(Counter with CBC-MAC Mode)
CCM是在CBC和CTR的基础上增加CMAC算法校验,
主要是通过MAC校验来解决CTR容易被攻击的问题。

GCM(Galois/Counter Mode)
GCM是在CCM的基础上改用GMAC算法代替CMAC算法,
增加了并行化设计,可以提高加密性能,降低时延。


虽然加密模式有很多种,但现在有实用价值的还是CCM和GCM两种。这两种也是TLS 1.3唯二使用的AES加密算法。