密码哈希中的安全盐已更改

时间:2014-06-16 06:33:10

标签: security cakephp passwords password-encryption

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

我们是否应该不时更换盐以确保更安全? 然后,当更改salt时,用户无法使用当前密码登录。 这是否意味着我们需要在盐更改后重置每个密码记录的密码?

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

2 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:1)

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

更改盐不会有任何帮助,甚至不可能,因为您不知道原始密码。 salt阻止使用单个rainbow-table一次获取所有密码,攻击者必须为每个密码构建一个rainbow-table。改变盐,你不会更难。

也许更容易理解另一种视角。盐会使用彩虹表更难找到原始密码,万一有人可以用哈希窃取您的数据库。如果他成功破解密码,他可以使用此密码,无论您在此期间是否更改过盐。

修改

从@ AD7six评论我得到,CakePHP目前使用配置文件中的全局盐。这在技术上不是盐,而是一把钥匙或胡椒。攻击者需要此密钥才能破解哈希值(假设密钥足够强大)。如果他在服务器上拥有读取此密钥的权限,那么它将变得无用,同时更改密钥也不会使其变得更难。

有一个案例,更改密钥会有所帮助:如果带有哈希的数据库在没有密钥的情况下被盗,并且攻击者以后可以访问密钥,并且密钥已在其间。

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