Android 在启动时安全地提供重要的游戏内容

Android 在启动时安全地提供重要的游戏内容,android,security,in-app-purchase,Android,Security,In App Purchase,好的,交易如下: 用户可以通过应用内计费在应用内购买“黄金”。为了确保没有人欺骗系统,我不想在手机上储存一个人的黄金数量。我已经需要在启动时联系服务器,以便我可以发送用户当时拥有的黄金数量。然而,我想不出一种方法来确保这种“安全”(即,如何防止用户伪造服务器响应并给自己黄金) 有什么想法吗?我认为您可以使用私钥/公钥对生成的签名(可能基于黄金数量、用户和时间戳)对响应进行“签名”。这样,您就可以在客户机中验证响应是否确实来自服务器。或者类似的东西。如果有人伪造服务器的响应,为什么会出现问题?他们

好的,交易如下:

用户可以通过应用内计费在应用内购买“黄金”。为了确保没有人欺骗系统,我不想在手机上储存一个人的黄金数量。我已经需要在启动时联系服务器,以便我可以发送用户当时拥有的黄金数量。然而,我想不出一种方法来确保这种“安全”(即,如何防止用户伪造服务器响应并给自己黄金)


有什么想法吗?

我认为您可以使用私钥/公钥对生成的签名(可能基于黄金数量、用户和时间戳)对响应进行“签名”。这样,您就可以在客户机中验证响应是否确实来自服务器。或者类似的东西。

如果有人伪造服务器的响应,为什么会出现问题?他们只是在愚弄自己有多少黄金;真正的服务器仍然知道真实的数字


除非您的服务器稍后询问客户机它有多少黄金,并相信它得到的答案,否则这应该不是问题。服务器应始终具有权威值。

您最好的解决方案是在游戏和服务器之间部署相互验证的SSL。您可以在此处使用自签名证书,因此无需从CA购买任何证书。这将确保您的游戏仅从合法服务器接收余额信息(将游戏的SSL系统配置为仅接受服务器正在使用的自签名证书),并且服务器仅接受来自游戏的查询(将服务器配置为仅访问部署在应用程序中的自签名证书作为客户端身份验证的资源)。关于如何在中为Android执行此操作,有一个完整的分步说明,由O'Reilly出版。

这本书的作者非常棒;)