我不了解存储/处理密码的一些概念。
例如,我们的网站有一个提供身份验证的移动应用程序(iOS,Android等)的公共API。
毫无疑问,我们不能将原始密码存储在数据库中,我们不能在客户端和服务器之间发送原始密码,因此我们使用哈希和盐。
这样,我们加密客户端上的密码并将哈希发送到服务器。但是,如果一个“黑帽子”窃取密码哈希并用它验证服务器api怎么办?
我应该在客户端上散列密码,发送散列,然后在服务器上再次散列它们吗?
这个问题的常见解决方案是什么?
非常感谢提前。
答案 0 :(得分:1)
您可以使用SSL来保护客户端和服务器之间的通信通道,并发送未加密的密码。
第二种方法 - 在服务器中存储散列密码(不含盐),并在进行身份验证时 - 从服务器获取随机令牌(将在几分钟后过期),从客户端密码计算散列并使用计算的散列对接收的令牌进行编码。然后将编码令牌发送到服务器。服务器执行相同的操作但使用存储在数据库中的哈希而不是从密码计算它这种方法有缺点 - 需要存储密码原始或散列无盐。或者使用令牌向客户端发送盐。
但是,如果“黑帽子”窃取密码哈希并通过它对服务器api进行身份验证怎么办?
使用将在使用后过期的令牌可以解决此问题。
答案 1 :(得分:1)