【发布时间】:2015-10-21 22:59:55
【问题描述】:
除了服务器端密码散列之外,我正在寻找一种既定的安全机制来应用客户端密码散列。客户端是 Web 应用程序或移动应用程序。客户端和服务器之间的通信使用 HTTPS。服务器应使用 bcrypt 或类似的安全密码散列算法。
现在,我不想将未加密的密码从客户端发送到服务器,以防止对用户的内部攻击。我想确保我们的管理员都无法获得原始密码,因为 - 众所周知 - 大多数人在多个网站上重复使用他们的密码或使用密码方案来获取易于获取的密码记住。
此外,我想在身份验证协议中实施一个额外的两因素安全层,利用存储在客户端上的秘密,以进一步加强整体安全性。
是否有任何已发布和验证的机制可用于这种情况?
编辑 在我的场景中,邪恶的管理员无法控制应用程序的代码。进行身份验证并提供敏感数据的服务器是 REST 服务器。应用程序代码由不同的服务器(对于 Web 应用程序)或通过 AppStore(对于移动应用程序)交付。而且我也在考虑攻击者对连接HTTPS服务器和应用程序服务器的内部网段只有只读访问权限的场景。在大多数现实世界的设置中,SSL 终止是在专用服务器上完成的。
【问题讨论】:
-
Evil admin 控制在客户端上散列密码的代码。这行不通。
-
尝试执行此操作时要非常小心。如果您散列用户的输入,您最终可能会遇到一些涉及空字节的问题。有关更多详细信息,请参阅本文。 blog.ircmaxell.com/2015/03/…