【问题标题】:Security salt in password hash changed [closed]密码哈希中的安全盐已更改[关闭]
【发布时间】:2014-08-05 22:19:12
【问题描述】:

使用安全盐的哈希密码比纯文本密码更安全。

我们是否应该不时更换盐以更安全? 然后更改盐时,用户无法使用当前密码登录。 是不是说当salt发生变化时,我们需要为每条密码记录重新设置密码?

如果我们永远失去了安全盐怎么办? (有人更改了它,或者未经许可删除了盐文件等。)

【问题讨论】:

  • 如果更改 salt,所有使用旧 salt 的现有密码都将失效。如果您丢失了应用程序的盐 - 所有现有密码都将失效。对所有密码使用相同的盐实际上不是一个好习惯——或者根本就使用简单的哈希。相反,你现在应该做的是使用 php 的 built-in password functions
  • 结束这个问题的有趣原因,它可能是重复的,但肯定不是基于意见的。
  • @martinstoeckli 第一个问题是:Should we change the salt from time to time for more secure? - 你认为这个问题会吸引基于意见的答案?例如,您完全绕过了关于使用简单的盐渍 sha1 哈希的问题,而是直接转而推广当前的最佳实践。
  • clearly say that changing a salt will not increase security - 如果盐是已知的 =)。

标签: security cakephp passwords password-encryption


【解决方案1】:

我不会。这会导致你提到的问题。相反,如果你想要一个更随机的盐,你可以让它成为关于用户数据的函数。就像你可以用用户名、他们帐户的创建日期来加盐他们的密码,甚至存储他们创建帐户时生成的随机数,你可以用它来加盐他们的密码。

为了进一步解释最后一部分,我的意思是,当他们创建帐户时,生成一个随机数。将数字存储在数据库中并用它加盐密码(可能还有上面提到的其他东西),然后存储加盐密码的哈希值。下次他们尝试登录时,检索与他们的帐户关联的随机数(从数据库中)并以与创建帐户时对原始密码相同的方式对提交的密码进行加盐,然后对其进行哈希处理并将其与哈希值进行比较数据库。

【讨论】:

    【解决方案2】:

    查看 PHP 函数 password_hash()password_verify(),它们将处理安全盐的创建并将它们添加到生成的哈希值中,因此您可以将其存储到单个数据库字段中。

    更改盐没有任何帮助,甚至不可能,因为您不知道原始密码。盐防止使用单个彩虹表一次获取所有密码,攻击者必须为每个密码构建一个彩虹表。改变盐不会让这变得更难。

    也许换个角度更容易理解。盐会使使用彩虹表更难找到原始密码,以防有人可以使用哈希窃取您的数据库。如果他破解密码成功,他可以使用这个密码,而不管你在这期间是否改变了盐。

    编辑:

    从@AD7six cmets 我得到,CakePHP 目前使用来自配置文件的全局盐。从技术上讲,这不是盐,而是钥匙或胡椒。攻击者需要这个密钥才能破解哈希(假设密钥足够强大)。如果他在服务器上有权限读取这个密钥,它将变得无用,而且更改密钥也不会变得更难。

    在一种情况下更改密钥会有所帮助:如果带有哈希值的数据库在没有密钥的情况下被盗,并且攻击者稍后可以访问密钥,并且密钥在同时。

    如果您真的想通过更改密钥使所有密码无效,那么请看看另一种获得相同优势的方法。您可以加密已经计算的密码哈希,这样您就可以随时交换密钥。我试图在tutorial 中更深入地解释这一点。

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-09-28
    • 2019-03-13
    相关资源
    最近更新 更多