常用对称算法
数学家和密码学家在设计对称密钥加密算法(如 AES)时,目标是在没有加密密钥的情况下,解密密文在实践中不可行。对于现代安全对称加密算法(如 AES 和 ChaCha20),这一点成立;而对于被视为不安全对称加密算法的其他算法(如 DES 和 RC4),则可能存在争议或并不成立。
一些常用的对称加密算法包括:AES、ChaCha20、CAST、Twofish、IDEA、Serpent、RC5、RC6、Camellia 和 ARIA。在正确配置和使用的情况下,这些算法都被认为是安全的。
AES(Rijndael)
AES(高级加密标准,也称 Rijndael)是现代 IT 行业最流行、应用最广泛的对称加密算法。这是因为 AES 已被证明高度安全、速度快、标准化程度高,并且几乎在所有平台上都得到良好支持。AES 是一种 128 位分组密码,使用 128、192 或 256 位秘密密钥。它通常以 AES-CTR 或 AES-GCM 等分组模式处理流式数据。在大多数分组模式下,AES 还需要一个随机的 128 位初始化向量(IV、nonce)。
Rijndael 在 NIST 组织的 AES 竞赛(1997-2000 年)中胜出,并以“AES”之名正式公布(成为继 DES 之后的下一代官方对称分组密码)。2001 年,AES 被美国政府采纳为官方推荐标准,此后尚未发现重大弱点或攻击。
Rijndael(AES)算法可免费用于任何用途:公共或私人用途、商业或非商业用途均可。
Salsa20 / ChaCha20
Salsa20 及其改进变体 ChaCha(ChaCha8、ChaCha12、ChaCha20)和 XSalsa20,是由著名密码学家 Daniel Bernstein 设计的一系列现代、快速的对称流密码。Salsa20 密码是旨在设计新型对称流密码的 eSTREAM 竞赛(2004-2008 年)的最终候选算法之一,随后与相关的 BLAKE 哈希函数一起被广泛采用。Salsa20 及其变体免版税且未申请专利。
Salsa20 密码以一个 128 位或 256 位对称秘密密钥 + 随机生成的 64 位 nonce(初始化向量)以及不限长度的数据流作为输入,输出与输入流长度相同的加密数据流。与 Salsa20 相关的 ChaCha20 流密码通常与 Poly1305 组合成认证加密构造:ChaCha20-Poly1305。
其他常用对称密码
以下是其他现代安全对称密码。它们的使用频率低于 AES 和 ChaCha20,但在软件开发者和信息安全社区中仍然流行:
- Serpent)——安全的对称密钥分组密码(密钥大小:128、192 或 256 位),属于公有领域,未申请专利
- Twofish——安全的对称密钥分组密码(密钥大小:128、192 或 256 位),免版税,未申请专利
- Camellia)——安全的对称密钥分组密码(分组大小:128 位;密钥大小:128、192 和 256 位),已申请专利,但可免费用于非商业用途
- RC5——安全的对称密钥分组密码(密钥大小:128 至 2040 位;分组大小:32、64 或 128 位;轮数:1 ... 255),使用短密钥时不安全(56 位密钥已被成功暴力破解),专利于 2015 年到期,现已免版税
- RC6——安全的对称密钥分组密码,与 RC5 类似但更复杂(密钥大小:128 至 2040 位;分组大小:32、64 或 128 位;轮数:1 ... 255),专利于 2017 年到期,现已免版税
- IDEA——安全的对称密钥分组密码(密钥大小:128 位),专利于 2012 年到期,现已免版税
- CAST(CAST-128 / CAST5、CAST-256 / CAST6)——一系列安全的对称密钥分组密码(密钥大小:40 ... 256 位),商业和非商业用途均免版税
- ARIA)——与 AES 类似的安全对称密钥分组密码(密钥大小:128、192 或 256 位),韩国官方标准,可免费公开使用
- SM4)——与 AES 类似的安全对称密钥分组密码(密钥大小:128 位),中国官方标准,可免费公开使用
不安全的对称算法
另一些对称加密算法过去曾很流行,但如今被认为不安全(已被攻破的算法)或其安全性存在争议,因此不再推荐使用:
- DES——56 位密钥,实际上已被攻破,可以暴力破解
- 3DES(三重 DES)——64 位密码,被认为已被攻破
- RC2——64 位密码,被认为已被攻破
- RC4——流密码,已被攻破,已有实用攻击得到验证
- Blowfish)——旧式 64 位密码,已被攻破,已有实用攻击得到验证
- GOST)——俄罗斯的 64 位分组密码,安全性存在争议,被认为有风险
对称加密方案/构造
除上述对称密钥密码外,密码学家还提出了许多对称加密方案(构造),例如以下最流行的认证加密(AEAD)方案:
- ChaCha20-Poly1305
- 集成 Poly1305 认证器的 ChaCha20 流密码(集成式 AEAD 认证加密)
- 需要一个 256 位密钥和随机 96 位 nonce
- 性能极高
- 大多数现代密码库均已实现
- AES-256-GCM
- AES-GCM 是采用 GCM 分组模式的 AES(Rijndael)分组密码(集成式 AEAD 认证加密),其行为类似流密码
- 需要 256 位密钥和每条消息唯一的 nonce(通常推荐 96 位)
- 大多数现代密码库均已实现
如今,大多数应用在进行对称加密时都应优先选择上述某种加密方案,而不是自行构造加密方案。上述方案高度安全、经过验证和充分测试,并由密码库开箱即用地提供。
请注意,ChaCha20-Poly1305 是一种高性能密码(在移动设备上比 AES-128-GCM 快 3 倍),因此建议使用它代替 AES-GCM。