许可方案,欺骗安全和撤销功能

时间:2010-08-06 13:04:59

标签: security hash cryptography license-key

这是我的第一个问题所以请温柔......

我正在研究一种我想使用某种许可方案保护的软件。 一个基本方案是为用户生成一些“唯一”密钥。当用户想要注册软件并收到激活码时,用户会发送此密钥和注册码。

当应用程序运行时,它通过比较“唯一”键和通过解密激活码接收的数据包来验证激活码。

这是公平且非常简单的实现,可以选择不同的加密算法等。但是这个方案缺少两个属性:

  1. 如果用户设法欺骗硬件签名等以在另一台计算机上生成相同的“唯一”密钥,则可以使用相同的许可证数据。
  2. 如果用户决定卸载该应用程序并希望将其移动到另一台计算机,则没有任何东西可以阻止他在旧计算机上再次使用旧许可证数据,并且仍然可以获得新安装的新许可证数据。
  3. 您对如何解决这些问题有任何建议吗?

    我的一个想法是将一些随机数据添加到“唯一”密钥中,这个随机数据将以一种模糊的方式存储,如果用户卸载应用程序,这个随机数据将被删除,并且某种哈希与将生成以前的随机数据和许可证数据,这些数据可以发送给我以验证他是否确实卸载了应用程序并确保他无法再次使用以前的许可证数据,因为随机数据已经更改。 / p>

    现在一遍又一遍......

    编辑: 我目前有一个有效的方案,我应该提到最常见的产品安装在嵌入式环境中,硬件变化非常罕见,如果出现硬件故障,那么大多数情况下机器都会损坏。但我可以修改硬件密钥方案以考虑并允许进行一些更改。

    同样正因为如此,软件很可能不会在虚拟机内部运行,但是我没有想到这一点。

    应用程序不会定期调用,如果网络连接可用,用户可以选择进行更自动的注册,否则他/她获得注册密钥,将其输入软件并获取安装ID,即提供给我的注册码+安装ID会生成一个激活密钥,用户从我那里获取,然后解锁软件。

    我正在寻找的是2点的好/可行解决方案。硬件欺骗,撤销许可证密钥,即确保用户不能使用相同的注册码+激活码。

    感谢您的所有反馈

    没有必要

5 个答案:

答案 0 :(得分:3)

首先,你应该明确你要保护的内容。显然,您希望确保每次购买应用程序时,只有一台计算机可以安装并运行应用程序。

您建议使用硬件签名作为每个用户唯一密钥的一部分。如果我的硬件出现故障会发生什么情况(例如我的硬盘坏了)?如果我在硬件问题后无法继续使用它,我肯定不会购买你的应用程序,所以至少你必须准备好处理关键的变更请求。您最好快速响应,因为如果您的应用程序很重要,我希望尽量减少停机时间。而且我不是邀请你检查我的硬件是否出现故障,所以你必须接受我的话。这意味着任何用户都可以通过预先设置硬件故障来获得免费许可。

虚拟机怎么样?检测所有当前存在的虚拟机配置可能是可行的,偶尔会有一些误报的风险。如果您禁止虚拟机,您如何向用户证明这一点?如果您允许虚拟机,如何阻止用户制作整个VM的多个副本? (即使使用具有休眠功能的物理机,也会发生这种情况)。

应用程序每次启动时都会回电给您吗?我想是的,从您的卸载计划。这是一个带宽和可用性成本,也会推迟一些用户 - 不是每个人都在线,特别是在敏感环境中。但是你不需要这么复杂的方案:你的服务器可以跟踪应用程序运行的副本数量,但是当应用程序因任何原因没有干净地终止时你必须处理这种情况(应用程序崩溃,操作系统崩溃,电源故障,连接丢失......)。

您不会在您的问题中讨论这个问题,但您必须保护应用程序可执行文件,以便有人无法通过调试程序绕过许可证检查。

答案 1 :(得分:1)

将软件放入设备硬件并在硬件上放置挂锁。将设备运送给客户。

如果您认为客户会将设备打开以获取您的代码,请考虑加密存储介质....然后他们必须先对方框进行解锁并找到密钥。 TPM芯片或安全USB令牌可能有助于后者。

答案 2 :(得分:1)

作为共享软件的作者和ASP我自己的长期成员,我认为你的解决方案正朝着错误的方向发展。使其可行的唯一方法是使用已建议的硬件设备。如果您想确定并且您的产品非常好并且没有竞争对手,您的客户仍将使用它,那么这种或持续的在线激活是唯一的方法。

但我们(组织小型ISV)从实践中学到的是,你不应该做你想做的事情。不要将其绑定到硬件。每人出售一个许可证,而不是每台计算机一个许最后,由于放宽许可,您将获得更多销售。

做得足以让诚实的人保持诚实。因此限制了跟踪版本(我决定在一小时后终止应用程序)并让最终版本免于所有内容。为付费客户单独下载,就是这样。做一个好公司,而不是法律限制公司最大化的贪婪利润。

我首先使用了一些更好的Windows保护程序,但它们都严重影响了我的代码。他们迟早会打电话来破解。所以我放弃了所有这些。

P.S。:我在Windows上使用硬件指纹架构,我不限制程序,只是为了让人们不会每30天获得一次新的试用密钥。它与唠叨屏幕一起似乎有效。指纹是用户名,Windows安装时间,修改系统文件的时间戳和硬盘序列ID的xor。

答案 3 :(得分:0)

让注册码也是激活码。

您可以在销售点生成唯一的注册码,或与产品一起打包。客户使用该单一代码一步注册/激活/停用您(或您的服务器)。客户的硬件不必生成任何密钥。

重新注册/重新激活仍需要与您联系,因此您了解重新安装的尝试。

答案 4 :(得分:0)

我认为您问题的唯一解决方案是加密硬件dongle。通常它是一个基于USB的防篡改挑战响应加密狗,可以在计算机之间轻松传输。

这些设备大批量生产成本不到1美元,非常小批量生产成本不超过10美元。好的很难伪造,很容易嵌入你的应用程序,并且通常提供免费的EXE加密器,它还包含反调试和反逆向工程功能。