假设我有一台装有 win7 的计算机,并且我创建了 2 个不同的帐户。现在我为这两个帐户设置了相同的密码。我的问题是 SAM 文件中的密码哈希值是否相同?
谢谢。
答案1
简短回答
是的:拥有相同密码的用户将共享相同的哈希值。
长答案
Windows 不会以明文形式存储用户帐户密码,而是使用两种不同的密码表示形式(通常称为“哈希”)来生成和存储用户帐户密码。当您将用户帐户的密码设置为或更改为包含少于 15 个字符的密码时,Windows 会同时生成该密码的 LAN Manager 哈希(LM 哈希)和 Windows NT 哈希(NT 哈希)。这些哈希存储在本地安全帐户管理器 (SAM) 数据库或 Active Directory 中。
来源:如何防止 Windows 在 Active Directory 和本地 SAM 数据库中存储密码的 LAN 管理器哈希值
NT 哈希和 LM 哈希均未加盐。
来源:密码技术概述
证明
以管理员身份打开命令提示符,并执行以下命令:
net user "UserA" "Passw0rd!" /add net user "UserB" "Passw0rd!" /add
使用以下方法转储本地 LM/NT 哈希值
fgdump
。
以下是不同操作系统下的结果:
Windows 2000 / XP
UserA:1001:B34CE522C3E4C87722C34254E51BFF62:FC525C9683E8FE067095BA2DDC971889::: UserB:1002:B34CE522C3E4C87722C34254E51BFF62:FC525C9683E8FE067095BA2DDC971889:::
Windows Vista / 7
UserA:1001:NO PASSWORD*********************:FC525C9683E8FE067095BA2DDC971889::: UserB:1002:NO PASSWORD*********************:FC525C9683E8FE067095BA2DDC971889:::
简而言之,第一个字段是用户帐户名称;第二个字段是唯一的安全标识符对于该帐户;第三个字段是 LM 哈希;第四个字段是 NT 哈希。
主要区别在于,从 Windows Vista 开始,出于安全原因,默认不再存储 LM 哈希。除此之外,您可以清楚地看到哈希是相同的。
进一步阅读
答案2
从 Windows Vista 开始,Windows 使用 NTLMv2 对密码进行哈希处理。在此之前,密码不会被加盐,这使得密码哈希变得简单且易于获取。由于此加盐,两个使用相同密码的用户不应该拥有 SAM 哈希。
Salt 的作用是在密码的某些部分添加字符,使得密码哈希更难被暴力破解。