只是寻找一些建议。 我有一个拥有大约2500名用户的网站 - 规模虽小但正在增长。 我在密码上使用SHA1加密来构建它。 我已经读过SHA1是不安全的,想改为用盐说SHA256。
有没有人对如何进行这样的转换有任何建议? 如果我可以解密密码并重新哈希它们会很好,但它似乎没有能力。
THX 亚当
答案 0 :(得分:11)
通常的解决方法是:
随着时间的推移,用户将自己迁移到sha256;唯一的问题是用户只是偶尔登录或根本不登录。对于这些,您可能希望发送提醒电子邮件,或者甚至威胁要关闭他们的帐户如果他们在第X天之前没有登录(尽管不提供实际原因......)
答案 1 :(得分:7)
为了澄清,SHA是一种散列算法,它(通常)是一条单行道。您无法解密哈希,这是使用它们验证密码的强度。你正在走向正确的轨道,转向盐渍哈希,这就是我将如何做到的。
获取密码的唯一方法是让用户自己输入密码。当用户访问您的站点并登录时,请逐个更新密码。在您的身份验证方法中,我将执行您现在正在执行的哈希,并将其与现有字段中的内容进行比较(此处没有任何新内容)。假设它匹配,继续使用SHA256进行salt / re-hash,并更新数据库中的密码字段。如果需要,请在您的用户表中跟踪哪些用户已更新。
我做了很多假设,但这就是我过去解决哈希算法舞蹈的方法。祝你好运!
答案 2 :(得分:1)
我还有另一个建议是立即将密码哈希值从SHA1迁移到SHA256,而无需等待用户再次访问该站点以重新密码。更改将是一次性密码哈希迁移并更改为您的登录验证功能。
假设您的密码哈希是使用以下函数生成的:password + salt [Sha1] - >散列-SHA1
要迁移到Sha256,您可以使用以下算法转换密码哈希:
Hash-sha1 + salt [Sha256] - > Hash-sha256(盐用于增加输入的复杂性。)
根据sha256函数的可接受值,您可以考虑将Hash-sha1编码为base64以用于可打印的ascii。
对于登录验证功能,应使用以下算法对密码进行哈希处理:
密码+盐[sha1] - > hash-sha1 + salt [sha 256] - >散列-SHA256
缺点是哈希两次(使用一些CPU时间),但简化了迁移和更好的安全性。
答案 3 :(得分:1)
切换到SHA256几乎不会让您的网站更安全。
SHA1和SH512是消息摘要,它们从不意味着是密码哈希(或密钥派生)功能。 (尽管消息摘要可以用作KDF的构建块,例如在带有HMAC-SHA1的PBKDF2中。)
密码散列函数应该防止字典攻击和彩虹表。
目前,唯一的标准(如NIST批准的)密码散列或密钥派生功能是PBKDF2。如果不需要使用标准,更好的选择是bcrypt和更新的scrypt。维基百科有所有三个功能的页面:
https://crackstation.net/hashing-security.htm页面包含对密码安全性的广泛讨论。
话虽如此,tdhammers就如何处理迁移提供了很好的建议。