我有一个基于Rfc2898DeriveBytes的密码哈希机制(代码详细信息参见此处:http://crackstation.net/hashing-security.htm)。该类内部使用SHA1算法,但CrackStation链接指出SHA1已经“过时”,但也指出,虽然Rfc2898DeriveBytes内部使用SHA1,但Rfc2898DeriveBytes仍然是一种有效的机制。
我的客户的安全部门得知,“SHA1被破解了”(具体来说,用于在互联网上传输文档的签名目的,SHA1已被打败,在某些情况下存在漏洞——这个“漏洞”不适用于密码哈希,但对安全部门来说无关紧要)。因此,他们要求我们改变密码哈希机制以使用SHA2算法。
目前,.Net框架没有等效于Rfc2898DeriveBytes内部使用SHA2(或SHA256等)的类。我知道可以使用反射来获取此类的源代码并进行更改,但我一直被告知加密的第一条规则是“不要自己增加难度”。
这主要是客户政治上的要求,而不是技术上的要求,很容易通过在将密码运行到Rfc2898DeriveBytes之前通过SHA2哈希运行来满足。然而,我对密码学的了解不足以知道这是否是不好的——事实上,可能会导致密码哈希不安全。
有没有人知道一个等效于Rfc2898DeriveBytes的类,可以使用SHA2?或者,有没有人知道在运行到Rfc2898DeriveBytes之前通过SHA2哈希运行密码是否完全安全?
我的客户的安全部门得知,“SHA1被破解了”(具体来说,用于在互联网上传输文档的签名目的,SHA1已被打败,在某些情况下存在漏洞——这个“漏洞”不适用于密码哈希,但对安全部门来说无关紧要)。因此,他们要求我们改变密码哈希机制以使用SHA2算法。
目前,.Net框架没有等效于Rfc2898DeriveBytes内部使用SHA2(或SHA256等)的类。我知道可以使用反射来获取此类的源代码并进行更改,但我一直被告知加密的第一条规则是“不要自己增加难度”。
这主要是客户政治上的要求,而不是技术上的要求,很容易通过在将密码运行到Rfc2898DeriveBytes之前通过SHA2哈希运行来满足。然而,我对密码学的了解不足以知道这是否是不好的——事实上,可能会导致密码哈希不安全。
有没有人知道一个等效于Rfc2898DeriveBytes的类,可以使用SHA2?或者,有没有人知道在运行到Rfc2898DeriveBytes之前通过SHA2哈希运行密码是否完全安全?