用户名、密码、加盐、加密、哈希 - 这一切是如何工作的?

17 浏览
0 Comments

用户名、密码、加盐、加密、哈希 - 这一切是如何工作的?

这个问题已经有了答案:

可能是重复问题:

PHP密码的安全哈希和盐

我已经阅读了很多在stackoverflow和其他网站上关于Web安全的帖子。比如加盐加密等。但是我还是不太明白,所以简单的解释会非常有帮助。

那么就让我们了解一下目前我所知道的情况。一个用户登录并输入其用户名和密码。这些输入信息然后经历一系列的处理。比如说将用户名和密码组合在一起:

$username = (USERS USERNAME INPUT);
$password = (USERS PASSWORD INPUT);
$userinput = $username . $password;

然后我们加一些盐。

$salt1 = "13$13aVc!kd";
$salt2 = "4kr$!vlmeoc";
$salted = $salt1 . $userinput . $salt2;

接下来我们对它进行加密。

$encrypted = encrypt($salted);

然后与数据库进行核对,如果正确,用户就可以登录了。

是这样工作的吗?但是我也阅读到了有关暴力破解攻击的问题。它会猜测输入值对吗?以上的流程不是意味着攻击者只需要正确地获取$userinput信息就能够登录吗?他不需要猜测长长的$encrypted字符串对吧?

注:假设在这种情况下,没有验证码、没有尝试次数限制、没有锁定等等。

注:请对我温和些,我还在学习中。

admin 更改状态以发布 2023年5月22日
0
0 Comments

哈希和盐的想法更多是为了防止在数据库本身受到威胁时有人窃取用户密码。如果密码以盐和哈希字符串的形式存储,则攻击者无法仅使用它们访问用户在另一个站点的帐户。

0
0 Comments

如果您排除了验证码、限制、锁定等措施,那么是的。您只需要暴力破解纯文本字符串。

然而,这需要时间-至少受服务器响应登录请求的速率限制。即使开发人员没有添加任何措施来防止暴力破解,服务器本身也只能通过加密+验证过程来快速进行,而且只能处理有限数量的并发请求。

话虽如此,这就是为什么

  • 作为用户,使用强大、难以暴力破解的密码
  • 作为开发人员,采取充分的措施来防止您的登录过程被暴力破解

对密码进行哈希和盐加密,不是为了防止人们对自然登录过程进行暴力破解(还有其他防范措施)。相反,它们是为了保护密码存储本身的潜在威胁(例如,有人倾倒数据库内容)。

哈希和盐加密都有助于降低存储密码的人员检索纯文本字符串的速度,他们需要通过自然登录过程(在您的站点或其他站点上,因为密码通常在站点之间共享)才能进行,而不会触发反暴力破解安全措施。

0