2014-10-11 38 views
0

我正在開發可供經過身份驗證的用戶訪問的金融機構的ASP.NET Web應用程序。作爲要求,每個用戶的密碼都需要加密,以便數據庫管理員無法訪問任何用戶的密碼。我已經通過各種加密和散列算法,但不確定哪些最適合我的要求。這是ASP.NET中可用於在數據庫中存儲密碼的最佳散列算法嗎?

+1

使用MS提供的AspNet Identity框架。它爲您提供哈希和其他安全措施。不要自己編寫安全框架,你很可能會搞得一團糟。 – trailmax 2014-10-11 16:16:11

+0

相關:http://stackoverflow.com/questions/10948994/which-of-the-net-included-hashing-algorithms-are-secure-enough-for-password-has – Steven 2014-10-12 08:23:40

回答

1

只要有可能,請防止將密碼存儲在一起,例如使用Windows身份驗證。如果這不可行,請使用行業最佳實踐來存儲密碼。這就是說,你應該:

  • 使用密碼哈希(未加密)
  • 添加鹽哈希
  • 使用計算密集哈希算法。

存儲密碼的巨大危險在於,當有人闖入系統(或您的DBA竊取他們)時,成千上萬個用戶的密碼會受到攻擊。雖然您可以在系統中使用每個用戶的密碼,但用戶通常會一遍又一遍地使用相同的密碼,這意味着用戶在密碼泄漏時處於危險之中。當然,重用密碼當然是不好的做法,這是用戶所做的,我們的工作至少是通過採取任何有能力做到的事情來最大限度地降低用戶的風險。不要忘記,如果不這樣做,甚至可能會導致你的公司被起訴。這發生在LinkedIn上。

因此,對於密碼散列,這實際上意味着使用MD5和SHA(即使使用salting)的密碼散列是非常沒用的,因爲這些算法針對速度進行了優化,這使得黑客每秒可以計算2300萬次鹹化散列(蠻力)。

一些衆所周知的計算密集型哈希算法是PBKDF2,Bcrypt,PBMAC和scrypt。在.NET中有一個名爲Rfc2898DeriveBytes的PBKDF2實現。 Here's a good example使用Rfc2898DeriveBytes(具有可配置的計算密集度,這使得此方法可以承受不斷增加的計算機的計算能力)。

使用一些實施最佳實踐的着名框架也可能是一個好主意。 @trailmax已經提出了使用PBKDF2的AspNet Identity框架。但是,防止使用ASP.NET的SqlMembershipProvider,因爲它默認使用SHA,實際上很難重新配置它以使用安全的方法。

相關問題