比较移动应用程序中的B加密密码



我想和一些安全专家核实一下。

我有一个注册用户的网络应用程序。我用每个用户唯一的salt对pw进行Bcrypt,并将散列后的pw存储到DB中。

我现在需要通过移动应用程序对用户进行身份验证。我不能使用ssl,我更喜欢避免在手机和我的网络服务器之间通过清除来传递密码。因此,在服务器上调用登录方法(通过RESTful API)之前,我更喜欢在移动设备上对pw进行BCrypt,然后通过API将其哈希传递给服务器进行比较。

重点是,在手机上,我必须用相同的盐进行BCrypt(据我所知,我无法比较两个用不同盐散列的BCrypt pw)。

所以问题是:可以安全吗

  1. Mobile向服务器请求用户X的salt(我从DB中存储的pw中获得前22个字符加上偏移量)
  2. 在移动设备上,我用1点得到的盐对密码进行加密
  3. 最后,手机在服务器上调用登录名(用户名,hashedpw)

如前所述,所有通信都是通过纯http进行的,没有SSL。

这有道理吗?

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

登录到服务器所需要的就是知道(比如说,通过拦截)散列值和用户名。在您的实现中,哈希与安全性无关,它对最终用户来说更像是一种内存辅助,但不会提供任何安全优势。