问题简介:我开发的应用程序(例如一个游戏)它分布在二进制形式。游戏家里打电话并发送给用户的高分作为一个消息网络游戏服务器。

什么我想要做的就是进行数字加密签署的消息,这样我可以信任它并没有被篡改。

公钥加密依赖于每个话结束具有一个秘密,但是我不能依靠我的软件没有被逆向工程,私人钥匙发现。

是否有安全或安全的足够的方式进行数字签名(密部分是不必要的,在这种情况下)一个消息从我分发的二进制应用程序的时候我知道它可以反向工程?

有帮助吗?

解决方案

在短:无......没有防呆溶液于此。问题是,发送您的高分应用程序,你在本次交易不“信任”的人的控制下运行。如果能进行反向工程的代码,然后将其签名,才可以改变任何消息的内容。

其他提示

一旦代码(不管 - 源,intermideate语言,或机器代码),你的程序是在别人的手里,他们可以为所欲为,你不能确保他们不滥用它。为了使滥用更难利用一切可能的办法,使逆向工程难度,但是这并不能保证你不被滥用。

你就不能。有没有真正的解决这个问题,只是越来越多的迷惑和篡改支票(恕我直言,这只是浪费时间)。可以想像,每一个程序可以反向工程,模仿和篡改。有什么可以做对抗。

我能想到的保持游戏的结果免受篡改的唯一方法是发送某种游戏记录可以重放和得分验证。这不保障你的游戏由一个机器人正在播放,虽然。而这仅适用于游戏的世界是完全确定的。

没有。对于客户端软件进行数字签名,它必须有私钥。如果软件有专用键,用户可以发现(和潜在的滥用)吧。

使用已知的一些算法,在我用我的使用河豚。但那不是什么使得它的安全。

游戏通常有一个过程,用于检查idenity的程序连接的服务器,该过程被称为"握手的过程"。服务器发送一个分组,其conctains价值观和一个加密的(客户知道如何解密)河豚的关键。河豚关键从服务器收到的是随机的每个连接。这是第一部分的握手。

接下来的部分是加密的计算整数基于的价值观上收到的连接(这是随机的),然后对其进行加密用河豚。

当服务器收到的数据包,该服务器发送相同的分组,这是加密的用新的(最后)河豚的关键。客户已找出关键的解它与旧的河豚键,然后计算的价值从收到的第一个分组。

这是握手的过程中,在它完成后,你可以送你的分数相同的主(或者把它放在握手和发送一个假的分组后的握手是做傻瓜反).

太多的事情要做,但这是不是太多了一个反.

另一种方式来解决你的问题是添加一两个字节(word)的安全价值(CRC)根据包的内容用自己的计算。服务器会检查的价值,如果其无效->断开。

好问题!大量的人在这里已经说过了 - 你最终需要建立一个钥匙到您的应用程序,它可能是通过逆向工程可收回

可信计算一个阅读起来。该电脑将永远不会允许你访问 - 这是建立在为您的PC公钥/私钥建。内存垂落/密封储存将使攻击者难以试图发现发送到您的应用程序的关键。

不,不是一般。你脸上提到的问题通过的其他评论意见。

问题就变成一个成本。是的费用裂一个保护系统的更高的比价值,它是保护?什么是费用回收从成功突破吗?

由于很高的评分表通常不是一个高价值目标,您可能想要的任何尝试的这些:

  1. 随着高分,发送的一些信息游戏的状态;游戏时间,等级、奖金收集等。加密/混淆这些数据。这将帮助的服务器是否确定较高的分数理论上可以是有效的。忽略任何高分,这显然是假的。

  2. 发送高分使用的加密用的共用秘密。不存储的共享秘密作为纯文本在你的程序。优选的,使用算法计算出它的实时。

  3. 模糊你的客户代码。

  4. 储存高成绩与客户的IP地址和时间戳。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top