需求
小弟想研究自己写一个 FlyBrid 的游戏,将游戏得到的分数对用户进行奖励。需要保证用户无法篡改数据实现“自定义”分数去获取奖励。
个人调研
目前上网搜索了很多资料,貌似通信方式可以选择 WebSocket 、Socket 、HTTP 。 基于以上通信方式搜索到资料,实现需求的大致提供的思路就是:
- 传输层:服务端和客户端通信采用 非对称加密 + 动态消息认证码( HMAC )+ 时间戳验证
- 客户端:前端代码混淆
- 实现方式:尽量使用服务端下发命令,而不是采用客户端最终提交结果方式去处理
个人结论
个人理解这种方式还是不太安全,只是提高了攻击方的门槛。 例如:
- 非对称加密:
最终公钥前端都能拿到,然后用户可以提取该公钥,对篡改的数据进行加密。
- 动态消息认证码( HMAC )
个人理解使用该方式的话,服务端和客户端每一次通信都生成一次 HMAC ,为下次通信使用,并且保证该 HMAC 有效时间足够短。
在 FlyBird 游戏实际应用可能就是,服务端生成管道时候,会生成下一次通信需要的 HMAC ,并且设置有消息为生成管道的时间间隔
基于以上逻辑,我理解还是可以写程序模拟进行操作,欺骗服务端达到修改分数的目的。(就是我自己这关都过不去)
- 时间戳验证
跟上面动态消息认证码的攻破方式是类似的。
求助
小弟没有做过游戏后端开发思维是有些局限的,不知道大家有没有成本较低实现数据防篡改的办法
