是否可以在.hpasswd文件中爲密碼添加鹽?我假設沒有,因爲服務器將需要每個用戶的鹽以驗證密碼,我不能想到它將如何得到它們,但否則如果要獲得該列表,它將是相當脆弱的。有解決方案嗎?將鹽添加到.htpasswd?
非常感謝您的幫助, 本
是否可以在.hpasswd文件中爲密碼添加鹽?我假設沒有,因爲服務器將需要每個用戶的鹽以驗證密碼,我不能想到它將如何得到它們,但否則如果要獲得該列表,它將是相當脆弱的。有解決方案嗎?將鹽添加到.htpasswd?
非常感謝您的幫助, 本
默認的htpasswd使用標準crypt功能,因此密碼已醃製 - 注意在這個例子中,這兩個用戶具有相同的密碼,但哈希值是不同的:
[email protected]:~$ htpasswd -b -c htpasswd simon abcd Adding password for user simon [email protected]:~$ htpasswd -b htpasswd simon2 abcd Adding password for user simon2 [email protected]:~$ cat htpasswd simon:NWvm/LCCxQ64E simon2:2I.LBzsRqULN6
(注:-b
標誌通常氣餒,因爲其他用戶可以看到你的命令行參數,因此密碼)
的哈希的前兩個字符是鹽;通過再次呼叫crypt()
來驗證密碼。密碼輸入錯誤則產生一個字符串,這是不公平的哈希密碼:
>>> from crypt import crypt
>>> crypt("wrongpass", "NWvm/LCCxQ64E")
'NWbxQgX1unvso'
,而正確的密碼產生期望的散列:
>>> crypt("abcd", "NWvm/LCCxQ64E")
'NWvm/LCCxQ64E'
htpasswd -m
使用不同的算法是MD5爲基礎,採用了更長鹽:
[email protected]:~$ htpasswd -m -b -c htpasswd simon abcd Adding password for user simon [email protected]:~$ cat htpasswd simon:$apr1$mfvnBVmG$iIHIHOaH9vcImG5G.8eVa/
在此,該鹽是在第二和第三$
之間的8個字符。
htpasswd -s
存儲不含鹽的SHA-1消化物;這似乎是與Netscape/LDIF兼容性:
[email protected]:~$ htpasswd -s -b -c htpasswd simon abcd Adding password for user simon [email protected]:~$ htpasswd -s -b htpasswd simon2 abcd Adding password for user simon2 [email protected]:~$ cat htpasswd simon:{SHA}gf6L/odXbD7LIkJvjleEc4KRes8= simon2:{SHA}gf6L/odXbD7LIkJvjleEc4KRes8=
這些很容易被逆轉 - 轉換爲十六進制摘要:
>>> "".join("%02x" % ord(c)
... for c in "gf6L/odXbD7LIkJvjleEc4KRes8=".decode("base64"))
'81fe8bfe87576c3ecb22426f8e57847382917acf'
然後使用online hash database。
謝謝!我正在使用SHA-1來加密密碼。你所說的話似乎表明MD5比SHA-1更安全?但它也有其弱點。我使用PHP編碼並將數據寫入文件,因此我不知道向MD5哈希中添加鹽是多麼容易。 – Ben 2010-11-14 14:41:44
另一點有利的是基於MD5的算法重複1000次哈希(「關鍵強化」),這使得強力破解更加耗時。這個問題有代碼聲明要實現的算法:http://stackoverflow.com/questions/1038791/how-to-programmaticaly-build-an-apr1-md5-using-php – SimonJ 2010-11-14 14:58:37
這絕對是輝煌!我在那裏學到了很多東西,並且PHP代碼完美地工作。謝謝! – Ben 2010-11-15 22:27:39
的htpasswd
實用already does use salts在大多數情況下:
地穴()和MD5格式置換前面加上一個隨機字符串鹽,使對密碼字典攻擊更加困難的代表性。
這就是(有點)鹽在密碼文件中的目的。雖然鹽必須包含在服務器的.htpasswd
文件中,以便服務器能夠檢查密碼,但鹽是多麼不同的可能性,它可以抵禦諸如rainbow tables等攻擊技術。但是,如果用戶選擇弱密碼或普通密碼,密碼破解無論如何都是一個問題,因爲攻擊者(假定能夠訪問密碼文件)會首先嚐試這些密碼,實際上它很快(不受速度的限制的服務器和Internet連接),通過正常的方式進行猜測。我可以給出的最佳建議是用戶應該始終選擇強密碼。
關於SHA加密(可能指定爲htpasswd的一個選項),您想要對散列進行加密?在用戶的密碼被髮送與隨機重新發送的情況下,是不是Auth Digest的選項? – aefxx 2010-11-14 01:46:39
查看我的(已更新)答案 - 由'htpasswd'生成的SHA摘要很容易反轉。 – SimonJ 2010-11-14 02:13:07