加密和反编译

我即将把我的Android应用程序推向市场。 我最近加密了所有的服务器/客户端通信。 我想知道的是,如果我的数据是使用专用密钥加密的,并且如果一个人反编译我的代码并提取密钥,那么首先是否值得加密数据? 当数据未加密时,我的通信运行得更快。 随着游戏成为动作游戏,滞后将是一个巨大的“有趣的杀手”,根据经验,我知道这是令人沮丧的。 我知道加密使应用程序更安全,它使游戏玩家和服务器更安全,但它会导致巨大的滞后。 安全性是否值得扣除性能? 当您的代码可以被反编译时,甚至值得使用加密? 我已经使用了Android Proguard但是如果有人真的想要反编译我的代码,他们会花时间来解决所有这些垃圾问题。

我认为,在这些假设下运作是安全的。

  • 客户不可信任。 永远。
  • 服务器是权威的信息来源。

不要信任客户发送给您的数据,对其进行检查和validation(例如,如果有人试图通过发送修改的位置从一个地图角落“传送”到另一个地图角落)。

只接受有效的数据。

禁止骗子。

加密是可以的,但是当它不会损害游戏或游戏玩法时(在你的情况下确实如此)。

您将加密密钥放在客户端代码中? 嗯,这是毫无价值的,另一方面加密是完全值得的,问题是你选择了错误的方式。

我可能会使用身份validation而不是加密(散列您发送的所有数据,以便您可以在服务器端validation它)。 这适用于普通游戏信息,因为不需要保密。 除非您发送私人用户信息,如姓名,年龄,信用卡信息等,我建议您使用普通身份validation,这比加密快得多。 您可以使用非常简单的哈希函数,或者如果您认为您的游戏确实激励人们篡改它,那么您可以使用军事级哈希函数,如SHA-256或更高版本。 但无论您使用哪种哈希方案,它都应该比实现适当的加密方案少得多的时间/资源消耗。