安全密码散列
我需要在.Net WinForms应用程序中存储单个密码的散列。
什么是最安全的方式来做到这一点?
尤其是:
我假设该算法应该是SHA512或HMACSHA512。
使用至少128位或更长的安全随机盐对您的散列进行清理,以避免彩虹攻击并使用BCrypt,PBKDF2或scrypt。 PBKDF2带有NIST认证。
引用:Archive.org:http://chargen.matasano.com/chargen/2007/9/7/enough-with-the-rainbow-tables-what-you-need-to-know-about-s.html
问题是MD5很快。 它的现代竞争者也是如此,比如SHA1和SHA256。 速度是现代安全散列的设计目标,因为散列几乎是每个加密系统的构建块,并且通常以每个数据包或每个消息为基础执行需求。
速度正是你在密码哈希函数中不想要的。
快速密码验证功能是一个问题,因为他们可以使用蛮力攻击。 使用上面的所有算法,您可以控制“缓慢”
我可以推荐BCrypt.net。 非常容易使用,你可以调整需要多长时间才能完成哈希,这真是太棒了!
// Pass a logRounds parameter to GenerateSalt to explicitly specify the
// amount of resources required to check the password. The work factor
// increases exponentially, so each increment is twice as much work. If
// omitted, a default of 10 is used.
string hashed = BCrypt.HashPassword(password, BCrypt.GenerateSalt(12));
// Check the password.
bool matches = BCrypt.CheckPassword(candidate, hashed);
对于具有大量密码的服务器端实现,您绝对应该使用像bcrypt这样的可调迭代方法。 关于该主题的这篇着名文章仍然(大部分)是相关的:
http://www.securityfocus.com/blogs/262
对于独立应用程序中的单个密码,其中存储位置可能已由系统自己的身份验证系统保护,我认为这不重要。 一个强大的散列可能足够好,添加盐很容易,没有理由不这样做。
链接地址: http://www.djcxy.com/p/21557.html