结合静态和随机盐

时间:2013-01-10 16:58:20

标签: php mysql crypt

  

可能重复:
  Improve password hashing with a random salt

是否存在生成随机盐的有效安全原因,但是将其存储在与密码相同的数据库中以及静态盐中?

例如:

$hashedPass = crypt($pass, $staticsalt.createRandomSalt());// just an example for sanity 
$user->setPass = hashedPass;
$hash->setSalt = createRandomSalt();//assuming same result...

我知道安全社区建议使用exisitng列作为哈希(如用户名),但我真的没有看到一点。 如果数据库被黑客攻击,攻击者也会获得用户名... 如果它位于单独的列/表中,我可以采用其他安全措施。

1 个答案:

答案 0 :(得分:4)

如果您正在生成每条记录的盐,则可以将盐与哈希密码一起存储。否则你永远无法验证pw,例如

register_user:

$salt = rand_salt();
$pw = 'foo';
$hashed = md5($salt . $pw);

登录:

$pw = $_POST['password'];
$hashed = md5($pw);  // oops... no salt. can't hash the pw properly anymore.

如果你的服务器被黑了,那么散列,盐,用户信息分散在哪个数据库并不重要 - 他们会走出门。

但至少在盐中你已经让攻击者的工作变得更加困难,因为现在他们的脚本儿童彩虹表已经不适用了。他们有通常的密码(12345password等)的预生成哈希值,但不适用于2d%@#41234xrs1234589yusdf;hjlk2342sdf@@password