Php 在登录时重新设置随机添加的密码是否会提高安全性?

Php 在登录时重新设置随机添加的密码是否会提高安全性?,php,security,hash,salt,Php,Security,Hash,Salt,我目前正在从事一个PHP项目,我想知道如何使我的系统尽可能安全。我目前正在使用password\u hash散列我的密码,然后将它们存储在我的数据库中。我想知道的是:将新的salt散列重新灰化并重新保存到数据库中是否会提高安全性,或者这只是一种错觉?每次用户登录时使用新的salt计算一个新的散列,将不会提高系统的安全性 因为密码是相同的,只有salt发生了变化,所以一个能够访问散列的破解者可以以完全相同的代价进行暴力破解。更换食盐不会提高安全性,食盐不是秘密,即使已知,它也能胜任工作。隐藏或更改

我目前正在从事一个PHP项目,我想知道如何使我的系统尽可能安全。我目前正在使用
password\u hash
散列我的密码,然后将它们存储在我的数据库中。我想知道的是:将新的salt散列重新灰化并重新保存到数据库中是否会提高安全性,或者这只是一种错觉?

每次用户登录时使用新的salt计算一个新的散列,将不会提高系统的安全性


因为密码是相同的,只有salt发生了变化,所以一个能够访问散列的破解者可以以完全相同的代价进行暴力破解。更换食盐不会提高安全性,食盐不是秘密,即使已知,它也能胜任工作。隐藏或更改它不会增加任何价值(隐藏是困难的,有比隐藏盐更好的方法添加秘密)。

我认为这不会增加安全性,不。您有两种风险情况:

  • 黑客闯入服务器并在那里呆了一段时间而未被发现。在这种情况下,可以在用户登录时通过编程捕获密码。这比强制使用强散列算法要省力得多
  • 黑客破门而入,窃取了数据库的一个副本,作为回应,系统管理员堵塞了安全漏洞,并从备份中快速恢复服务器
在第二种情况下,破解者有一组用户名、电子邮件地址和散列密码,他们可能希望尝试暴力强迫。如果这些散列创建一次或一千次,则没有任何优势

值得记住的是,我们在这里试图防范的是什么。如果网站的安全性遭到破坏,那么在其他流行服务中使用相同用户名/密码组合的用户会受到连锁反应。散列的一个主要原因,以及攻击者强制输入密码的目的,是为了查看用户是否可以在其他地方被黑客攻击(例如他们的社交媒体或银行帐户)

这就是为什么我们建议人们不要重复使用密码,而应该使用存储在密码管理器中的强密码。如果人们可以为每个服务使用不同的用户名和/或不同的电子邮件,那就更好了。顺便说一句,如果你使用的是地址为
GMail的GMail,那么每项服务使用一封电子邮件就非常容易。alias@gmail.com
,只需执行以下操作:

gmail.alias+randomcode@gmail.com
电子邮件当然应该存储在您的密码管理器中-如果您忘记了这一点,您将无法使用密码提醒功能,并且您将被锁定,除非该服务愿意接受其他身份证明。尽管如此,这种方法对于使用被破坏的服务的连锁反应更为有效——如果用户总是使用不同的电子邮件地址,那么其他地方的弱密码提醒系统就更难被利用

拥有自己域名的用户也可以做类似的事情——设置一个电子邮件帐户“一网打尽”,然后使用任何你喜欢的别名。

首先,我不是密码专家。我在大学上过密码学课,但这并不能使我成为一名专家

使用salt的原因是,针对散列的字典攻击将不起作用。由于同一密码可以与许多不同的密码组合,因此可能存在许多不同的哈希。因此,不可能有一个简单的密码哈希表,因为没有salt就可以了

因此,用不同的盐重新设置密码不会有额外的好处。新盐应该和旧盐一样随机,因此同样安全

但是,当密码长时间未更改时,可能会使用哈希算法对其进行哈希运算,该算法在哈希运算时很好,但现在很差


PHP网站上解释了推荐的操作方法,但归结起来是:使用
密码\u验证
检查密码,使用
密码\u哈希加密密码。使用
password\u needs\u rehash
检查密码是否使用安全哈希进行哈希处理。如果不是,请重新刷新它,或要求用户更改它(取决于您的安全策略)。

是的,确实如此。为什么?看看这里的例子:谢谢你的反馈,到时候我一定会实施的@赛克:你指的是那篇文章的哪一部分?@赛克:我没有从这篇文章中得到与你相同的结论。它说的是,你不应该每次都使用相同的盐值。每次密码更改时,必须使用新的随机密码。然而,没有任何地方表明即使密码保持不变,更改salt也是一个好主意。我应该补充说,理想情况下,salt应该根据每个条目的用户数据动态创建。这将阻止使用相同的哈希值保存相同的密码,并迫使攻击者投入大量反向工程以获得任何结果。当然,这仍然是“通过隐晦实现安全”。更不用说,当人们点击恶意链接时,他们可以发送虚假的密码重置电子邮件。我总是想到最简单的解决方案,实际上,最简单的解决方案就是询问人们的密码。37%的人会在电话里说出他们的密码,如果你假装为他们是客户的公司工作。在你的场景中,你知道公司发送的网站、品牌和自动电子邮件格式。。。因此,让我们对客户轻松一点,注册一个类似于欺骗it的阅读域,在相同的环境中将客户发送到那里,并使用登录帖子数据将他们重新路由到原始站点。真的很简单。。。