2012-08-27 35 views
6

我一直在使用PHPass来哈希我的密码很长一段时间。我承认,仍然存在一些我不完全理解(或忽略)的问题,以便正确地对密码进行哈希处理,所以今天我正在审查我可以找到的所有信息。正确的腌制和使用PHPass

回顾PHPass文件,我已经steped到这一点:

除了实际散列,phpass透明方式生成当一个新的密码或口令散列随机盐,以及它所编码的哈希类型,盐,并且密码扩展迭代计入它返回的“散列编码字符串”。当phpass根据存储的散列验证密码或密码时,它类似地透明地提取并使用散列类型标识符,salt和迭代计数从“散列编码字符串”中排除。 因此,您不需要费心自己的腌制和拉伸 - phpass会为您处理这些问题。

我用粗体显示了一句让我困扰的句子。
我总是认为盐应该有些秘密,因为它不应该被攻击者知道。因此,如果理解正确,PHPass会将相同散列中使用的salt存储起来,以便在比较密码时检查它是否有效。
我的问题是

  1. 这种产品是否安全?如果哈希被破坏,攻击者就会用哈希密码来破解密码......我在这里错过了一些东西。
  2. 我在这里真的可以免费关于腌制密码吗?我真的可以依靠PHPass吗?
+0

随着加入'salt'您在安全性添加更多的层。这是“深度防御”的主要原则。但是,如果_phpass_已经添加了salt,它将不会添加另一个图层。 – Leri

+0

1.)你认为哪种安全?你能做出更具体的吗? - 2.)你能否在几分之一秒内用肯定或否定来回答以下问题:“Phpass是否使用盐?” - 说出你可以如何确定和快速回答问题,以及答案。 – hakre

+0

@hakra我指的是将盐与密码一起存储的行为。我总是将它存储在不同的地方(例如,阅读数据库字段)更好。 –

回答

1

盐的用途是而不是是一个秘密。目的是为每个散列输入添加一个独特的组件,因此相同的密码不会散列到相同的散列,从而使得蛮力过程更加困难和耗时,因为每个散列必须单独尝试。

是的,这将是稍微更安全,如果盐是秘密的,但很难在实践中认识到,因为应用程序所需要的盐一样,所以它需要在密码是访问存储在某个地方好。因此,实际上,当攻击者获得密码哈希值时,他通常也能够得到盐。

1

如果我理解正确,salt主要用于阻止预先计算的散列/彩虹表攻击。只要所使用的散列生成以便其具有全局唯一性(例如,未在PHPass中进行硬编码),则可以。

3

一点背景
盐并不意味着是秘密的,而是盐“作品”,通过确保唯一的每个哈希结果使用实例。这是通过为每个计算出的散列选取不同的随机salt值来完成的。

盐的意图在知道时不会受到损害;攻击者仍然需要分别攻击每个哈希。因此,您可以简单地将盐与密码一起存储。

那么,PHPass安全吗?
是的! PHPass(根据最佳实践)为您生成一个强大的随机盐。这是一个很好的评价和高质量的图书馆。感兴趣

链接:
How to securely hash passwords?
How to store salt?
Password Hashing add salt + pepper or is salt enough?
Salt Generation and open source software