1

我正在为 iPhone 开发一款游戏,并希望它能够将分数提交回服务器。很简单,但我希望验证分数实际上来自游戏。在出口条件下(事实上)禁止真正的加密货币,在安全/经过验证的渠道中获取信息的最佳方式是什么?

我所有的想法都回到了 RSA 风格的数字签名算法,但更喜欢不那么“加密”的东西来解决这个导出问题。

谢谢!

4

5 回答 5

1

难道您不能只使用客户端证书(由您签名)并与您的服务器建立 HTTPS 连接,该服务器已配置为仅接受以您签名的客户端证书开始的连接?

于 2008-09-17T00:23:55.557 回答
1

长话短说,您可以在几乎没有限制的情况下导出数字签名代码要了解更多信息,请从 BIS 出口常见问题解答开始

您可能想查看EAR 742.15(b)3,其中涵盖了数字签名豁免。

当然,我不是律师,而且规则可能在去年发生了变化。

于 2008-09-17T00:42:32.313 回答
1

使用真正的加密货币实际上不会在这里给你买任何东西。您基本上与典型的 DRM 问题相反。在这种情况下,你想阻止人们解密内容,但他们必须解密才能观看,所以无论如何你都必须给他们密钥。

在您的情况下,您希望防止人们签署假分数,但他们必须能够签署真实分数,因此无论如何您都必须给他们密钥。

你需要做的就是确保你的计划需要更多的努力来破解而不是潜在的回报。由于我们谈论的是游戏排行榜,因此风险并不高。让使用 tcpdump 的人不会很快发现它,你应该没问题。如果您的服务器足够智能,可以检测到“实验”(来自一个来源的大量失败提交),那么您将比依赖任何加密算法更安全。

于 2010-10-21T16:20:42.110 回答
0

一个可能足够好的想法:

  • 令 Secret1、Secret2、Secret3 为任意随机字符串。
  • 设 DeviceID 为 iPhone 的唯一设备 ID。
  • 让 Hash(Foo + Bar) 表示我将 Foo 和 Bar 连接起来,然后计算一个哈希值。

然后:

  1. 应用程序第一次与服务器对话时,它会请求一个 DevicePassword。iPhone 发送:DeviceID, Hash(DeviceID + Secret1)

  2. 服务器使用 Secret1 来验证请求是否来自应用程序。如果是,它会生成一个 DevicePassword 并将 DeviceID 和 DevicePassword 之间的关联保存在服务器上。

  3. 服务器回复:DevicePassword, Hash(DevicePassword + Secret2)

  4. 该应用程序使用 Secret2 来验证密码是否来自服务器。如果是这样,它会保存它。

  5. 要提交分数,iPhone 会发送:DeviceID、Score、Hash(Score + DevicePassword + Secret3)

  6. 服务器使用 Secret3 和 DevicePassword 进行验证。

DevicePassword 的优点是每个设备实际上都有一个唯一的秘密,如果我不知道它会更难通过数据包嗅探提交的分数来确定秘密。

此外,在正常情况下,应用程序每次安装只应请求一次 DevicePassword,因此您可以轻松识别对 DevicePassword 的可疑请求,或者将其限制为每天一次。

免责声明:这个解决方案不在我的脑海中,所以我不能保证这个方案没有重大缺陷。

于 2008-09-18T08:03:54.490 回答
0

生成一个随机的,相当长的东西,然后将分数添加到最后,可能是名称或其他静态的东西,然后 sha1/md5 它,并将两者都传递给服务器,验证随机散列是否等于散列.

事后思考:如果你想让逆向更难,那么将你的随机数乘以当天的数字表示(星期一=1,星期二=2,...)

于 2008-09-17T00:36:20.393 回答