密码哈希、登录时更新Salt和哈希以及PHPass


Password Hashes, Updating Salt and Hash on Login, and PHPass

我记得读过一个方案,其中检查密码的过程是这样的:

  1. 在数据库中给定(hash、salt)
  2. 使用salt对哈希密码进行检查
  3. 散列密码,旧散列为salt
  4. 在数据库中存储(new hash,salt,也称为old hash

我找不到原始来源。无论如何,我不理解

  1. 使用旧散列作为盐的优点是什么(与使用随机盐相反),

  2. 一般来说,这种方案的优点是什么(使彩虹表攻击更加复杂?),以及

  3. 如果的优势,那么如何使用PHPass应用该方案,因为盐似乎是"在"PHPass中管理的。。。

直觉上,我认为这个方案往好了说毫无作用,往坏了说会恶化的安全性(由于对过去值的依赖),但密码安全是我不信任直觉的一个领域。请开导我。

编辑:

我在询问关于在每次检查时重新散列密码的问题。这些类似的问题确实回答了第一个问题—用杂碎当盐是没有用的—但不是在每次检查时重新散列是否有用:

  • 使用数据哈希作为salt
  • 用你正在散列的散列作为盐

我不是安全专家,但回答#1没有任何优势。它所做的只是使事情进一步复杂化。

只需使用良好的随机生成的盐,正如您所说,PHPPass在内部处理它,PHPass被认为是一个非常好的工具,因为它已经被许多安全专家审查过。