【问题标题】:How should an application authenticate with a datastore?应用程序应如何使用数据存储进行身份验证?
【发布时间】:2012-12-07 06:35:06
【问题描述】:

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

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

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

CON:如果 p@ssw0rd 是从 iOS 二进制文件中派生出来的,那么这个方案可以被打败。

这是否足够/足够?有没有其他方法可以做到这一点?

【问题讨论】:

标签: objective-c security encryption http-request


【解决方案1】:

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

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

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

也许您可以将两者结合使用。举个例子吧:

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

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

【讨论】:

  • 第二个。您使用的导致密钥的不同路径越多,它持续的时间就越长。使用在二进制文件中看起来没有意义的随机字符串。拆分字符串并在不同的地方定义不同的部分。不要将它们全部组合在一起。 Salt'em。哈希姆。要有创意:)
  • @bobobobo 是什么让您认为银行可以做到这一点?例如,如何阻止垃圾邮件发送者在越狱设备上的调试器中运行您的代码并在客户端编码和传输之前修改 score 变量?
  • 是的他们可以做到这一点,但安全点是让客户更难作弊。您可以嵌入最终游戏状态或重播数据,并为可疑分数设置某种类型的验证机制。
【解决方案2】:

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

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

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

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

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

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

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


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

【讨论】:

    猜你喜欢
    • 2011-06-27
    • 1970-01-01
    • 2019-09-14
    • 2017-03-03
    • 2018-06-27
    • 2021-07-30
    • 1970-01-01
    • 1970-01-01
    • 2020-11-16
    相关资源
    最近更新 更多