我想和一些安全专家核实一下。
我有一个注册用户的网络应用程序。我用每个用户唯一的salt对pw进行Bcrypt,并将散列后的pw存储到DB中。
我现在需要通过移动应用程序对用户进行身份验证。我不能使用ssl,我更喜欢避免在手机和我的网络服务器之间通过清除来传递密码。因此,在服务器上调用登录方法(通过RESTful API)之前,我更喜欢在移动设备上对pw进行BCrypt,然后通过API将其哈希传递给服务器进行比较。
重点是,在手机上,我必须用相同的盐进行BCrypt(据我所知,我无法比较两个用不同盐散列的BCrypt pw)。
所以问题是:可以安全吗
- Mobile向服务器请求用户X的salt(我从DB中存储的pw中获得前22个字符加上偏移量)
- 在移动设备上,我用1点得到的盐对密码进行加密
- 最后,手机在服务器上调用登录名(用户名,hashedpw)
如前所述,所有通信都是通过纯http进行的,没有SSL。
这有道理吗?
在您的方案中,"hashedpw"变成一个简单的密码,然后您将其未加密地存储在数据库中。
登录到服务器所需要的就是知道(比如说,通过拦截)散列值和用户名。在您的实现中,哈希与安全性无关,它对最终用户来说更像是一种内存辅助,但不会提供任何安全优势。