问题简而言之:我开发了一个以二进制形式分发的应用程序(例如游戏)。游戏呼叫总部并将用户的高分作为消息发送到在线游戏服务器。
我想做的是对消息进行数字加密和签名,这样我就可以相信它没有被篡改。
公钥密码术依赖于会话的每一端都有一个秘密,但我不能指望我的软件不被反向工程,私钥被发现。
有没有一种足够安全的方法对来自分布式二进制应用程序的消息进行数字签名(在这种情况下,加密部分不是必需的),而我知道它可以被逆向工程处理?
发布于 2009-06-08 10:55:23
简而言之:不……对此没有万无一失的解决方案。问题是,向你发送高分的应用程序是在你不“信任”这个事务的人的控制下运行的。如果他们可以对代码进行反向工程,那么他们就可以在签名之前更改任何消息的内容。
发布于 2009-06-08 10:56:42
一旦你的程序的代码(无论是源代码、中间语言还是机器代码)掌握在别人的手中,他们可以做任何他们想做的事情,你不能确保他们不会滥用它。为了增加误用的难度,使用所有可能的方法来使逆向工程变得更加困难,但这并不能保证您不会误用。
发布于 2009-06-08 11:03:05
你就是做不到。这个问题没有真正的解决方案,只是越来越多的混淆和篡改检查(天哪,这只是浪费时间)。假设,每个程序都可以被反向工程、模拟和篡改。你对此无能为力。
我唯一能想到的保护游戏结果不被篡改的方法是发送某种类型的游戏记录,这些记录可以回放并验证分数。然而,这并不能保护你的游戏不被机器人玩。只有当你的游戏世界是完全确定的时,这才适用。
https://stackoverflow.com/questions/964324
复制相似问题