Encryption 使用RSA对许可证文件进行签名

Encryption 使用RSA对许可证文件进行签名,encryption,licensing,rsa,Encryption,Licensing,Rsa,我一直在想办法阻止人们篡改我的软件附带的许可文件。我一直在研究RSA,并使用签名来验证数据 现在据我所知,我基本上有一些数据(许可证文件),我使用RSACryptServiceProvider的SignData方法为数据创建一个签名,该签名使用通过ExportParameters创建的公钥和私钥(true) 然后,我会将许可证文件和公钥与软件一起提供,以便我可以使用VerifyData验证客户端上的数据(许可证),但如何阻止用户创建自己的公钥/私钥对并重新创建数据,以及仅仅覆盖公钥和数据 我一直

我一直在想办法阻止人们篡改我的软件附带的许可文件。我一直在研究RSA,并使用签名来验证数据

现在据我所知,我基本上有一些数据(许可证文件),我使用RSACryptServiceProvider的SignData方法为数据创建一个签名,该签名使用通过ExportParameters创建的公钥和私钥(true)

然后,我会将许可证文件和公钥与软件一起提供,以便我可以使用VerifyData验证客户端上的数据(许可证),但如何阻止用户创建自己的公钥/私钥对并重新创建数据,以及仅仅覆盖公钥和数据

我一直在阅读和做一些谷歌搜索,但我仍然坚持这一点,我对加密和签名也相当陌生,但我需要弄清楚这一点

我知道,几乎不可能像他们想要的那样保护一个类似许可证的文件,他们只需要反编译代码并删除检查,所以我只是想让他们更难滥用软件,我不希望他们能够仅仅弥补自己的许可证或将一个许可证移动到另一台机器上

谁能给我指出正确的方向或提供一些建议


谢谢。

没有什么能阻止他们。将密码学应用于软件许可的全部目的是为法庭提供更有力的证据


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

我自己也研究过这一点,以获得Java许可证。我的客户不愿意设置激活服务器,这样我的软件就可以根据它来验证许可证,所以我不得不采用加密/解密方法。我所做的是在许可证中对客户详细信息进行编码,并对到期日期和数量限制等进行编码,以阻止将许可证复制到其他位置。尽管如此,如果客户理解Java,他们本可以替换处理产品激活的类,但我不能轻易阻止这种情况——只是让它变得更难。我还研究了这种方法,对许可证文件进行加密,然后在客户端对其进行解密。你把钥匙放在哪里了?你是把它嵌入软件还是放在文件里?我觉得激活服务器很冒犯。为了能够运行某个软件,我必须持续运行(并花费资源)未经审核的网络服务,禁止我扫描可能与公司网络安全相关的漏洞。@Simon Richter,我同意,但客户的要求是一个防止盗版的产品激活系统。我认为,如果客户机同意运行服务器,它将只是一个由两部分组成的激活过程,代码中包含一些时间成分,以防止重复使用。我目前将加密的许可证存储在数据库中,并在每次启动软件时对其进行解密。密钥当前嵌入在软件中。我不确定把它分开会有多大好处。当然,您可以更改所使用的密钥,但这很容易传输,同时还可以传输许可证代码。不过,我愿意接受更好的建议——对目前的解决方案不太满意。是的,这就是我对我客户的回答。我只是对我目前的解决方案不满意,因为它不符合客户规定的要求。是的,你是对的,我想我会这样做,这样他们就不能轻松地让自己完全访问所有内容或将许可证文件移动到另一台机器上。我也同意Simons关于激活服务器的评论。阻止人们将许可证移动到其他机器的困难在于,这通常也会阻止他们将许可证移动到新的安装。