【问题标题】:Use RSA to sign a license file使用 RSA 签署许可证文件
【发布时间】:2011-09-15 09:43:24
【问题描述】:

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

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

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

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

我知道几乎不可能获得像文件这样的许可证,就好像他们希望他们可以反编译代码并删除检查一样,所以我只是想让他们更难滥用软件,我不'不希望他们能够只是在那儿制作自己的许可证或将一个许可证移动到另一台机器上。

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

谢谢。

【问题讨论】:

  • 我自己研究过这个,以获得 Java 许可。就我而言,客户端不愿意设置激活服务器,以便我的软件可以验证许可证,因此我不得不采用加密/解密方法。我所做的是在许可证和到期日期和数量限制等中编码客户详细信息,以阻止将许可证复制到其他位置。不过,如果客户了解 Java,他们本可以替换处理产品激活的类,但我无法轻易阻止——只是让它变得更难。
  • 我也研究过这种方法,加密许可证文件并在客户端解密。你把钥匙放在哪里了?你是把它嵌入到软件中还是保存在一个文件中?
  • 我发现激活服务器令人反感。为了能够运行某个软件,我必须持续运行(并为其消耗资源)未经审计的网络服务,禁止我扫描可能与公司网络安全相关的漏洞。跨度>
  • @Simon Richter,我同意,但客户要求是防止盗版的产品激活系统。我认为如果客户端同意运行服务器,那将只是一个由两部分组成的激活过程,代码中包含一些时间组件以防止其被重复使用。
  • 我目前将加密后的许可证存储在数据库中,并在每次启动软件时对其进行解密。密钥当前嵌入在软件中。我不确定将其分开是否会带来很多好处。当然,您可以更改您使用的密钥,但这很容易与许可证代码一起传输。不过,我愿意接受更好的建议 - 对当前的解决方案不太满意。

标签: encryption licensing rsa


【解决方案1】:

没有什么能阻止他们。将密码学应用于软件许可的全部意义在于创建更强有力的证据以供法庭使用。

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

【讨论】:

  • 是的,这几乎就是我对客户的回答。我只是对我目前的解决方案不满意,因为它不符合客户提出的要求。
  • 是的,你是对的,我想我会做到的,这样他们就不能轻易地让自己完全访问所有内容或将许可证文件移动到另一台机器上。我也同意 Simons 关于激活服务器的评论。
  • 阻止人们将许可证转移到其他机器的困难在于,它通常还会阻止他们将许可证转移到新安装。
猜你喜欢
  • 2012-07-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-05-15
  • 1970-01-01
  • 2014-12-17
  • 2011-02-02
相关资源
最近更新 更多