【发布时间】:2012-06-20 17:01:18
【问题描述】:
首先,我认为需要指出的是:我正在为通常互联网速度较慢的手机制作应用程序,因此需要在速度和安全性之间进行折衷。
我将使用相同的函数(当然,用于创建哈希的变量不同)来创建用户的自动登录 cookie 并存储他们的密码。
到目前为止,它看起来像这样:
function multiSHA($toSha, $mode=0, $count=100) { //$mode=1 to create cookies with uniqid, or =0 for hashing with externally specified salt (added to $toSha) and static pepper
$toSha=hash('sha512',$toSha); //so that I know the length of the string below
if ($mode==0) {
for ($i=0; $i<$count; ++$i) {
$p1=hash('sha512',substr($toSha,0,64)); // since I know the length
$p2=hash('sha512',substr($toSha,64,128));
$pepper=hash('sha512','This is my static pepper.');
$toSha=hash('sha512',$p1.$pepper.$p2);
}
}
else {
for ($i=0; $i<$count; ++$i) {
$p1=hash('sha512',substr($toSha,0,64));
$p2=hash('sha512',substr($toSha,64,128));
$uniqid=hash('sha512',uniqid('This is my static pepper.',true));
$toSha=hash('sha512',$p1.$uniqid.$p2);
}
}
return $toSha;
}
现在,这是否足以存储密码和 cookie 数据?例如,我不能使用 PBKDF2,因为它占用了 too 太多资源,但这个相当轻量级。攻击者不知道for 循环重复了多少次,我还将cookie 存储在单独的表中以进行一些额外的安全检查(例如用户代理)。
另外,我应该准备多少次循环才能保证足够安全不会让我的网站成为 DDOS 攻击的容易目标?
【问题讨论】:
-
这些攻击通常称为暴力攻击,而 DDoS-es 则不同。
-
我不是在谈论只是获得对用户帐户的访问权限;我说的是给网站造成长期高负载(
PBKDF2保证会这样做)并使其不可用。 -
如果您不存储使用过的盐,您希望如何使用存储的盐化哈希验证输入的密码?
-
@Limoncello 抱歉,我以为您只是对安全性感到好奇。据我所知,散列 100 次并没有什么不同。即使是 3-4 次 md5 的哈希值也需要数年才能解密。
标签: php security encryption hash passwords