我正在寻找一种既定的安全机制来应用客户端密码散列以及服务器端密码散列。客户端是Web应用程序或移动应用程序。客户端和服务器之间的通信使用HTTPS。服务器应使用bcrypt或类似安全的密码散列算法。
现在,我不想将未加密的密码从客户端发送到服务器,以防止对用户的内部攻击。我想确保我们的管理员都无法获得原始密码,因为 - 众所周知 - 大多数人在多个网站上重复使用他们的密码或使用密码方案来获取易于密码的密码记住。
此外,我想在身份验证协议中实现额外的双因素安全层,利用存储在客户端上的秘密,以进一步增强整体安全性。
是否有任何已发布和验证的机制可用于此情况?
修改 在我的场景中,邪恶的管理员无法控制应用程序的代码。正在进行身份验证并提供敏感数据的服务器是REST服务器。应用程序代码由不同的服务器(用于Web应用程序)或通过AppStore(用于移动应用程序)提供。我还在考虑攻击者只能对连接HTTPS服务器和应用服务器的内部网段进行只读访问的情况。在大多数实际设置中,SSL终止是在专用服务器上完成的。
答案 0 :(得分:0)
与网站相比,使用应用的方案非常适合客户端哈希。该应用程序已经包含用于计算哈希值的代码,并且代码无法被截获/更改,因为JavaScript就是这种情况。更重要的是,您可以从CPU密集型计算中解除服务器的负担。
这些是注册的必要步骤:
以下是登录的步骤:
这比单独的服务器端散列要复杂一些,因为你必须分别存储参数(salt,...)。