我正在寻找有关 Windows 如何处理用户密码的有用信息:
- 使用了哪些算法(哪种哈希,它们是否使用盐,...)?
- 密码存储在哪里?
- 是否存在已知的漏洞?
特别有趣的是 Windows XP、Vista 和 7。
我无法用 Google 找到有用的信息,大多数页面都在讨论重置或破解工具,但我对理论很感兴趣。
答案1
使用了哪些算法(哪种哈希,是否使用盐,...)
存储了两个哈希值:LM 哈希为了兰曼,以及MD4哈希(也称为 NTLM 的“NT 哈希”)。
通常仅使用 MD4 哈希。它没有被加盐,因为 SAM 数据库仅可供群组Administrators
和NT AUTHORITY\SYSTEM
内部账户访问。
LM 哈希仅出于兼容性原因而存储。(请参阅下文。)它非常不安全(它的历史始于 OS/2 和 MS-DOS),并且(我认为)几分钟内就会被破解。Windows 仅在登录旧服务器时使用它;但是,如果存储了它,可以使用 LiveCD 或类似工具提取它。
在 Windows 7 中,LM 哈希存储被禁用。在早期版本中,您可以在安全策略中手动禁用它(secpol.msc
→ 本地策略 → 安全选项 →网络安全:不要存储 LAN 管理器哈希)。
密码存储在哪里?
安全账户经理数据库- 注册表的一部分,存储在 下%SystemRoot%\system32\config\
。
自 Windows 2000 以来,SAM 数据库另外加密默认情况下。<afaik>
密钥分散在(同一个)注册表文件中,但仍然可以恢复。</afaik>
但如果您愿意,您可以移动加密密钥到软盘驱动器,或者使用额外的密码。(启动时会要求您输入密码。)这可以通过使用系统密钥(syskey.exe
)
(SYSKEY 支持在 NT 4.0 SP3 中添加,但直到 W2000 才默认禁用。)
是否存在已知的漏洞?
破解 LM 哈希?比你想象的还要难。 MD4似乎更安全,但一定要阅读维基百科文章。