口令哈希算法为什么要收敛
系统里存放的不是口令本身而是哈希:算法越弱,拿到 shadow 文件后的离线破解成本越低。现代 Linux 默认使用 SHA-512 或 yescrypt,但历史遗留账号可能仍保留 MD5 甚至 DES 格式的哈希。核查新策略与存量残留是两件事。
基本信息
| 适用平台 | Linux(crypt 与 shadow 体系) |
|---|---|
| 策略配置 | /etc/login.defs 的 ENCRYPT_METHOD |
| 判读方式 | shadow 第二列的前缀:$6$ 为 SHA-512,$y$ 为 yescrypt |
| 基线 | 无弱哈希残留,新口令使用强算法 |
典型使用场景
- 基线核查:确认新口令使用强哈希算法
- 历史账号清理:发现 MD5 或 DES 残留,安排强制改密
- 迁移评估:跨系统同步认证时确认算法兼容性
- 审计举证:说明口令存储在算法层面符合要求
核查与配置
核查与配置
# 查看策略与当前哈希算法分布
grep '^ENCRYPT_METHOD' /etc/login.defs
awk -F: '{print substr($2,1,3)}' /etc/shadow | sort | uniq -c
# 期望看到 $6$(SHA-512)或 $y$(yescrypt);
# 出现非 $ 前缀说明存在弱哈希,需要强制改密重算哈希前缀读法
| 前缀 | 算法 | 处理建议 |
|---|---|---|
| $6$ | SHA-512 | 主流可接受 |
| $y$ | yescrypt | 较新发行版默认,强度更高 |
| $5$ | SHA-256 | 可接受,建议随改密升级 |
| $1$ | MD5 | 弱,应强制改密 |
| 无前缀或 13 位 | DES | 严重弱哈希,优先处置 |
历史弱哈希需要强制改密重算:用 chage -d 0 <账号> 让口令立即过期,或按流程批量重置后通知用户,仅修改策略并不会重算存量哈希。
某些老旧认证系统(如旧的目录同步或跨平台认证)不兼容 yescrypt:跨系统环境要先确认互操作性,再调整算法,否则会出现无法登录。
算法升级建议与改密周期绑定:等用户自然改密时逐步淘汰弱哈希,比一次性批量重置的扰动小,残留比例也能按季度复查。
核查脚本要同时输出「策略值」与「哈希前缀分布」两组结果:只看策略无法证明存量已收敛,只看分布又无法判断新口令是否走强算法,两份数据一起看才是完整结论。