淺談系統(tǒng)密碼加密方式
前幾天恰巧碰到不算是題目的題目吧,涉及到Win與Linux的系統(tǒng)密碼存放問題。這里總結(jié)一下兩個系統(tǒng)下密碼加密保存方式。
Windows:
SAM文件一般存放在C:\Windows\System32\Config下,存在LM-Hash與NT-Hash兩種加密方式。
Windows系統(tǒng)下的hash密碼格式為:
用戶名稱:RID:LM-HASH值:NT-HASH值,例如:
Administrator:500:C8825DB10F2590EAAAD3B435B51404EE
:683020925C5D8569C23AA724774CE6CC:::
用戶名稱為:Administrator
RID為:500
LM-HASH值為:C8825DB10F2590EAAAD3B435B51404EE
NT-HASH值為:683020925C5D8569C23AA724774CE6CC
關(guān)于Windows下LM-Hash值生成原理:
假設(shè)明文口令是“Welcome”,首先全部轉(zhuǎn)換成大寫“WELCOME”,再做將口令字符串大寫轉(zhuǎn)后后的字符串變換成二進制串: “WELCOME” -> 57454C434F4D4500000000000000
說明:如果明文口令經(jīng)過大寫變換后的二進制字符串不足14字節(jié),則需要在其后添加0×00補足14字節(jié)。然后切割成兩組7字節(jié)的數(shù)據(jù),分別經(jīng)str_to_key()函數(shù)處理得到兩組8字節(jié)數(shù)據(jù):
57454C434F4D45 -str_to_key()-> 56A25288347A348A
00000000000000 -str_to_key()-> 0000000000000000
這兩組8字節(jié)數(shù)據(jù)將做為DESKEY對魔術(shù)字符串“KGS!@#$%”進行標(biāo)準(zhǔn)DES加密
“KGS!@#$%” -> 4B47532140232425
56A25288347A348A -對4B47532140232425進行標(biāo)準(zhǔn)DES加密-> C23413A8A1E7665F
0000000000000000 -對4B47532140232425進行標(biāo)準(zhǔn)DES加密-> AAD3B435B51404EE
將加密后的這兩組數(shù)據(jù)簡單拼接,就得到了最后的LM Hash
LM Hash: C23413A8A1E7665FAAD3B435B51404EE
由于LM-Hash只能最大限制14位密碼,安全性較差,NT-Hash應(yīng)運而生。
假設(shè)明文口令是“123456”,首先轉(zhuǎn)換成Unicode字符串,與LM Hash算法不同,這次不需要添加0×00補足14字節(jié)
“123456″ -> 310032003300340035003600
從ASCII串轉(zhuǎn)換成Unicode串時,使用little-endian序。對所獲取的Unicode串進行標(biāo)準(zhǔn)MD4單向哈希,無論數(shù)據(jù)源有多少字節(jié),MD4固定產(chǎn)生128-bit的哈希值,
16字節(jié)310032003300340035003600 -進行標(biāo)準(zhǔn)MD4單向哈希-> 32ED87BDB5FDC5E9CBA88547376818D4
就得到了最后的NTLM Hash
NTLM Hash: 32ED87BDB5FDC5E9CBA88547376818D4
與LM Hash算法相比,明文口令大小寫敏感,無法根據(jù)NTLM Hash判斷原始明文口令是否小于8字節(jié),擺脫了魔術(shù)字符串”KGS!@#$%”。MD4是真正的單向哈希函數(shù),窮舉作為數(shù)據(jù)源出現(xiàn)的明文,難度較大。
Linux:
Linux密碼存放于shadow文件。假設(shè)取其中一條記錄如下:
manifold:$1$UmP0IdhG$JwSobqdBKrgzY9GJafh.I1:14627:0:99999:7:::
manifold為賬戶名
$1代表md5加密
UmP0IdhG是salt
JwSobqdBKrgzY9GJafh.I1是使用MD5加密后的密碼。
注意由于salt是不固定的,故同樣的帳號對應(yīng)HASH可以不同。