我正在写一个多人游戏。我有一个处理一切的中央服务器。对于数据交换,我使用 HTTPS 协议。因为这是一款游戏,所以我不能使用 RSA 等计算成本高昂的系统进行数据传输。
登录,
- 客户端使用 sha512 从 password 和 random 生成十六进制哈希
seed
。 - 客户端向服务器发送带有用户名、哈希值的“登录”请求
seed
。 - 服务器检查用户是否没有尝试过多的登录请求,并检查密码哈希是否与数据库中密码的哈希匹配。如果是,它会发送一个
access_key
登录成功的响应
要发送需要登录的请求,
- 客户端发送从
access_key
和生成的哈希seed
以及请求数据。 - 服务器检查 IP 是否没有改变以及由
access_key
和 生成的哈希是否seed
正确。如果是,access_key
则从旧的生成新的,处理请求数据,服务器将新的access_key
与请求的响应一起返回。
在任何时候,如果客户端的 IP 更改或access_key
发送无效,会话将自动终止。
这种方法有多安全?我能做些什么来改善它?