如何使此盐和哈希计划更安全?

时间:2019-04-12 09:31:17

标签: security hash salt

嗨,我只是在计划移动应用程序的服务器登录安全性,并记下了一个简单的计划。它看起来安全吗,并且可以通过任何方式加以改进?预先感谢。

首次客户端登录

  1. 从客户端获取设备ID并发送到服务器。
  2. 使用新的用户ID在服务器和用户帐户上创建MD5盐。
  3. 将盐与设备ID和用户ID连接起来以创建盐腌密码。
  4. 创建盐腌密码的MD5哈希并将哈希密码存储在数据库中。
  5. 将用户ID和Salt返回给客户端。

客户再次登录或提出一般要求

  1. 使用客户端从服务器接收到的盐并将其与设备ID和用户ID串联在一起,使用客户端生成的MD5哈希将请求发送到服务器。还要以纯文本形式发送设备ID和用户ID。
  2. 验证存储在数据库中的用户设备ID和用户ID与客户端发送的相同。
  3. 验证用户发送的MD5哈希与该用户设备的数据库中存储的哈希相同。
  4. 验证并继续处理请求。

1 个答案:

答案 0 :(得分:0)

如果出于安全考虑,出于以下原因,我不建议使用设备ID作为密码:

  1. 这不是秘密信息,可以在许多网络呼叫中以纯文本形式发送到许多服务器,这意味着第三方可以轻松获取它。
  2. 如果恶意第三方获得它,则无法轻易更改。
  3. 如果电话换手,则ID将保持不变,以允许新的电话所有者以以前的用户身份登录。

很明显,另一种方法是让用户选择自己的密码,但是我猜您已经考虑了这一点,并且您选择使用设备ID,因为它会使用户体验尽可能地流畅。

因此,我建议用户安装应用程序时生成一个uuid并将其存储在设备安全存储(密钥存储/密钥链)中。在第一个请求上,将其与用户ID一起发送到服务器。应该生成一个临时会话ID,并将其返回给客户端,然后该客户端可用于验证连续的请求。

此外,MD5不应用于密码哈希,因为它不能抵抗暴力攻击。更好的算法选择是bcrypt或pbkdf2。