我'我使用bcrypt php,并希望它需要很长时间为潜在的黑客登录


I'm using bcrypt for php and want it to take a long time for a potential hacker to login

我引用这个答案:https://stackoverflow.com/a/4766811/1114105

我们重新散列了密码,但是我们并没有对散列做任何事情(我们在CheckPassword函数中使用post提交的明文密码进行身份验证)。黑客就不能绕过重散列吗?

下面是我的伪代码

如果密码/用户名是通过POST提交的,并且$row['password']是sql中的散列pword。

$t_hasher = new PasswordHash(13, FALSE);
$hash = $t_hasher->HashPassword($_POST['password']);
$check = $t_hasher->CheckPassword($_POST['password'], $row['password']);
if($check) Great success else Wrong credentials`

注意:我发现工作因素对CheckPassword运行所需的时间没有影响。它只会增加HashPassword的时间。

针对密码的攻击有两种:

  1. 攻击者可以以某种方式读取存储在数据库中的密码散列(sql注入或任何其他方式访问您的系统)。攻击者现在想要获得原始密码(因为散列后的密码不能让他走远)。
  2. 攻击者使用不同密码重复使用您的登录表单(暴力破解)。

在第1种情况下,他已经绕过了您的登录表单,他不关心在您的系统上登录一次需要多少时间。但是他关心在他的系统上暴力破解密码需要多少时间。因此,通过尝试每种组合并使用与系统相同的算法进行散列,工作因素只会使暴力破解密码变得更加困难。"重新散列"密码以延长登录过程在这种情况下是没有用的。

然而,在情况2中,他确实关心在您的系统上尝试密码需要多少时间,因为他必须做很多事情才能获得正确的登录(加上如果他找不到的话,他可能必须猜测用户名)。攻击者一定很笨,因为他会留下痕迹,浪费时间。你可以在一定次数的登录失败后封锁他的IP,让他的生活更悲惨。此外,您可以在每次无效登录后添加sleep(睡眠不需要那么多资源作为CPU密集型哈希操作)。

增加成本:

php中的示例代码:

$hash = "Hello"

$hash = password_hash($password, PASSWORD_DEFAULT,array('cost'=>15));

echo $散列;

var_dump (password_verify(密码散列)美元);

因此,15的成本需要花费大量时间来散列和破解它

上面的例子显示了哈希过程以及验证哈希的方法,因为

"BCRYPT每次运行都会创建新的哈希值!!!!"

把这段代码放在。php文件中,然后运行它,检查你的代码是否运行

不要忘记& lt;php ?>

在我看来没有一个哈希算法是安全的,但是有一些算法可以降低黑客的攻击速度,我们唯一的希望是他们能得到它…