2011-06-15 58 views
5

我一直在想方设法阻止人们篡改随我的软件一起发运的许可证文件。我一直在查看RSA并使用签名来验证数据。使用RSA签署许可证文件

现在从我的理解,我基本上有一些数据(许可证文件),我使用RSACryptoServiceProvider的SignData方法创建一个公钥和私钥的数据签名,这是通过ExportParameters(true)创建的。

然后,我会给软件许可证文件和公钥,以便我可以验证客户端上的数据(许可证)使用VerifyData,但是什么是停止用户创建自己的公钥/私钥对并重新创建数据并只是覆盖公钥和数据?

我一直在阅读和做一些谷歌搜索,但我仍然坚持这一点,我对加密和签署也很新,但我需要弄清楚这一点。

我知道,实际上不可能像文件一样获取文件之类的许可证,因为他们可能只是反编译代码并删除检查,所以我只是想让它们更难以滥用软件,我不希望他们能够制作自己的许可证或将许可证移动到另一台机器。

任何人都可以指出我正确的方向或提供一些建议吗?

谢谢。

+0

我已经仔细研究过这个问题,用于授权Java。在我的情况下,客户不愿意建立一个激活服务器,所以我的软件可以验证它的许可证,所以我必须采取加密/解密方法。我所做的是在许可证和截止日期和数量限制等中对客户详细信息进行编码,以阻止将许可证复制到其他地点。尽管如此,如果客户了解Java,他们可能已经取代了处理产品激活的类,但是我不能轻易地阻止 - 只是让它变得更难。 – 2011-06-15 10:04:36

+0

我也看过这种方法,加密许可证文件并在客户端解密。你在哪里存放钥匙?你是将它嵌入到软件中还是将它放在一个文件中? – 2011-06-15 10:10:33

+0

我发现激活服务器令人反感。为了能够运行某个软件,我必须不断运行(并花费资源)未经审计的网络服务,我被禁止扫描可能与我公司网络安全相关的漏洞。 – 2011-06-15 10:28:33

回答

4

没有什么会阻止他们。将密码学应用于软件许可的全部重点是为法院使用创造更有力的证据。

不要花太多时间让您的许可系统难以规避(越复杂,越会让人看到它是一种挑战),而是确保您的付费客户不会受到阻碍。

+0

是的,这几乎是我对我客户的答案。我对现有的解决方案不满意,因为它不符合客户的要求。 – 2011-06-15 11:10:48

+0

是的你是对的,我想我会做到这一点,所以他们不能轻易让自己完全访问所有内容或将许可证文件移动到另一台机器上。 我同意Simons对激活服务器的评论。 – 2011-06-15 11:27:49

+0

阻止人们将许可证移动到其他机器的困难在于它经常会阻止他们将许可证移动到新的安装位置。 – 2011-06-15 23:18:12