Want to Convert a Website password Encryption from SHA1 to SHA256
只是寻找一些建议。
我有一个大约有2500个用户的网站-规模虽小,但还在不断增长。
我通过在密码上使用SHA1加密来构建它。
从那以后,我已经读过SHA1是不安全的,并且想更改为SHA256加盐。
有人对如何进行这样的过渡有任何建议吗?
如果我可以解密密码然后重新哈希密码,但看起来还不行,那就太好了。
谢谢
亚当
解决此问题的通常方法是:
随着时间的流逝,用户将自行迁移到sha256。唯一的问题是仅偶尔或根本不登录的用户。对于这些,您可能想发送一封提醒电子邮件,甚至威胁说如果他们在X天之前未登录就关闭他们的帐户(不过,请不要提供实际的原因...)
为了明确起见,SHA是一种哈希算法,(通常)是一条单向街道。您无法解密哈希,这是使用哈希来验证密码的一种优势。您正朝着加盐散列的方向前进,这就是我的做法。
获取密码的唯一方法是让用户自己输入密码。当用户访问您的网站并登录时,请一个个更新密码。在您的身份验证方法中,我将执行您现在正在执行的哈希,并将其与现有字段中的哈希值进行比较(此处无新内容)。假设它匹配,请继续使用SHA256进行加盐/重新哈希处理,并更新数据库中的密码字段。如果需要,请在用户表中保留一些跟踪哪些用户已更新。
我做了很多假设,但这就是我过去解决哈希算法之舞的方式。祝好运!
我还建议您立即将密码哈希从SHA1迁移到SHA256,而不必等待用户再次访问该站点以重新哈希密码。更改将是一次密码哈希迁移,并更改为您的登录验证功能。
假设您使用以下功能生成了密码哈希:password + salt [Sha1]-> Hash-sha1
要迁移到Sha256,可以使用以下算法转换密码哈希:
Hash-sha1 +盐[Sha256]-> Hash-sha256(盐用于增加输入的复杂性。)
根据您的sha256函数的可接受值,您可以考虑将Hash-sha1编码为base64,以实现可打印的ascii。
对于登录验证功能,应该使用以下算法对密码进行哈希处理:
密码+ salt [sha1]-> hash-sha1 + salt [sha 256]-> hash-sha256
缺点是对哈希值进行了两次哈希处理(使用了一些CPU时间),但简化了迁移并提高了安全性。
切换到SHA256几乎不会使您的网站更安全。
SHA1和SH512是消息摘要,它们决不意味着要用作密码哈希(或密钥派生)功能。 (尽管消息摘要可以用作KDF的构建块,例如在具有HMAC-SHA1的PBKDF2中。)
密码哈希函数应防御字典攻击和彩虹表。
当前,唯一的标准(如NIST认可的那样)的密码散列或密钥派生功能是PBKDF2。如果不需要使用标准,则更好的选择是bcrypt和更新的scrypt。维基百科具有所有三个功能的页面:
- https://zh.wikipedia.org/wiki/PBKDF2
- https://zh.wikipedia.org/wiki/Bcrypt
- https://zh.wikipedia.org/wiki/加密
https://crackstation.net/hashing-security.htm上的页面包含有关密码安全性的广泛讨论。
话虽这么说,tdhammers为如何处理迁移提供了很好的建议。