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

时间:2008-10-04 08:48:17

标签: protection drm

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

我们的基本假设是客户“足够诚实”,而且我们想要涵盖的唯一事情就是如果未获得时间过期许可证,则停止客户端设计环境。

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

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

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

4 个答案:

答案 0 :(得分:10)

如果有足够的兴趣,我还没有看到在几周内没有被破坏的许可计划。你的计划看起来非常好(但要确定,如果有人真的想要,他们会打破它)。

无论你做什么,都应该关注Eric Sink的advice

  

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

     
      
  1. 我们打一场我们无法取胜的战斗。那些想作弊的人会成功。
  2.   
  3. 我们通过让产品变得更加困难来伤害我们产品的诚实用户   使用。
  4.   

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

答案 1 :(得分:1)

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

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

在一天结束时,在您看来居住的世界中,我怀疑您将不得不相信没有明显侵犯您的执照。大多数体面的组织(听起来像您的客户)都有责任不侵犯,如果他们违反许可协议就会导致严重后果。他们也会定期接受审计,你可能有一些法定权利去检查他们的使用情况(如果不是,你应该把它写进你的许可协议中)。

如果USB密钥的内容在网上找到,那么对您来说非常危险。在这方面,任何使用已发布密钥的方案都容易被故意泄露秘密。

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

BTW我不确定您在服务器许可的中间部分是否提到了SLA。许可和SLA非常不同。许可证是SLA是您的客户义务。

答案 2 :(得分:1)

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

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

通常使用您保密的私钥完成编码,并使用公钥验证许可证;客户端永远不会拥有私钥,否则他们可以 - 如果是这样倾向 - 生成自己的许可证

答案 3 :(得分:1)

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

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

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

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