2

我被要求为我们的产品实施许可模式。它们是非常昂贵的产品,客户很少,分布在世界各地,基本上每个人都有一个设计环境(安装在单个 Windows 机器上的 Windows 应用程序,每个客户有 1 到 150 个客户端机器)和一个托管生产环境的 Web 服务器(每位客户 1 到 8 台机器)。我们的产品已获得服务器使用许可,因此客户可以使用任意数量的客户端;我们决定不许可服务器部分(因为它受 SLA 协议约束),而只许可客户端,因为一段时间后无法使用客户端,系统基本上变得无用。

我们的基本假设是客户是“足够诚实的”,如果没有适当地获得过期许可证,我们只想介绍停止客户端设计环境。

我评估了不同的许可产品,它们太贵或太难管理,所以我想出了这个简单的解决方案:

  • 许可证将是一个简单的签名 XML 文件,使用 w3c 的标准 XML 签名功能签名,使用将通过 USB 密钥提供给管理部门的私钥;如果他们丢失了副本,那么许可模式将失败,但这将是他们的错
  • 客户端将在启动时打开许可证文件并使用嵌入在二进制文件中的公钥检查其有效性
  • 如果许可 XML 有效并且其中的数据(到期日期和产品名称)与设计人员的工作相比是正确的;如果没有,将显示适当的消息

关于可能的问题或如何改进方案的任何想法?

4

4 回答 4

10

只要有足够的兴趣,我还没有看到一个在几周内没有被打破的许可计划。您的计划看起来非常好(尽管可以肯定,如果有人真的想要,他们会破坏它)。

无论你做什么,你都应该听从 Eric Sink 的建议

目标应该只是“让诚实的人保持诚实”。如果我们走得更远,只会发生两件事:

  1. 我们打了一场我们无法赢得的战斗。想作弊的人会成功。
  2. 我们让产品更难使用,从而伤害了我们产品的诚实用户。

由于您正在为为企业使用而设计的程序实施许可方案,因此您可以更简单,只需在客户端上保留某种 id 和到期日期以及简单的签名,并在许可到期或签名失败时拒绝启动. 打破它并不难,但没有许可计划,如果您认为您的客户是诚实的,这将绰绰有余。

于 2008-10-04T09:12:42.097 回答
1

从您的问题中,您的计划如何运作并不完全清楚。客户端软件的每个实例是否都有不同的密钥?许可证的有效期是多久?每个客户有不同的密钥吗?许可证是如何支付的?如何更新许可证?

如果您试图控制客户端代码的使用次数,那么只有上面的第一个会这样做。

归根结底,在您似乎居住的世界上,我怀疑您将不得不相信没有公然侵犯您的许可证的行为。大多数体面的组织(听起来像您的客户)都有责任不侵权,如果他们违反许可协议,可能会导致严重后果。他们也会定期接受审核,您可能有一些法定权利去检查他们的使用情况(如果没有,您应该将其写入您的许可协议)。

如果 USB 密钥的内容进入网络,对您来说变得非常危险。在这方面,任何使用公开密钥的方案都容易受到故意泄露秘密的影响。

我敢肯定有很多关于这个主题的文献,所以可能值得你继续研究。

顺便说一句,我不确定您在中间部分对服务器许可的 SLA 的引用。许可和 SLA 非常不同。许可证是客户的义务,而 SLA 是您的义务。

于 2008-10-04T09:14:38.007 回答
1

如果你给他们私钥,是什么阻止他们创建更多签名的 XML 文件而不是从你那里购买额外的许可证?还是网站许可证?如果是后者,是什么阻止他们为其他人/网站创建许可证?

通常,开发许可方案使用 MAC 地址和/或硬盘序列号将许可与特定机器绑定,或者有时仅使用激活密钥(通常只是硬件信息的哈希)

并且通常使用您保密的私钥完成编码,并使用公钥验证许可证;客户永远不会拥有私钥,否则他们可以(如果愿意的话)生成自己的许可证

于 2008-10-04T12:30:44.660 回答
1

我同意 Steven A. Lowe 的观点(我没有 15 名声望,所以我不能投票给他)。

这似乎也太复杂了。你想让它牢不可破吗?你不能。任何有足够动力的大师都会找到解决方法。

有时简单的许可方案效果最好:

我建议管理员将一个简单的加密文件放在客户可以访问的地方——它将包含客户名称和到期日期。您在所有打印的报告中使用文件中的客户名称(这是大多数PHB关心的,这样他们就不会使用打印其他人姓名的许可证)。

于 2008-10-07T08:04:46.817 回答