PHP的密码_哈希():公共一次性盐与私人固定盐

时间:2017-07-22 20:18:02

标签: php security hash passwords salt

password_hash()http://php.net/manual/en/function.password-hash.php)的PHP手册说:

  

使用的算法,成本和salt作为哈希的一部分返回。因此,验证散列所需的所有信息都包含在其中。

我的问题是:为什么?

我在另一个SO答案中读到了这个:(Static Salt vs Random Salt - Security PHP

  

随机盐具有巨大的益处。如果系统中的所有帐户都使用相同的盐,则攻击者可以强制计算该盐的哈希值,并且只需一次计算就可以进入所有帐户。

我明白了。但是,password_hash()将salt嵌入到返回的哈希中,我相信它会公开,因此攻击者知道每个密码的盐。

最好不要使用长的私人盐吗?

我能想到的一件事是,使用相同的盐创建的哈希值对于相同的密码是相同的,并且可能允许攻击者通过对数据库中哈希值的统计分析来取得进展。

但是,这可以通过使用私有哈希字典而不仅仅是一个来缓解,但在PHP 7中password_hash()不再可能这样做。

我不是安全专家,我相信PHP人员知道他们正在做什么,所以我很高兴听到为什么password_hash()方式被认为是正确的方式去吧。

1 个答案:

答案 0 :(得分:2)

我找到了这个答案:

http://php.net/manual/en/function.password-hash.php#114410

  

如果您认为"为什么盐包含在哈希值中并保存   当我把它存储在我的数据库中时?"

     

答案我发现:盐必须是独一无二的。它并不意味着是一个   秘密。

     

如之前的笔记和文档中所述:让password_hash()注意   盐。

     

使用独特的盐可以强制攻击者破解哈希值。该   hash是唯一的,无法在彩虹表中找到。