我正在为一家金融机构开发ASP.NET网络应用程序,通过身份验证的用户可以访问它。需要对每个用户的密码进行加密,这样数据库管理员就不能访问任何用户的密码。我经历过各种类型的加密和哈希算法,但不确定哪种算法最适合我的需求。
发布于 2014-10-12 11:58:00
尽可能防止将密码全部存储在一起,例如使用Windows身份验证。如果这是不可能的,请使用行业最佳实践来存储密码。这意味着你应该:
存储密码的最大危险是,当有人闯入您的系统(或您的DBA窃取密码)时,成千上万用户的密码就会受到破坏。尽管您可以在您的系统中使用每个用户的密码,但是用户通常一次又一次地使用相同的密码,这意味着当他们的密码被泄露时,用户将面临风险。当然,重复使用密码是不好的做法,这是用户所做的事情,我们的工作是通过在我们力所能及的范围内做任何事情来最小化我们的用户的风险。不要忘记,如果不这样做,甚至可能会导致你的公司被起诉。这发生在LinkedIn身上。
因此,对于密码哈希,这实际上意味着使用MD5和SHA (即使使用盐渍)的密码散列是非常无用的,因为这些算法是按速度优化的,这允许黑客计算每秒2300万盐散列(蛮力)。
一些著名的计算密集散列算法是PBKDF2、Bcrypt、PBMAC和scrypt.在.NET中,有一个名为Rfc2898DeriveBytes的PBKDF2实现。下面是一个很好的例子的使用Rfc2898DeriveBytes (完全与可配置的计算强度,这允许这种方法允许承受不断增加的计算机计算能力)。
使用一些实现最佳实践的著名框架也可能是个好主意。@trailmax已经建议使用AspNet身份框架,它使用PBKDF2。但是,避免使用ASP.NET的SqlMembershipProvider,因为它默认使用SHA,而且实际上很难重新配置它以使用安全的方法。
https://stackoverflow.com/questions/26316047
复制相似问题