1

我已经阅读了一些关于 SO 以保护客户端/数据的示例。但是我们有一点不同的问题,不知道在哪里看。

基本上我们有一个安卓游戏,它是一个基于地理位置的游戏。我们对查询字符串使用 HMAC-SHA1 来验证从客户端发送的数据是否确实来自客户端。有一个小问题。HMAC-SHA1 密钥。我可以混淆直到我心满意足,但关键仍然在应用程序中。有人可以轻松地反编译应用程序,获取密钥,然后通过浏览器为他们的用户帐户发送手动查询(欺骗 GPS)。

我看到一个例子,有人建议客户端和服务器端 ssl 身份验证。不确定这将如何工作,您是否只需要将 ssl 证书附加到应用程序?这是否也不需要反编译,是否需要最终用户重新编译/使用证书?

我们可以了解一下如何使用包管理器来获取自签名证书吗?我需要找到正确的方法来保护我们的传输,这样别人就不能为自己的用户帐户伪造他们的传输..

谢谢

4

1 回答 1

1

要对客户端进行身份验证,它需要某种形式的凭据。您可以:

  1. 不要保存凭据并让用户每次都输入它们
  2. 将它们保存在某个地方
  3. 使用系统凭据
  4. 使用某种形式的身份提供者

1 不方便,2 只要有人可以物理访问设备,我就会受到攻击。对于 3,您可以使用用户的 Google 帐户,这样您就可以(非常)确定他们是谁,并在有任何问题/攻击时阻止他们。4 实际上是 3 的变体:用户将对某些第三方服务进行身份验证,并且它只会发出(临时)访问令牌。因此,如果帐户被盗用,令牌最终将过期和/或被撤销(查看 OAuth)。考虑实施的风险和工作量,然后选择。

至于使用客户端证书,您可以将它们加密存储,因此您需要提供密码才能使用它们。在 ICS 之前,您需要自己实现这一点,在 ICS 上,您可以通过KeyChainAPI 使用系统密钥存储。只有在解锁设备(使用解锁密码/PIN 保护密钥)并且用户明确授予权限后,您才能访问私钥。

如果您想坚持当前的做事方式,请在本机代码(OpenSSL 等)中实现 HMAC 部分,并在运行时通过组合它的位来生成密钥。这将使逆向工程变得相当困难。此外,您可能想要添加某种随机数,以便无法重播请求。

于 2012-04-23T02:23:53.407 回答