快速的雜湊演算法破壞了加密的安全性

像MD5、SHA和SHA1之類的快速雜湊演算法的用意並不在安全性——保護重要的信息,特別是密碼,雜湊演算法必須有意地減慢反向暴力破解速度。Troy Hunt是一位微軟的MVP,它展示了SqlMembershipProvider所提供的密碼雜湊值如何易於被暴力破解。
SqlMembershipProvider是VS 2010中ASP.NET web應用程序模板中的預設成員(membership)提供程序。Troy在他的文章《我們的密碼雜湊值沒有遮蔽(Our password hashing has no clothes)》中展示了經過SqlMembershipProvider中SHA1雜湊演算法處理的密碼安全性是如何被破解的,其中使用的是GPU、名為hashkiller的字典以及暴力破解演算法。在規模為40000條的真實密碼樣本中(來自於之前的一次攻擊),演算法在45分鐘內破解了24710個,佔總體樣本的67%。 其中包括被認為是很強壯的密碼:
像「volleyball6」,有11個字元,兩種字元類型。甚至還有「zaq1@WSX」——由八個字元組成,其中有大寫、小寫、數字和符號,肯定足以通過大多數安全策略,但是即便被存儲為「安全的」雜湊值,也完全沒用。
問題在於你擁有了可能的密碼字典之後可以快速創建新的雜湊值,並且硬件變得越來越快。
那麼如何來解決這個問題呢? 密鑰延伸(Key stretching),通過多次迭代雜湊演算法,能夠提供一種方式來讓雜湊演算法變得足夠慢,使得暴力破解更加困難。BcryptPBKDF2都是這樣的算法——它們叫做適應性算法,因為通過增加迭代的次數,會隨著時間推移而變得更慢(因為硬件變得更快)。Bcrypt.NET實現了前者,而DefaultMembershipProvider實現了後者。 DefaultMembershipProvider對SHA1使用了1000次迭代,它是VS2012的ASP.NET MVC 4模板政所提供的預設選項。Troy的文章《.NET中更強的密碼雜湊演算法(Stronger password hashing in .NET)》說明了如何使用這些方法,以及如何把應用程序遷移到使用更強壯的雜湊演算法,而不會破壞你的身份驗證過程。

留言

這個網誌中的熱門文章

IIS 啟用HTTP Strict Transport Security (HSTS)

解決WCF(REST)在https出現檔案找不到錯誤

Azure Web Apps 讀取憑證