Encryption 我知道分布式程序可以进行反向工程,如何对其中的消息进行数字签名和信任?

Encryption 我知道分布式程序可以进行反向工程,如何对其中的消息进行数字签名和信任?,encryption,digital-signature,Encryption,Digital Signature,简单地说,问题是:我开发了一个以二进制形式分发的应用程序(例如一个游戏)。游戏会呼叫主页,并将用户的高分作为消息发送到在线游戏服务器 我想做的是对消息进行数字加密和签名,这样我就可以相信它没有被篡改 公钥密码依赖于对话的每一端都有一个秘密,但我不能依赖我的软件没有被反向工程,私钥被发现 当我知道可以对分布式二进制应用程序中的消息进行反向工程时,是否有一种安全或足够安全的方式对其进行数字签名(本例中不需要加密部分)?否。客户端软件要对其进行数字签名,必须具有私钥。如果软件有私钥,用户可以发现(并可

简单地说,问题是:我开发了一个以二进制形式分发的应用程序(例如一个游戏)。游戏会呼叫主页,并将用户的高分作为消息发送到在线游戏服务器

我想做的是对消息进行数字加密和签名,这样我就可以相信它没有被篡改

公钥密码依赖于对话的每一端都有一个秘密,但我不能依赖我的软件没有被反向工程,私钥被发现


当我知道可以对分布式二进制应用程序中的消息进行反向工程时,是否有一种安全或足够安全的方式对其进行数字签名(本例中不需要加密部分)?

否。客户端软件要对其进行数字签名,必须具有私钥。如果软件有私钥,用户可以发现(并可能滥用)它。

简而言之:没有。。。对于这一点,没有万无一失的解决办法。问题是,向您发送高分的应用程序是在您在此事务中不“信任”的人的控制下运行的。如果他们可以对代码进行反向工程,那么他们可以在签名之前更改任何消息的内容。

一旦程序的代码(无论是源代码、中间语言还是机器代码)掌握在其他人手中,他们可以做任何他们想做的事情,而你不能确保他们没有误用它。为了防止误用,请使用所有可能的方法使逆向工程更加困难,但这并不能保证防止误用。

你就是做不到。这个问题没有真正的解决方案,只是越来越多的混淆和篡改检查(哎呀,这只是浪费时间)。假设每个程序都可以被反向工程、模拟和篡改。你对此无能为力


我能想到的确保比赛结果不被篡改的唯一方法是发送一些比赛记录,这些记录可以被重放和分数验证。不过,这并不能保护你的游戏不被机器人玩。这只适用于游戏世界完全确定的情况。

使用一些已知的算法,在我的应用程序中,我使用的是河豚。但这并不是安全的原因


游戏通常有一个过程来检查连接到服务器的程序的身份,这个过程称为“握手过程”。服务器发送一个包含值和加密的数据包(客户端知道如何解密)blowfish密钥。每次连接时,从服务器接收的blowfish密钥都是随机的。这是握手的第一部分

下一部分是根据connect上接收到的值(随机值)对计算出的整数进行加密,然后使用blowfish对其进行加密

当服务器接收到该数据包时,服务器发送相同的数据包,该数据包使用新的(最终的)blowfish密钥加密。客户端必须通过使用旧的blowfish密钥解密来找到该密钥,然后使用从第一个数据包接收到的值进行计算

这就是握手过程,在握手结束后,你可以将分数发送给同一个负责人(或者可能将分数放在握手中,并在握手后发送一个假数据包,以愚弄对方)

这件事太多了,但对一个反向者来说要么太多了


解决问题的另一种方法是根据数据包内容,通过自己的计算添加一个两字节(word)安全值(CRC)。服务器将检查该值,如果该值无效->断开连接。

问得好!这里的很多人已经说过了——你最终需要在你的应用程序中构建一个可以通过逆向工程检索的密钥


仔细阅读一下。这是建立在一个公共/私人密钥内置到您的电脑-您的电脑将永远不允许您访问。内存限制/密封存储会使攻击者很难尝试发现发送到应用程序的密钥。

不,一般情况下不会。你面临其他评论中提到的问题

问题变成了成本问题。破解保护系统的成本是否高于其保护的价值?成功破门而入的代价是什么

由于高分表通常不是高值目标,因此您可能希望尝试以下任一方法:

  • 随着高分,发送一些关于游戏状态的信息;播放时间、级别、收集的奖金等。加密/混淆此数据。这将帮助服务器确定高分理论上是否有效。忽略任何明显虚假的高分

  • 使用带有共享机密的加密发送高分。不要在应用程序中将共享机密存储为纯文本。最好使用算法实时计算

  • 混淆你的客户代码

  • 使用客户端IP地址和时间戳存储高分


  • +1,但我相信你的问题错了:看来他在签约前并没有询问。也许他是。。。再过2分钟我们就会看到:)我想唯一可以解决的问题是,如果他担心中间的人可能会篡改别人的分数。。。但我无法想象为什么中间的人会关心一些随机玩家的分数…好的一点。。。正如你所说,这是我们拥有技术的唯一情况:)…“客户端知道如何解密”,而反向工程师也知道如何解密,这使得你的“方法”毫无用处。通过使用响应值的方案“隐藏”加密密钥的逻辑也可以被攻击者破译,这只会使重播攻击更加困难,增加攻击者的困惑,但肯定不是不可能的。通过模糊实现的安全性根本不是安全性。:)看看客户机知道如何解密哪些东西。客户机必须知道一些东西,至少一种算法。这并不意味着它没用,但它是c