客户端密码安全技术的优点

Merit of Client-Side Password Security Techniques

我了解 SSL/TLS 以及在服务器端散列和加盐密码的好处,并计划采用此标准来确保密码安全,可能与 bcrypt 一起使用。

不过,我想知道的是,结合上述最佳实践,使用客户端 JavaScript 加密或混淆通往服务器的密码是否还有其他好处。我用来证明考虑这一点的理由是管理错误(未能启用 mod-rewrite 或错误的 vhost 配置)将来可能允许非 HTTPS 连接到我的服务器。这将是一个额外的安全层,以保护 public WiFi 上的用户,如果他们以某种方式设法在没有 SSL/TLS 的情况下连接。

同样,只是想知道这种方法是否有优点,如果没有,为什么?

编辑:此外,我认为至少伪装了一个登录表单甚至被接收(编码表单服务器端由客户端javascript解码,然后通过[=20=显示]) 可能很有价值,尤其是当有人只是在 public WiFi 中窥探明文交易时。

虽然像这样的方法可能有助于避开最随意的攻击者,但几乎完全不值得付出努力,而且实际上可能对整体安全性造成一定程度的损害。

如果您的服务器接受这个 obfuscated/hashed/enciphered 密码作为用户密码,那么窃取它给攻击者带来的优势几乎与窃取用户明文密码一样多;他们将能够作为用户进行身份验证。他们甚至可能能够从混淆后的字符串中检索用户的明文密码,因为他们能够准确地看到对用户密码执行了哪些操作来混淆它。

此外,混淆登录表单几乎完全没有用;任何有一丝兴趣的攻击者都能够在网络流量中找到登录序列,并且能够轻而易举地窃取用户的信息。它可能会像一堵羊墙嗅探器一样愚弄某些东西,但只要有人在某个地方编写检测您的登录序列的规则所需的时间就可以了。如果您有足够大的用户群,或者您的应用处理足够敏感的信息,那将是非常短的时间。

简而言之,不要浪费时间尝试解决已经解决的问题;花时间确保您已正确配置独占 HTTPS。

因此,经过大量阅读后,我整理了以下解释为什么该技术没有优点:

复杂性是安全的敌人。如果系统的未来维护者不完全理解混淆方法,他们可能会开始依赖它,认为它提供了实际的安全性,而不是在实际的行业标准安全技术之外使用它。

除此之外,我的想法是有缺陷的,因为我认为在 TLS 失败之前,没有人会试图绕过这种混淆。这不太可能是真的,因为在 TLS 失败之前解决混淆将具有令人难以置信的优势万一 独占 TLS 在未来失败。

该技术会带来额外的成本,几乎没有保护,最坏的情况是,会产生额外安全性的有害幻觉,可能会鼓励系统维护人员减少对确保正确 TLS 的关注。