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

Dan*_*und 6 security hash cryptography license-key

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

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

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

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

  1. 如果用户设法欺骗硬件签名等以在另一台计算机上产生相同的"唯一"密钥,则他可以使用相同的许可证数据.
  2. 如果用户决定卸载该应用程序并希望将其移动到另一台计算机,则没有任何东西可以阻止他在旧计算机上再次使用旧许可证数据并仍然获得新安装的新许可证数据.

您对如何解决这些问题有任何建议吗?

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

过去,现在......

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

也正因为如此,软件很可能不会在虚拟机内部运行,虽然好点,但我没想过.

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

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

感谢您的所有反馈

没有必要

Gil*_*il' 3

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

\n\n

您建议使用硬件签名作为每个用户唯一密钥的一部分。如果我的硬件出现故障(例如硬盘损坏)会怎样?如果我在硬件问题后无法继续使用您的应用程序,我当然不会购买您的应用程序,因此至少您必须准备好处理关键更改请求。您最好快速响应,因为如果您的应用程序很重要,我希望最大限度地减少停机时间。我不会邀请您检查我的硬件是否出现故障,因此您必须相信我的话。这意味着任何用户都可以通过借口硬件故障来获得免费许可证。

\n\n

那么虚拟机呢?检测当前所有现有虚拟机配置可能是可行的,但有时会冒一些误报的风险。如果您禁止虚拟机,您如何向用户证明这一点?如果允许虚拟机,如何防止用户制作整个虚拟机的多个副本?(即使物理机处于休眠状态,这种情况也可能发生)。

\n\n

应用程序是否会在每次启动时回调给您?从你的卸载方案来看,我猜是这样的。这是带宽和可用性成本,并且还会推迟一些用户 \xe2\x80\x94 并非每个人都在线,尤其是在敏感环境中。但是,您不需要如此复杂的方案:您的服务器可以跟踪正在运行的应用程序的数量,尽管您必须处理应用程序因任何原因(应用程序崩溃、操作系统崩溃、电源故障、连接丢失...)。

\n\n

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

\n