【问题标题】:Want to Convert a Website password Encryption from SHA1 to SHA256想要将网站密码加密从 SHA1 转换为 SHA256
【发布时间】:2011-10-21 17:28:39
【问题描述】:

只是寻求一些建议。 我有一个拥有大约 2500 名用户的网站 - 规模虽小但不断增长。 我在密码上使用 SHA1 加密来构建它。 我从那以后读到 SHA1 不安全,想改成 SHA256 和 Salt。

有人对如何进行这样的过渡有任何建议吗? 如果我可以解密密码并重新散列它们,那就太好了,但它似乎无法做到。

谢谢 亚当

【问题讨论】:

    标签: sha1 sha256


    【解决方案1】:

    澄清一下,SHA 是一种散列算法,它(通常)是单向的。您无法解密哈希,这是使用它们来验证密码的一种优势。你在转移到盐渍哈希方面走在了正确的轨道上,这就是我的做法。

    获取密码的唯一方法是让用户自己输入密码。当用户访问您的站点并登录时,请一一更新密码。在您的身份验证方法中,我将执行您现在正在执行的哈希,并将其与现有字段中的内容进行比较(这里没有新内容)。假设它匹配,继续使用 SHA256 加盐/重新散列,并更新数据库中的密码字段。如果您愿意,请在您的用户表中保留一些信息来跟踪哪些用户已更新。

    我做了很多假设,但这就是我过去解决哈希算法舞蹈的方法。祝你好运!

    【讨论】:

      【解决方案2】:

      通常的处理方式是这样的:

      1. 使 hashed-password 列更大以容纳 sha256 哈希,并添加一个“salt”列
      2. 最初将 salt 字段设置为 NULL,并调整密码检查代码,使 NULL salt 表示 sha1,非 NULL 表示 sha256
      3. 一旦 sha1-use 成功登录,使用 salt 将密码重新散列到 sha256,然后更新数据库。

      随着时间的推移,用户会自行迁移到sha256;唯一的问题是用户只偶尔登录或根本不登录。对于这些,您可能想要发送一封提醒电子邮件,甚至威胁如果他们在第 X 天之前没有登录,他们将关闭他们的帐户(但不要给出实际原因......)

      【讨论】:

        【解决方案3】:

        我还有另一个建议是立即将您的密码哈希从 SHA1 迁移到 SHA256,而无需等待用户再次访问该站点以重新哈希密码。更改将是一次密码哈希迁移并更改为您的登录验证功能。

        假设你的密码哈希是使用函数生成的:password + salt [Sha1]-> Hash-sha1

        要迁移到 Sha256,您可以使用以下算法转换您的密码哈希:

        Hash-sha1 + salt [Sha256]-> Hash-sha256 (salt 用来增加输入的复杂度。)

        根据您的 sha256 函数的可接受值,您可以考虑将 Hash-sha1 编码为 base64 以用于可打印的 ascii。

        对于您的登录验证功能,应使用以下算法对密码进行哈希处理:

        密码 + salt [sha1] -> hash-sha1 + salt [sha 256] -> hash-sha256

        缺点是两次散列(使用一些 CPU 时间)但简化了迁移并提高了安全性。

        【讨论】:

        • 我认为Kerckhoffs's principle 适用于为什么这是一个坏主意的原因 - “通过默默无闻的安全性”。基本密码仍存储为 SHA1。如果你要做这样的事情,那么 HMAC 可能是有意义的。
        【解决方案4】:

        切换到 SHA256 几乎不会让您的网站更安全。

        SHA1 和 SH512 是 消息摘要,它们从不用作密码散列(或密钥派生)函数。 (尽管消息摘要可以用作 KDF 的构建块,例如在带有 HMAC-SHA1 的 PBKDF2 中。)

        密码散列函数应防御字典攻击和彩虹表。

        目前,唯一的标准(如 NIST 认可的)密码散列或密钥派生函数是 PBKDF2。如果不需要使用标准,更好的选择是 bcrypt 和更新的 scrypt。维基百科有所有三个功能的页面:

        https://crackstation.net/hashing-security.htm 的页面包含对密码安全性的广泛讨论。

        话虽如此,tdhammers 就如何处理迁移提供了很好的建议。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2019-09-18
          • 1970-01-01
          • 2011-03-03
          • 2011-02-26
          • 2012-11-22
          • 1970-01-01
          • 1970-01-01
          • 2012-06-26
          相关资源
          最近更新 更多