Php 静态盐和随机盐的结合

Php 静态盐和随机盐的结合,php,mysql,crypt,Php,Mysql,Crypt,可能重复: 是否有有效的安全原因来生成随机salt,然后将其与密码以及静态salt存储在同一数据库中 例如: $hashedPass = crypt($pass, $staticsalt.createRandomSalt());// just an example for sanity $user->setPass = hashedPass; $hash->setSalt = createRandomSalt();//assuming same result... 我知道安全社

可能重复:

是否有有效的安全原因来生成随机salt,然后将其与密码以及静态salt存储在同一数据库中

例如:

$hashedPass = crypt($pass, $staticsalt.createRandomSalt());// just an example for sanity 
$user->setPass = hashedPass;
$hash->setSalt = createRandomSalt();//assuming same result...
我知道安全社区建议对散列使用现有列(如用户名),但我真的看不出有什么意义。 如果数据库被黑客攻击,攻击者也会得到用户名。。。
如果它在一个单独的列/表中,我可以加入额外的安全措施。

如果您正在生成每记录的salt,则必须将salt与哈希密码一起存储。否则您将无法验证pw,例如

注册用户:

$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.
如果你的服务器被黑客攻击了,那么散列、salt、userna消息散布到哪个数据库并不重要,它们都会出去


但至少有了salt,攻击者的工作变得更加困难,因为现在他们的脚本kiddy rainbow表不再适用。他们已经为常用密码(
12345
password
等)预先生成了哈希,但没有为
2d%@#41234xrs12345
89yusdf;hjlk2342sdf@@password

如果要生成每记录salt,则必须将salt与哈希密码一起存储。否则您将无法验证pw,例如

注册用户:

$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.
如果你的服务器被黑客攻击了,那么散列、salt、userna消息散布到哪个数据库并不重要,它们都会出去


但至少有了salt,攻击者的工作变得更加困难,因为现在他们的脚本kiddy rainbow表不再适用。他们已经为常用密码(
12345
password
等)预先生成了哈希,但没有为
2d%@#41234xrs12345
89yusdf;hjlk2342sdf@@password

在阅读了提议的副本后,我同意。我在写一篇评论时提到了“盐不需要保密”:)我的想法是将静态和随机结合起来。另外,虽然盐不需要保密(PBKDF2)这一点通常是正确的。随着CPU周期变得越来越便宜,这个概念变得越来越不安全……在阅读了提议的dupe之后,我同意。我在写一篇评论时提到了“盐不需要保密”:)我的想法是将静态和随机结合起来。另外,虽然盐不需要保密(PBKDF2)这一点通常是正确的。随着CPU周期变得越来越便宜,这个概念变得越来越不安全……我想跨多个服务器分担安全责任。攻击者需要:1)进入web服务器以获取静态salt 2)进入用户数据库以获取散列3)进入散列数据库/服务器以获取随机salt i问题也不是我是否需要存储动态salt。那部分是显而易见的。这更像是一种散列/比较散列的方法。这有什么意义?如果您的服务器遭到黑客攻击,那么攻击者可以复制您的“从服务器Y获取哈希值”。你将一事无成,并且增加了攻击漏洞,使你拥有多台服务器而不是一台服务器。获取存储在哈希中的数据与拥有执行内容的能力不同。例如:攻击者可以知道我的本地存储哈希,知道sql DB的密码,但不能做任何你不理解的事情(由于策略FW等)。所以你有多台服务器。一个存储哈希(salt+pw),一个存储salt,一个存储用户名,等等。。。您仍然需要将所有这些内容提取到单个位置以执行登录(例如)。因为数据是可获取的,所以您什么也没做。攻击者仍然可以破坏您的系统以获取salts+哈希+用户名。他们可能需要跳转几圈,例如,可能一次取一个盐,但由于它们仍然可以取,所以它们会被取。我想跨多个服务器分担安全责任。攻击者需要:1)进入web服务器以获取静态salt 2)进入用户数据库以获取散列3)进入散列数据库/服务器以获取随机salt i问题也不是我是否需要存储动态salt。那部分是显而易见的。这更像是一种散列/比较散列的方法。这有什么意义?如果您的服务器遭到黑客攻击,那么攻击者可以复制您的“从服务器Y获取哈希值”。你将一事无成,并且增加了攻击漏洞,使你拥有多台服务器而不是一台服务器。获取存储在哈希中的数据与拥有执行内容的能力不同。例如:攻击者可以知道我的本地存储哈希,知道sql DB的密码,但不能做任何你不理解的事情(由于策略FW等)。所以你有多台服务器。一个存储哈希(salt+pw),一个存储salt,一个存储用户名,等等。。。您仍然需要将所有这些内容提取到单个位置以执行登录(例如)。因为数据是可获取的,所以您什么也没做。攻击者仍然可以破坏您的系统以获取salts+哈希+用户名。他们可能需要跳过几个圈,例如,一次只能取一个盐,但由于它们仍然可以取,所以会被取出来。