应用程序应如何通过数据存储进行身份验证?

时间:2012-12-19 20:06:48

标签: objective-c security encryption http-request

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

以下是我如何确保appengine数据存储区不会被错误数据发送垃圾邮件。

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

CON:如果p@ssw0rd以某种方式从iOS二进制文件派生,则此方案可能会失败。

这是否足够/充足?还有另一种方法吗?

2 个答案:

答案 0 :(得分:3)

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

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

  1. 在二进制文件中保存了某种秘密密钥
  2. 有自定义算法计算某些校验和
  3. 也许你可以选择两者兼而有之。让我举个例子:

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

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

    然后使用带有该结果的静态存储密钥和一个众所周知的散列函数,如:

    var hash = SHA256(StaticKey + result)
    

    然后将带有分数的哈希发送到服务器。服务器必须通过执行完全相同的步骤(评估算法+执行SHA256的操作)来“验证”哈希值并比较哈希值。如果他们匹配的分数希望来自你的应用程序,否则扔掉它,它来自垃圾邮件发送者。

    然而,这只是你可以做的一件事。看看the link from mfanto,您还可以看到许多其他想法。 请务必不要告诉任何人你是怎么做的,因为这是security through obscurity

答案 1 :(得分:0)

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

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

2)Embed an RSA public key certificate in your iOS apphave the RSA private key on your server

然后,您可以使用第二种方案执行以下两项操作之一:

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

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

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

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


以上2只能防止窃听,表示隐藏了邮件的数据格式。在某种程度上,它仍然是一种默默无闻的安全类型,因为如果黑客拥有您的公钥和您的消息格式,他们就可以制作消息。