1

我目前正在尝试开发客户端-服务器结构,客户端位于.NET 中,服务器是基于 PHP 的 SOAP 服务器。

现在,我正在尝试使用 Rijndael 256 和一些摆弄来实现一个非对称密钥系统。我了解公钥/私钥对的基本概念(根据此页面和维基百科),但是我无法理解它在任何客户端环境中的安全性。

简而言之,该软件将在客户端机器上运行,因此用户将有能力篡改该软件。大多数客户端的功能都围绕从服务器接收到的响应,以显示报告和详细信息。除此之外,客户端软件有时会等待来自服务器的命令,服务器将告诉客户端显示弹出窗口或执行客户端程序关闭(与许可有关)。我意识到服务器可能崩溃或挂起,或者客户端断开连接。其中大部分都在代码中进行了考虑和处理。但我担心的是有人篡改客户端,使其完全忽略服务器的命令。

客户将可以使用各种“玩具”,例如 IDA、ILDASM、de4dot 和各种其他调试器和/或反编译器,我相当肯定有经验的破解者将能够在短时间内找出公钥/私钥组合一段的时间。我知道 .NET 代码本身是非常不安全的,但我不确定除了使用 .NET Reactor 和 Dotfuscator 等工具之外该怎么做。

我的问题:我可以使用什么样的实践、代码、想法或任何东西来严重延迟所说的破解者,或者更确切地说,我如何不惜一切代价保护私钥。

非常感谢任何提示、提示、建议或示例!

4

1 回答 1

1

正如@Corak 所说,公钥/私钥对通常通过将私钥保密来工作。在客户端,您可以在每次连接时生成一个新的公钥/私钥对。最容易隐藏的数据是一开始就没有保存的数据。

您问题的另一部分是“如何阻止饼干!” 这是不可能的,因为最终用户可以完全控制机器。您可以尝试在内存中混淆您的私钥,将其排除在交换文件之外,等等等等,但是任何拥有合适工具并希望破解您的程序的破解者都会这样做。

除非!

您可以与领先的硬件供应商合作。让他们在所有硬件上安装一个超级安全的芯片,这个芯片将在你的控制之下,而不是用户的控制之下。激活后,该芯片将监控所有 I/O 和内存,并且只允许您决定允许的内容。然后你可以简单地禁止像 IDA 这样的程序,让破解者束手无策!作为副作用,您还可以完全控制用户的计算机,并且您可以随心所欲地使用该功能。每个人都赢了!

最后一点:如果您确实决定实施这一点,我建议您的营销部门对此进行大力调整。可能会有一堆混蛋抱怨“隐私”和“所有权”以及诸如此类的废话。因此,您需要为这项技术起一个好名字;这个名字必须听起来像人们想要的东西。

我认为您应该将其称为“可信计算”(因为“可信计算”已被采用)。或者也许是“安全计算”

于 2013-06-11T12:18:58.313 回答