如何從明文口令產生LM Hash
假設明文口令是”Welcome”,首先全部轉換成大寫,再做如下變換
“WELCOME” -> 57454C434F4D4500000000000000
也就是說在明文口令不足14位元組的情況下,後面添加0×00補足14位元組。有些書上介紹
添加空格(0×20)補足14位元組,這是錯誤的,我不清楚是原作者寫錯了,還是譯者的問
題。
然後切割成兩組7位元組的資料,將7位元組的資料轉換為bit流,每7bit後面添加0補足8位,這樣得到兩組8位元組資料
57454C434F4D45 -str_to_key()-> 56A25288347A348A
00000000000000 -str_to_key()-> 0000000000000000
這兩組8位元組資料將做為DESKEY對魔術字串”KGS!@#$%”進行標準DES加密
“KGS!@#$%” -> 4B47532140232425
56A25288347A348A -對4B47532140232425進行標準DES加密-> C23413A8A1E7665F
0000000000000000 -對4B47532140232425進行標準DES加密-> AAD3B435B51404EE
將加密後的這兩組資料簡單拼接,就得到了最後的LM Hash
LM Hash: C23413A8A1E7665FAAD3B435B51404EE
顯然,由於明文口令一開始就全部轉換成大寫,導致多個明文口令對應一個LM Hash。
反過來,在窮舉破解LM Hash時,得到的有可能不是原始口令,因為不可能確定大小
寫。仔細觀察前述SMB身分識別驗證過程,即使這裡得到的不是原始口令(大小寫有差別),
同樣可以通過SMB身分識別驗證。這種轉換成大寫的行為減小了窮舉破解強度。
另一個弱點,當明文口令小於8位元組時,LM Hash後8位元組的計算過程總是這樣的
00000000000000 -str_to_key()-> 0000000000000000 -對4B47532140232425進行標準DES加密-> AAD3B435B51404EE
這也將減小窮舉破解強度。
IBM設計了這個LM Hash演算法,魔術字串”KGS!@#$%”的意義無從考證。這個演算法稱之
為”雜湊”不怎麼妥當,由於是標準DES加密,完全是可逆的。當然,由於要窮舉的是
DESKEY本身,與傳統所說的可逆有區別。
參考:http://blog.donews.com/zwell/archive/2004/08/19/71849.aspx