很长时间以来,我一直在使用PHPass来破解我的密码。我承认,仍然有一些事情我不完全理解(或忽略)正确的散列密码,所以今天我审查了我可以找到的所有信息。
在回顾PHPass文档时,我已经深入到以下几个方面:
除了实际的散列之外,phpass在散列新密码或密码时透明地生成随机盐类,并将哈希类型、salt和密码扩展迭代计数编码为它返回的“哈希编码字符串”。当phpass针对存储的散列验证密码或密码时,它同样透明地从“哈希编码字符串”中提取和使用哈希类型标识符、salt和迭代计数。因此,您不需要费心在您自己的上进行腌制和伸展- phpass会为您处理这些问题。
我说出了困扰我的句子。
我一直认为盐应该是某种程度的秘密,因为攻击者不应该知道它。因此,如果理解正确,PHPass会将使用的盐类存储在相同的散列中,这样它就能够在比较密码时使用它,并检查是否有效。
我的问题是
发布于 2012-08-27 10:28:58
盐的目的不是秘密。其目的是在每个散列输入中添加一个唯一的组件,这样相同的密码就不会散列到相同的散列中,从而使蛮力处理变得更加困难和耗时,因为每个散列都必须单独尝试。
是的,如果salt是秘密的话,它会稍微安全一些,但这在实践中很难实现,因为您的应用程序也需要salt,所以它需要存储在密码也可以访问的地方。因此,在实践中,当攻击者获得密码哈希时,他通常也能够获得salt。
发布于 2012-08-27 10:30:08
一个小小的背景
salt并不意味着是秘密的,相反,通过确保每个使用实例的散列结果是唯一的,salt“起作用”。这是通过为每个计算的散列选择不同的随机盐分值来完成的。
salt的意图在已知时不会受到破坏;攻击者仍然需要分别攻击每个散列。因此,您可以简单地将salt存储在密码旁边。
那么,PHPass安全吗?
是!PHPass (根据最佳实践)为您生成一个强随机盐。它是一个良好的评论和高质量的图书馆。
感兴趣的链接
How to securely hash passwords?
发布于 2012-08-27 10:27:22
如果我正确理解,盐类主要用于阻止预先计算的散列/彩虹表攻击。只要生成所使用的散列,使其具有合理的全局惟一性(例如,在PHPass中没有硬编码),您就可以了。
https://stackoverflow.com/questions/12140178
复制相似问题