Blowfish 的现状
Blowfish 是 1993 年公开设计的 64 位分组密码,密钥长度 32 到 448 位,16 轮 Feistel 结构。由于分组偏小,它在长连接与大数据量场景存在碰撞类风险,已不再用于新协议;不过它的密钥编排被 bcrypt 口令散列沿用,因此在口令存储领域仍以另一种形式存在。读取旧数据时要注意新版库默认不再加载该算法。
基本信息
| 分组与密钥 | 64 位分组,32 到 448 位密钥 |
|---|---|
| 轮数 | 16 轮 Feistel 结构 |
| 来源 | 公开设计,算法细节完全公开 |
| 衍生用法 | 口令散列方案沿用其密钥编排 |
典型使用场景
- 迁移评估:识别系统中仍在使用的旧算法
- 读取历史数据:确认库是否需要显式启用旧算法
- 口令存储:区分该算法与基于它的散列方案
- 合规检查:核对算法清单是否符合要求
- 排错:新版库读取旧数据时报算法不可用
识别遗留加密
识别遗留加密
openssl list -cipher-algorithms | grep -i bf # 查看库中是否仍有该算法
openssl enc -bf-cbc -provider legacy -provider default -pbkdf2 -in old.dat -out old.enc
openssl version -a # 确认当前库版本与 provider 配置现状判断
| 用途 | 是否建议 | 原因 |
|---|---|---|
| 新协议加密 | 不建议 | 分组仅 64 位,存在碰撞类风险 |
| 历史数据解密 | 仅按需 | 需显式启用旧算法 |
| 口令散列 | 使用现代方案 | 应选专用口令算法 |
| 合规场景 | 按清单评估 | 需确认算法是否在允许列表 |
64 位分组在长连接与大数据量场景存在碰撞风险;新系统应使用现代分组算法,该算法只保留在特定的口令散列用途中。
落地建议
- 先盘点存量系统是否仍在使用该算法
- 为历史数据制定迁移与重加密计划
- 新开发一律使用现代算法
- 把算法清单纳入合规检查项
基于该算法密钥编排的口令散列方案与算法本身不是一回事,两者不能互相替代:一个用于加密数据,另一个用于抵抗口令猜测。