从‘1+2=3’到你的密码:Windows NTLM安全机制全解析
那天在渗透测试实验室里,当我看到屏幕上闪现出"1+2=3"这个密码时,不禁哑然失笑。这个看似儿戏的密码组合,却完美诠释了Windows认证体系中最核心的NTLM Hash机制。作为Windows域环境中使用最广泛的认证协议之一,NTLM的安全强度直接关系到整个系统的防护水平。本文将带您深入这个看似简单实则精妙的加密世界。
1. NTLM的前世今生:从LM到NTLMv2的演进之路
Windows的认证体系发展就像一部浓缩的密码学进化史。早期的LAN Manager(LM)Hash设计于1987年,当时计算机性能有限,设计者不得不做出诸多妥协:
- 密码长度限制:强制截断为14字节,不足部分补零
- 大小写不敏感:全部转换为大写存储
- 分块加密:将密码分成两个7字节块分别加密
- 固定魔术字符串:使用"KGS!@#$%"作为填充
python复制# LM Hash生成伪代码示例
def LM_Hash(password):
password = password.upper()[:14].ljust(14, '\0')
part1 = DES_encrypt(password[:7], "KGS!@#$%")
part2 = DES_encrypt(password[7:], "KGS!@#$%")
return part1 + part2
随着计算能力提升,LM Hash的弱点逐渐暴露。微软在1993年推出NT LAN Manager(NTLM)时,引入了多项改进:
| 特性 | LM Hash | NTLM Hash |
|---|---|---|
| 算法 | DES | MD4 |
| 密码敏感性 | 大小写不敏感 | 大小写敏感 |
| 长度处理 | 固定14字节 | 变长Unicode |
| 填充方式 | 固定字符串 | 无特殊填充 |
NT
