安全密码方法

时间:2015-07-04 09:36:41

标签: security authentication

我要创建一个带有用户表的休息服务器以进行登录。移动设备将连接到此服务器以供用户登录。 我想创建一个安全的系统,我想到了这个解决方案:

USERS TABLE:

  • PasswordHash - CHAR(64)用于存储SHA256(密码)
  • PasswordToken - CHAR(25)用于存储随机可能唯一的令牌

用户注册:

  • 设备将生成用户提供的密码的SHA256;

  • 哈希将通过SSL发送到服务器;

  • 服务器会将此哈希值存储在 PasswordHash 字段中,并在 PasswordToken 字段中存储随机令牌;

USER LOGIN:

  • 设备将生成用户[ passwordDevice ]提供的密码的SHA256;
  • 服务器将生成SHA512( PasswordHash + PasswordToken )[ hashServer ];
  • 服务器将生成一个SHA512( passwordDevice + PasswordToken )[ hashDevice ];
  • 服务器将生成一个BCrypt字符串( hashServer + serverSideKey )[ bCryptServer ];
  • 服务器将生成一个BCrypt字符串( hashDevice + serverSideKey )[ bCryptDevice ];

    if (bCryptServer == bCryptDevice) 
       LOGIN OK;
    else
       LOGIN REFUSED;
    

那么,这种方法是正确的吗?

安全吗?

我可以避免一些操作吗?

我可以优化一些东西吗?

提前致谢。

1 个答案:

答案 0 :(得分:1)

不,不要这样做。

永远不要传递哈希值。必须在服务器上计算哈希值。否则它只是一个密码。

仅使用加密哈希值。 SHA256不是一个。使用bcrypt,scrypt或pbkdf2。

它需要尽可能简单,这样你就不会犯错误,而且会让它变得复杂。