1.Hash基本知识
在了解Windows用户密码之前,我们先认识一下Hash。
Hash,我们称之为单向散列函数(也直接音译为哈希函数)。它是把任意长度的输入,通过散列算法,变换成固定长度的输出的一个函数。
它具有以下几个特点:
(1).算法本身是不可逆的,即可以由输入得到散列值,但是不可能从散列值中得到输入值。
(2).不同的算法会得到不同长度的散列值,但使用同一个算法,无论输入的数据有多长,得到的散列值长度总是固定的。
(3).不同的输入必然产生不同的散列值,两条相似的数据产生的散列值可能会大相庭径。
常用的Hash算法:
(1).MD4:MD4(RFC 1320)是MIT的Ronald Rivest在1990年设计的,MD是Message Digest(消息摘要)的缩写。它适用于32位字长的处理器上用高速软件实现。
(2).MD5:MD5(RFC 1321)是Rivest于1991年对MD4的改进版本。它对输入仍以512位分组,其输出是4个32位字的级联,与MD4相同。MD5比MD4复杂,并且速度较之要慢一点,但更加安全,在抗分析和抗差分方面表现更好。
(3).SHA-1:SHA1是由NIST NSA设计为同DSA一起使用的,它对长度小于264的输出,产生长度为160bit的散列值,因此抗穷举(brute-force)性更好。SHA-1设计时基于和MD4相同原理,并且模仿了该算法。
2.Windows密码
Windows用户密码存放在C:\Windows\System32\config\SAM文件中。该文件被Windows系统独占打开,用户尝试打开该文件会显示如下:
Windows的用户密码有LMi-Hash和NTLM-Hash两种算法。
(1).LM-Hash:
LM-Hash算法是在DES的基础上实现的,它不区分字母大小写,长度最长是14个字符,密码被分成2串7个字符进行存放。
(2).NTLM-Hash:
NTLM-Hash算法是微软基于LM-Hash算法的弱点而设计的算法。它对字母大小写敏感,摆脱了LM-Hash的魔术字符串“[email protected]#$%”。它是基于MD4实现的,穷举难度较大。
默认时,当Windows用户密码小于或者等于14个字符时,SAM文件中既存放着LM-Hash值,也存放着NTLM-Hash值。当用户密码大于14个字符,SAM文件中只存放NTLM-Hash值。
为了用户密码的安全性,我们可以修改注册表,使SAM文件中只存放NTLM-Hash值。在HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Lsa下,修改名为“nolmhash”的DWORD值(如果没有这个值就添加它),将它设置为1,重启系统即可。