我正在開發可供經過身份驗證的用戶訪問的金融機構的ASP.NET Web應用程序。作爲要求,每個用戶的密碼都需要加密,以便數據庫管理員無法訪問任何用戶的密碼。我已經通過各種加密和散列算法,但不確定哪些最適合我的要求。這是ASP.NET中可用於在數據庫中存儲密碼的最佳散列算法嗎?
0
A
回答
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,實際上很難重新配置它以使用安全的方法。
相關問題
- 1. asp.net:存儲密碼散列算法
- 2. 如何在數據庫中存儲鹽漬散列密碼
- 3. 將散列密碼和salt值存儲在數據庫中的最佳方法 - varchar或binary?
- 4. 什麼是IOS中可用的最佳數據加密算法
- 5. ASP.NET ||這是散列密碼的好方法嗎?
- 6. 在數據庫中散列密碼
- 7. 什麼加密方法(算法)用於在MS Access 2010數據庫中存儲數據庫密碼?
- 8. 在Oracle數據庫中存儲XML的最佳列是什麼?
- 9. 在MySQL中存儲散列密碼
- 10. 散列密碼時,我應該將散列函數名稱存儲在數據庫中嗎?
- 11. 在數據庫中存儲IP的最佳方法是什麼?
- 12. 使用MD5和密碼散列函數在數據庫中存儲時
- 13. 2FA密碼應該散列存儲嗎?
- 14. 這是在PHP中存儲密碼的不好做法嗎?
- 15. 當散列不適用時將密碼存儲在數據庫中
- 16. Android中用於短數據集的最佳加密算法
- 17. 在Web數據庫中存儲密碼?
- 18. 存儲mysql密碼的最佳方法?
- 19. Windows 10使用什麼散列算法來存儲密碼?
- 20. 什麼可能是在數據庫中存儲Mandelbrot值的最佳方法?
- 21. 如何在數據庫中更改密碼時已經在數據庫中散列密碼asp.net C#
- 22. 用於存儲大量列的最佳數據庫設計?
- 23. 將大量庫存數據存儲在內存中的最佳方法(可變)
- 24. 在MySQL數據庫中存儲數組的最佳方法?
- 25. 在數據庫中存儲BitSet數組的最佳方法?
- 26. 使用含鹽的散列在數據庫中存儲密碼;不知道在哪裏/如何存儲鹽
- 27. 在數據庫中存儲一對多列的最佳方式
- 28. 在數據庫中存儲枚舉的最佳方法
- 29. 在mysql數據庫中存儲python time.struct_time的最佳方法
- 30. 將映射存儲在數據庫中的最佳方法
使用MS提供的AspNet Identity框架。它爲您提供哈希和其他安全措施。不要自己編寫安全框架,你很可能會搞得一團糟。 – trailmax 2014-10-11 16:16:11
相關: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