2

可能重复:
使用随机盐改进密码散列

是否有有效的安全理由来生成随机盐,然后将其存储在与密码和静态盐相同的数据库中?

例如:

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

我知道安全社区建议对哈希使用现有列(如用户名),但我真的没有看到任何意义。如果数据库被黑客入侵,攻击者也会获得用户名......而如果它位于单独的列/表中,我可以加入额外的安全措施。

4

1 回答 1

4

如果您要生成每条记录的盐,则必须将盐与散列密码一起存储否则你将永远无法验证密码,例如

注册用户:

$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.

如果您的服务器被黑客入侵,那么散列、盐、用户名分布在哪个数据库中并不重要——它们会被淘汰。

但至少有了盐,你让攻击者的工作变得更加困难,因为现在他们的脚本小子彩虹表不再适用了。12345他们为常用密码( ,等...)预先生成了哈希值password,但2d%@#41234xrs12345or没有89yusdf;hjlk2342sdf@@password

于 2013-01-10T17:04:31.403 回答