我有一个基于Rfc2898DeriveBytes的密码哈希机制(基于此处详细描述的代码:http://crackstation.net/hashing-security.htm)。在内部,此类使用SHA1-CrackStation链接确实指示SHA1是“旧的”,但同时指出,尽管Rfc2898DeriveBytes在内部使用它,但Rfc2898DeriveBytes仍然是一种很好的机制。
我的一个客户的安全部门听说“ SHA1已被破坏”(具体地说,在某些情况下,为了签署用于通过Internet传输的文档的目的,SHA1已被击败-事实上,这种“漏洞” ”(不适用于密码哈希对安全部门无关紧要)。结果,他们要求我们更改密码哈希机制以使用SHA2。
当前,.Net框架没有等效的Rfc2898DeriveBytes在内部使用SHA2(或SHA256等)。我知道我可以使用反射来获取此类的源代码并对其进行更改,但是我一直被告知加密的第一个规则是“不要自己开发”。
这主要是我的客户的政治需求,而不是技术上的需求,可以通过在通过Rfc2898DeriveBytes运行密码之前先通过SHA2哈希运行密码来轻松满足这一需求。但是,我对密码学知识不足,无法确定这是否不好-实际上可能导致客观上安全性较低的密码哈希。
有人知道采用SHA2的Rfc2898DeriveBytes等效类吗?或者,有人知道在Rfc2898DeriveBytes之前通过SHA2哈希运行密码是否完全安全?
最佳答案
从“ SecurityDriven.NET”书中下载免费的代码示例。找到需要HMAC工厂的PBKDF2类。可用的工厂包括SHA2(256、384、512)。
在Rfc2898DeriveBytes
之前通过SHA2哈希运行密码不是正确的选择,即使这不太可能成为您所做的任何事情中最薄弱的部分(您将丢失密码熵)。