口令散列格式怎么看
类 Unix 系统的口令散列字符串以固定的标识前缀区分算法,前缀不同代表算法与迭代成本不同。识别前缀可以快速判断强度与迁移方向:早期算法已不适合安全用途,较新的算法默认迭代次数偏低,现代发行版默认使用的方案成本更高。这类格式面向系统账户,Web 应用应使用专用口令算法。
基本信息
| 前缀标识 | 以分隔符包裹的算法标识 |
|---|---|
| 早期算法 | 强度已不足,不适合安全用途 |
| 较新算法 | 默认迭代次数偏低,需按场景评估 |
| 现代默认 | 当前发行版常用方案成本更高 |
典型使用场景
- 审计:查看系统账户口令的散列方式
- 迁移评估:判断哪些账户需要重新设置口令
- 合规检查:确认散列算法符合基线要求
- 排错:跨系统迁移账户时格式不兼容
- 生成:在脚本中生成指定格式的散列字符串
生成散列字符串
生成散列字符串
openssl passwd -6 -salt 0011223344556677 'P@ssw0rd' # 生成 SHA-512 crypt 散列
mkpasswd -m sha-512 'P@ssw0rd' # 部分发行版提供
cut -d: -f2 /etc/shadow | cut -c1-3 # 只看前缀判断算法
# 注意:查看该文件需要相应权限前缀对照
| 前缀 | 算法 | 备注 |
|---|---|---|
| $1$ | 早期散列算法 | 不适合安全用途 |
| $5$ | SHA-256 系 | 默认迭代偏低 |
| $6$ | SHA-512 系 | 默认迭代偏低 |
| $2b$ | 成本参数算法 | 成本决定迭代强度 |
这类格式面向系统账户;Web 应用应使用成本更高的专用口令算法,而不是直接沿用系统散列格式。
落地建议
- 把散列前缀纳入账户审计项
- 对旧算法账户在下次登录时强制重置口令
- 为服务账户单独评估成本参数
- 跨系统迁移时核对目标系统支持的格式
较新算法的默认迭代次数是本地登录场景的取值,直接用于面向公网的服务端口令校验会明显偏低,应对成本参数单独评估并提高。
审计要点
- 统计系统中各类前缀的实际数量分布
- 找出仍使用早期算法的账户清单
- 核对服务账户与交互账户的强度要求差异
- 确认口令重置流程会在下次登录时升级散列
散列值中的盐值通常随算法一同编码在字符串里,因此同一口令在不同账户上会得到不同结果,这可以抵御预先计算的对照表,但不改变算法本身的强度。