我正在寻找在运行Flash和服务器的客户端之间传递数据的安全方法。有问题的数据将由Flash应用生成,在这种情况下,这是您完成游戏后的得分。我想验证服务器上的数据是否未被禁用。完成这项工作有哪些好方法?
一种简单的方法是对数据执行某些操作(如散列),并将散列与数据一起传递回服务器。但是,有权访问客户端源代码的人很容易打破这种情况。
编辑:我意识到没有什么是不可动摇的,但我想尽可能地让它变得困难。 @ jcnnghm使用公钥加密数据的解决方案,以及可选地使用游戏日志进行健全性检查和/或重新计算是我认为的最佳选择。 SSL加密也是一个好主意,因为这使得解密实际发送回服务器的内容变得更加困难。
答案 0 :(得分:3)
使用存储在二进制文件中的公钥加密数据。这将提高攻击的进入门槛。除此之外,完整性检查数据到达服务器时。这可以简单到计算每个时间单位可以实际获得的最大点数,或者将游戏日志发送回服务器以确保得分正确。
无论你做什么,没有什么是完全可以证明的,但除了最坚定的人之外,这将会停止。
更新: @mark:Flash原生支持SSL。
答案 1 :(得分:2)
在不可靠的平台上运行的代码能否保持其完整性?不,几十年的破坏版权保护计划让我认为这是不可能的。在受信任的沙箱中运行的反向恶意代码是可行的,但您对问题的最佳做法是让人们不方便作弊。
答案 2 :(得分:1)
在http://code.google.com/p/as3crypto/查看AS3Crypto软件包。我没有尝试过,但是这个软件包声称(部分)支持TLS 1.0协议。
TLS将在Flash应用程序和服务器之间提供安全隧道。 http://en.wikipedia.org/wiki/Secure_Sockets_Layer
@jcnnghm 您通常不希望使用公钥加密(RSA,DSA)进行批量数据加密,因为它的计算时间很长。公钥加密应该用在安全协议的握手和密钥协商阶段,但是批量数据加密应该由对称密码处理,例如AES和TDES。 TLS和SSL协议以这种方式工作。
答案 3 :(得分:0)
只要人们可以获得可执行文件 - 除非你想在锁定的自助服务终端上运行游戏,总是如此 - 没有完全安全的方法来做到这一点。
音乐和电影行业花费数千万美元用于DRM,这些数据在几天/几周内被家庭爱好者破解。如果他们无法保护他们的东西......
答案 4 :(得分:0)
我同意所给出的答案是黑客证明。因为一旦你可以阅读它,你可以操纵/复制它,然后反编译它。
我一直在计划的另一种方法是生成唯一的密钥pr。玩家会话(包括某些时间/日期作为盐值)。
然后通过应用程序,可能会定期提交/传输状态分数并获得新的有效密钥。如果这种同步失败,则打破整个会话。
这方面的缺点可能是太多的同时玩家将服务器的回复速度降低,从而制造了“假超时”+让游戏服务器开启以进行DoS攻击。
但是当用户进行会话时更新“会话密钥”的东西会更加需要额外的会话管理,但是如果它会让骗子工作有点硬,我一定会尝试:o)
另一方面,NOTHING是黑客证明,所以不要相信它100% - 无论你想出多么聪明的解决方案。
最后一个注意事项也是将您的应用程序划分为模块/级别等,这样您就无法访问每一段代码,只需启动它即可。
目前我的计划是建立一个大型的多层次世界,而客户/玩家只能将文件附加到玩家所在的部分。
希望这对你的想法有用。