密码学
Blowfish
定义
Bruce Schneier 于 1993 年设计的 Feistel 分组密码,分组长度 64 位、密钥长度可变;算法本身安全,但因分组过小已被 AES 取代。
Blowfish 是 Bruce Schneier 于 1993 年设计的对称分组密码,作为 DES 与 IDEA 的快速、免版权替代品。它采用 16 轮 Feistel 结构,分组长度 64 位,密钥长度 32 至 448 位,并使用与密钥相关的大型 S 盒。从密码分析角度看,完整 16 轮的 Blowfish 至今未被破解;但 64 位分组使其在同一密钥下加密大量数据(数 GB)时易受 Sweet32 等生日攻击。因此 NIST 与现代协议推荐使用 AES 等 128 位分组的密码。Blowfish 在历史上具有重要意义,并通过 bcrypt 密码哈希、Twofish 等衍生设计延续生命,但已不再是新加密场景的推荐选择。
示例
- 早期版本的 OpenSSH 与 OpenVPN 支持 Blowfish 的 CBC 模式。
- bcrypt 密码哈希算法的密钥编排源自 Blowfish。
相关术语
Twofish
由 Schneier 等人设计的 128 位分组、128/192/256 位密钥的对称密码,曾是 AES 候选决赛算法;安全但因 AES 成为标准而使用较少。
AES(高级加密标准)
由 NIST 标准化的 128 位分组密码,密钥长度可为 128、192 或 256 位,由 Daemen 与 Rijmen 设计,是全球占主导地位的对称加密算法。
分组密码
对固定长度明文分组使用密钥进行加密的对称密码,通常结合工作模式以处理任意长度的数据。
对称加密
加密和解密使用同一个秘密密钥的加密方案,在密钥安全分发的前提下提供高速度和强机密性。
加密
使用算法和密钥将明文转换为密文的密码学过程,使只有授权方才能恢复原始数据。
bcrypt
基于 Blowfish 密钥编排、带可调成本参数的自适应口令哈希函数,由 Provos 与 Mazières 于 1999 年提出。