客户端到客户端通信 - 防止用户看到内容

问题描述

我正在开发一个简单的回合制游戏(有点像棋盘游戏)。我决定为多人游戏实现一个简单的 PBEM(电子邮件播放)系统。系统使用 JSON 来传输每个玩家的动作。

在 3 个玩家的情况下,系统是这样工作的:

  • 玩家 1 执行他的操作并将它们(作为 JSON)发送给玩家 2
  • 玩家 2 读取 JSON,然后附加他自己的动作,然后将 JSON 发送给玩家 3
  • 玩家 3 读取 JSON,做出自己的动作,然后将新的 JSON 发送给玩家 1

我希望我的应用程序在所有 3 台播放器计算机上都可以打开并读取 json,但播放器本身不应该能够读取 .json 的内容(他们可以获得优势,这将是作弊)。

为了防止玩家读取 JSON ,我现在对 .json 文件 using AES 进行加密。

问题是我用于加密/解密的密钥在应用程序中被硬编码。

所以现在一切正常,.jsons 已加密,但一旦我的应用程序二进制文件被逆向工程,用于加密的密钥就会可见,每个人都可以使用它来解密 .jsons。

我该如何解决这个问题?

P.S 请注意,通信完全是基于客户端到客户端的,没有服务器或用户管理。

编辑:标题稍作修改

解决方法

一旦我的应用程序二进制文件被逆向工程,用于加密的密钥

你对此无能为力。加密可确保针对第 3 方参与者的机密性,但客户端实际上是.. 客户端,需要解密和处理数据。

您可以尝试将密钥隐藏在某处并使其更难找到(混淆),但最终应用程序在客户端运行并且需要在某处拥有密钥。

每个人都可以用它来解密 .jsons。

您可以使用 PKI(ech 播放器将拥有自己的私钥/piblic 密钥对),他们将交换他们的公钥。这样只有收件人才能解密邮件。

,

我认为 PKI 基础架构可以解决您的问题,但对于此用例这是一个非常昂贵的解决方案

与其考虑逆向工程,不如考虑访问控制措施。一旦 player1 向 player2 发送信息,您的应用程序就应该锁定 JSON 数据文件。应用程序必须锁定文件,以便其他程序或用户无法打开它进行读取或写入。

这里我们应该先问用例的问题。没有人能保证内部威胁。

,

您的应用真的需要了解整个游戏状态吗?保守秘密的最佳方式是在他们需要知道之前不要告诉任何人。

例如,每个玩家都可以在本地写入他们的游戏状态,然后对其进行哈希处理,并且仅与其他玩家共享该回合的哈希值。之后他们可以向其他玩家提供完整的游戏状态,以验证他们没有作弊。

您使用的技术取决于您的游戏如何运作以及您实际需要分享多少信息。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...