0

我想与一些安全专家验证这一点。

我有一个注册用户的网络应用程序。我为每个用户使用唯一的盐对密码进行加密,并将散列后的密码存储到数据库中。

我现在需要从移动应用程序对用户进行身份验证。我不能使用 ssl,我更愿意避免在移动设备和我的网络服务器之间传递密码。因此,在服务器上调用登录方法(通过 RESTful API)之前,我更愿意在移动设备上 BCrypt 密码,然后通过 API 将其散列到服务器进行比较。

关键是在移动设备上我必须使用相同的盐进行 BCrypt(据我所知,我无法比较两个使用不同盐散列的 BCrypted pw)。

所以问题是:这样可以安全吗?

  1. 移动设备向服务器询问用户 X 的盐(我从数据库中存储的 pw 中得到前 22 个字符加上偏移量)
  2. 在移动设备上,我 BCrypt 在第 1 点得到的带有盐的密码
  3. 最后手机在服务器上调用 login(username, hashedpw)。

如前所述,所有通信都通过普通的 http,没有 SSL。

这有意义吗?

4

1 回答 1

2

在您的方案中,“hashedpw”成为一个简单的密码,然后您将其存储在未加密的数据库中。

登录到您的服务器所需要的只是知道(例如,通过拦截)散列值和用户名。在您的实现中,散列与安全性无关,它更多的是对最终用户的记忆帮助,但不提供任何安全优势。

于 2012-10-10T07:50:45.507 回答