公钥完整性 - 中间人攻击

时间:2014-10-06 17:21:22

标签: c++ c++builder public-key-encryption encryption-asymmetric

我想要许可我的产品。 问题是关于验证并确保公钥没有改变,证书也是如此(中间人攻击)。

到目前为止我的计划是;

  1. 我向我的EXE提供许可证密钥和签名证书(使用私钥签名)给客户。
  2. 当客户输入许可证密钥时,我的EXE将使用公钥验证它(生成哈希码,然后解密证书以获取其他哈希码并进行比较)
  3. 现在的问题是;如果有人对EXE进行逆向工程,则使用自己的公钥更改公钥,并获取使用自己的私钥生成的新证书。然后EXE将始终验证证书,我的EXE被黑了。

    这可能吗?如果是,那么可以确定我的公钥不会改变的解决方案是什么?

    注意:不涉及互联网连接。

1 个答案:

答案 0 :(得分:1)

为确保某些内容的完整性(例如,可执行文件),请使用私钥对其进行签名(或其中的关键部分),并在每次启动应用程序时检查签名是否有效。

有足够时间的人当然可以弄清楚签名是如何完成的并取而代之的。他们可以完全绕过检查。解决这个问题的唯一方法就是加密。但是有足够时间的人可以解决解密算法...

通常的方法是保护您的许可证是将软件绑定到某些硬件,例如USB加密狗,TPM或HDD序列号。这仍然不能保证坚定的黑客不会绕过您的许可。

对黑客没有100%的保护。您所要做的就是让用户破解它是不经济的。努力破解比你为产品收费更贵的钱。使许可条款非常明确,并警告在违规情况下可能会受到起诉。建立可疑违规的报告机制,以便您可以追踪它们。