请对这个简单的软件保护架构发表评论

  • 本文关键字:评论 软件保护 简单 drm
  • 更新时间 :
  • 英文 :


我被要求为我们的产品实现一个许可模式。它们是非常昂贵的产品,几乎没有客户分布在世界各地,基本上每个产品都有一个设计环境(一个安装在单个windows机器上的windows应用程序,每个客户有1到150台客户端机器)和一个承载生产环境的web服务器(每个客户1到8台机器)。我们的产品已获得服务器使用许可,因此客户可以使用任何数量的客户端;我们决定不许可服务器部分(因为它受SLA协议的约束),而只许可客户端,因为在一段时间后,如果没有使用客户端的能力,系统基本上就变得毫无用处了。

我们的基本假设是,客户"足够诚实",我们唯一想涵盖的是,如果没有获得到期许可证,就停止客户的设计环境。

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

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

关于可能出现的问题或如何改进场景,有什么想法吗?

如果有足够的兴趣,我还没有看到一个许可证计划在几周内没有被打破。你的计划看起来很好(不过要确定的是,如果有人真的想,他们会打破它)。

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

目标应该只是"保持诚实的人诚实"。如果我们去除此之外,只有两件事发生:

  1. 我们打一场我们赢不了的仗。那些想作弊的人会成功的
  2. 我们让我们的产品更难使用

由于您正在为一个专为公司使用的程序实施许可证方案,因此您可以更简单,只需在客户端上保留某种id和到期日期以及简单的签名,如果许可证过期或签名失败,则拒绝启动。打破它并不难,但没有许可证计划,如果你认为你的客户是诚实的,这就足够了。

从您的问题中还不完全清楚您的方案是如何工作的。客户端软件的每个实例都有不同的密钥吗?许可证有效期是多久?每个客户有不同的钥匙吗?如何支付许可证费用?如何续订许可证?

如果你试图控制客户端代码的使用次数,那么只有上面的第一个才能做到

归根结底,在你所居住的世界里,我怀疑你将不得不相信没有公然侵犯你的许可证。大多数规模适中的组织(听起来像是你的客户)都有责任不侵权,如果他们违反许可协议,可能会导致严重后果。他们也会定期接受审计,你可能有一些法定权利去检查他们的使用情况(如果没有,你应该把它写进你的许可协议中)。

对你来说,如果USB密钥的内容进入网络,就会变得非常危险。在这方面,任何使用公开密钥的计划都容易被故意披露秘密。

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

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

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

一般来说,开发许可方案使用MAC地址和/或硬盘驱动器序列号,或者有时只使用激活密钥(通常只是硬件信息的散列)将许可证绑定到特定的机器

通常,编码是用你保密的私钥完成的,许可证是用公钥验证的;客户从来没有私钥,否则他们可以——如果愿意的话——生成自己的许可证

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

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

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

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

最新更新