2010-11-14 34 views
2

是否可以在.hpasswd文件中爲密碼添加鹽?我假設沒有,因爲服務器將需要每個用戶的鹽以驗證密碼,我不能想到它將如何得到它們,但否則如果要獲得該列表,它將是相當脆弱的。有解決方案嗎?將鹽添加到.htpasswd?

非常感謝您的幫助, 本

+0

關於SHA加密(可能指定爲htpasswd的一個選項),您想要對散列進行加密?在用戶的密碼被髮送與隨機重新發送的情況下,是不是Auth Digest的選項? – aefxx 2010-11-14 01:46:39

+0

查看我的(已更新)答案 - 由'htpasswd'生成的SHA摘要很容易反轉。 – SimonJ 2010-11-14 02:13:07

回答

7

默認的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

+0

謝謝!我正在使用SHA-1來加密密碼。你所說的話似乎表明MD5比SHA-1更安全?但它也有其弱點。我使用PHP編碼並將數據寫入文件,因此我不知道向MD5哈希中添加鹽是多麼容易。 – Ben 2010-11-14 14:41:44

+0

另一點有利的是基於MD5的算法重複1000次哈希(「關鍵強化」),這使得強力破解更加耗時。這個問題有代碼聲明要實現的算法:http://stackoverflow.com/questions/1038791/how-to-programmaticaly-build-an-apr1-md5-using-php – SimonJ 2010-11-14 14:58:37

+0

這絕對是輝煌!我在那裏學到了很多東西,並且PHP代碼完美地工作。謝謝! – Ben 2010-11-15 22:27:39

2

htpasswd實用already does use salts在大多數情況下:

地穴()和MD5格式置換前面加上一個隨機字符串鹽,使對密碼字典攻擊更加困難的代表性。

這就是(有點)鹽在密碼文件中的目的。雖然鹽必須包含在服務器的.htpasswd文件中,以便服務器能夠檢查密碼,但鹽是多麼不同的可能性,它可以抵禦諸如rainbow tables等攻擊技術。但是,如果用戶選擇弱密碼或普通密碼,密碼破解無論如何都是一個問題,因爲攻擊者(假定能夠訪問密碼文件)會首先嚐試這些密碼,實際上它很快(不受速度的限制的服務器和Internet連接),通過正常的方式進行猜測。我可以給出的最佳建議是用戶應該始終選擇強密碼。