4

我正在编写一个 iPad 游戏,它将高分类型数据(即超出 Game Center 支持的数据)发送到 Google appengine 数据存储区。GET它通过 http或请求发送这些更新POST,例如http://myapp.appspot.com/game/hiscore/925818

以下是我认为确保 appengine 数据存储区不会被虚假数据发送的垃圾邮件的方法。

p@ssw0rd使用保存在 iOS 二进制文件中的硬编码压缩/加密有效负载数据。将该二进制数据编码为 base64。在 url 查询字符串或 POST 数据中传递 base64 有效负载。在处理程序中,unbase64,然后使用p@ssw0rd. 按照有效负载中的说明更新高分类型数据。

CON:如果p@ssw0rd它以某种方式从 iOS 二进制文件中派生而来,则该方案可以被击败。

这是否足够/足够?还有另一种方法可以做到这一点吗?

4

2 回答 2

3

绝对没有办法确保发送数据的是您的客户端。您可以尝试的只是混淆某些内容,以使垃圾邮件发送者更难提交数据。

但是,我认为您可以做两件事:

  1. 将某种密钥保存在二进制文件中
  2. 有一个自定义算法计算一些校验和

也许您可以将两者结合使用。让我给你举个例子:

创建一些自定义(复杂!)算法,如(简化):

var result = ((score XOR score / 5) XOR score * 8) BITSHIFT_BY 3

然后使用带有该结果的静态存储密钥和众所周知的哈希函数,例如:

var hash = SHA256(StaticKey + result)

然后将该哈希与分数一起发送到服务器。服务器必须通过执行完全相同的步骤(评估算法+执行 SHA256 的东西)来“验证”哈希并比较哈希。如果他们匹配的分数希望来自您的应用程序,否则将其丢弃,它来自垃圾邮件发送者。

然而,这只是你能做的一件事。查看mfanto 的链接,您可以查看许多其他想法。一定不要告诉任何人你是怎么做的,因为这是通过默默无闻的安全

于 2013-01-20T20:50:19.967 回答
0

好的,有两种方法可以做到这一点。

1)以 $FREE.99 购买 SSL 证书并仅打开到您的服务器的 HTTPS 连接以提交他的核心类型数据。由于握手往返时间,连接速度应该在500 毫秒左右。

2)在您的 iOS 应用程序中嵌入 RSA 公钥证书,并在您的服务器上拥有 RSA 私钥

然后,您可以使用第二种方案做两件事中的一件:

  • 如果您的数据消息非常小(≤256 B),您可以加密并发送 256B 包(RSA 有效负载受密钥中的位数限制)

  • ELSE 如果数据太大(>256B),生成随机对称密钥(AES),然后打包:

    • 使用 RSA 公钥加密的对称 AES 密钥
    • 使用对称 AES 密钥编码的二进制数据

然后服务器获取前 256 个字节并对其进行解码,然后服务器使用该 AES 密钥来解密消息的其余部分。


以上 2 只是防止窃听,它意味着你的消息的数据格式是隐藏的。在某种程度上,它仍然是一种隐蔽的安全性,因为如果黑客拥有您的公钥和您的消息格式,他们就可以制造消息。

于 2013-04-21T15:04:03.790 回答