如果正确散列(即使用随机盐和强散列),散列密码是不可逆的,即使密码相同,不同帐户的散列密码也会不同。
这意味着您想要做的任何分析几乎都不能首先使用正确散列(即随机盐)密码完成,即您从记录密码中几乎没有任何收获,最多您会因为您将一些信息泄漏到某些地方而丢失攻击者可能更容易访问,因为日志通常不像存储的密码那样敏感。
当使用普通哈希代替(无盐)时,您提到的一些事情可能会以增加攻击向量为代价,因为现在攻击者可以使用预先计算的哈希表来反转您记录的密码。
也许您对正确的密码哈希意味着什么有一些误解。我推荐阅读如何安全地散列密码?了解如何正确地进行密码散列以及为什么这样做,但在下文中,我将解决您似乎有的一些误解:
检查是否只是拼写错误:如果用户第一次使用相同的哈希密码登录失败但后来成功登录,则可能只是拼写错误
您无法使用散列密码检查拼写错误,因为即使输入的微小变化也会导致输出发生巨大变化。您也无法检查原始密码中的拼写错误,因为您无法反转哈希以获取密码进行比较。要检查输入的错误密码是否始终相同,您可以按照 Jon Bentley 在评论中的建议记录使用与存储的(正确)密码相同的盐加盐的哈希值。如果日志至少与存储的密码一样受到保护,那么这只会稍微增加攻击面,但正如我所说,日志通常不像密码存储那样敏感。
... 一些常见的密码,例如 123456 和生日,具有固定的哈希值,...
正确的密码散列使用随机盐来使使用普通密码的预先计算的散列进行攻击是不可能的。这意味着相同的密码在被散列时会产生不同的散列,即您对这些密码具有固定散列的假设是错误的。同样,您可以在这里使用更容易反转的未加盐哈希,但会增加攻击面。
当输入的密码仍然可用并且只记录此分析的结果时,最好进行这种分析。
...如果用户通常无法使用相同的哈希登录,并且哈希与另一个帐户相同但随后成功登录,...
由于相同密码的哈希值不同,因此您需要最初输入的密码来进行这种比较。由于您无法从记录的哈希中获取此信息,因此记录哈希密码无济于事。同样,您可以使用未加盐的哈希值进行此类分析,但这意味着您的所有帐户都必须以不安全的未加盐方式提供密码——这大大增加了攻击面。您可能也可以使用加盐密码进行此类分析,但随后需要记录新输入的密码,并使用您当前使用的所有盐(即每个帐户一个)进行盐哈希处理。