我已经阅读了一些有关保护客户端/数据的SO示例。但我们有一个不同的问题,不知道在哪里看。
基本上我们有一款基于地理位置的游戏安卓游戏。我们在查询字符串中使用HMAC-SHA1来验证从客户端发送的数据实际上是来自客户端。有一个小问题。 HMAC-SHA1密钥。我可以混淆,直到我心中的内容,但关键仍然在应用程序中。有人可以轻松地对应用程序进行反编译,获取密钥,然后通过浏览器为其用户帐户发送手动查询(欺骗GPS)。
我看到一个例子,有人建议客户&服务器端ssl认证。不确定这是如何工作的,你不仅需要将ssl证书附加到应用程序吗?这也不需要进行反编译,它还需要最终用户重新编译/使用证书吗?
我们可以使用包管理器来获取自签名证书吗?我需要找到确保传输安全的正确方法,以便有人不能为自己的用户帐户伪造传输信息。
由于
答案 0 :(得分:1)
要对客户端进行身份验证,它需要某种形式的凭据。你可以:
1是不方便的,只要有人有物理访问设备,我就会受到攻击。对于3,您可以使用用户的Google帐户,这样您就可以(非常)确定他们是谁并在遇到任何问题/攻击时阻止他们。 4实际上是3的变体:用户将对某些第三方服务进行身份验证,它只会发出(临时)访问令牌。因此,如果帐户遭到入侵,则令牌最终将过期和/或被撤销(查看OAuth)。考虑实施和挑选的工作风险和数量。
至于使用客户端证书,您可以加密它们,因此您需要提供密码才能使用它们。在ICS之前,您需要自己实现,在ICS上,您可以通过KeyChain
API使用系统密钥库。解锁设备后,您将只能访问私钥(使用解锁密码/ PIN来保护密钥),并且用户明确授予权限。
如果你想坚持当前的做事方式,在本机代码(OpenSSL等)中实现HMAC部分,并在运行时通过组合它来生成密钥。这将使逆向工程变得相当困难。此外,您可能希望添加某种nonce,以便无法重播请求。