是否存在生成随机盐的有效安全原因,但是将其存储在与密码相同的数据库中以及静态盐中?
例如:
$hashedPass = crypt($pass, $staticsalt.createRandomSalt());// just an example for sanity
$user->setPass = hashedPass;
$hash->setSalt = createRandomSalt();//assuming same result...
我知道安全社区建议使用exisitng列作为哈希(如用户名),但我真的没有看到一点。 如果数据库被黑客攻击,攻击者也会获得用户名... 如果它位于单独的列/表中,我可以采用其他安全措施。
答案 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.
如果你的服务器被黑了,那么散列,盐,用户信息分散在哪个数据库并不重要 - 他们会走出门。
但至少在盐中你已经让攻击者的工作变得更加困难,因为现在他们的脚本儿童彩虹表已经不适用了。他们有通常的密码(12345
,password
等)的预生成哈希值,但不适用于2d%@#41234xrs12345
或89yusdf;hjlk2342sdf@@password
。