在浏览器中计算密码哈希?

信息安全 密码 哈希
2021-08-27 19:07:17

我终于进入Keybase并惊讶地在注册页面中看到这个:

不应该在服务器端进行密码拉伸和散列,因为我们通常不信任客户端吗?

3个回答

Keybase 的全部意义在于用户不必也不应该相信服务器有任何东西。所有证明都可以在没有服务器的情况下进行验证。由于 Keybase 密码用于解密用于签署证明的私钥,因此不允许服务器接触它。

此外,必须信任客户端提供注册密码,因此即使在没有 Keybase 特殊的网站上,允许 JavaScript 进行自己的密码散列也是非常好的。(但是,允许用户使用同一个用户登录将是一个非常糟糕的主意,因为有人可以只传递哈希值。)但他们没有这样做,因为无论如何这些网站都需要使用用户的密码来信任(见括号),并且 JavaScript 散列既慢又不总是可用的。

不应该在服务器端进行密码拉伸和散列,因为我们通常不信任客户端吗?

你把事情搞混了。信任客户端和在客户端散列用户密码是有区别的。

你是对的,我们从不信任客户。但是在这里,我们是客户,需要散列一些东西。作为客户端,我们为什么要使用我们的密码信任服务器?

所以发生的事情是你在本地散列它,这样服务器就永远不会知道你输入了什么,然后发送它。然后服务器应该确保它是一个有效的散列,而不是盲目地接受它收到的任何东西,因为事实上,你永远不应该信任客户端。

不知道如何正确解释,希望对您有所帮助!

不应该在服务器端进行密码拉伸和散列,因为我们通常不信任客户端吗?

这是真的,但不适用于这种情况。首先,在这种情况下,客户弄乱了散列只会伤害他们

传统上,客户端哈希会发生以下不良情况:

  1. 有人输入他们的密码 ( horsebatterystaple01)
  2. 它被散列并且输出是123456(假装这是一个有效的散列输出)
  3. 服务器查看 的哈希是否123456与数据库匹配。然后它要么授予或拒绝访问。
  4. 黑客在服务器上找到密码数据库
  5. 他们发送123456到服务器并登录,跳过哈希。

现在,这就是黑客很容易破解客户端哈希的原因。哈希的目的是防止密码被恢复,即使密码数据库被破坏。如果他们没有被正确地散列和加盐,那么黑客不仅可以使用该密码登录被入侵的网站,他们还可以尝试其他银行/电子邮件网站来查看密码是否被接受。

尽管客户端散列可以防止第二种情况,但攻击者仍然很容易只发送服务器123456并且服务器会授予访问权限。