这是我的第一个问题,所以请温柔...
我正在开发一个我想使用某种许可方案来保护的软件。一个基本方案是为用户生成一些“唯一”密钥。用户在想要注册软件并收到激活码时发送此密钥和注册码。
当应用程序运行时,它通过比较“唯一”密钥和通过解密激活码接收到的数据块来验证激活码。
这是公平且实现起来非常简单的,可以选择不同的加密算法等。但是该方案缺少两个属性:
- 如果用户设法欺骗硬件签名等以在另一台计算机上生成相同的“唯一”密钥,他可以使用相同的许可证数据。
- 如果用户决定卸载应用程序并希望将其移至另一台计算机,则没有什么可以阻止他在旧计算机上再次使用旧许可证数据并仍然为新安装获取新许可证数据。
您对如何解决这些问题有什么建议吗?
我的一个想法是向“唯一”键添加一些随机数据,这些随机数据将以一种模糊的方式存储,如果用户卸载应用程序,这个随机数据将被删除,并且与之前的随机数据进行某种散列将生成数据和许可证数据,可以将其发送给我以验证他是否确实已卸载应用程序,并确保他将无法再次使用以前的许可证数据,因为随机数据已更改。
一遍又一遍,现在...
编辑:我目前有一个可行的方案,我应该提到最常见的产品安装在嵌入式环境中,硬件更改非常罕见,如果出现硬件故障,那么很可能机器坏了。但我可以修改硬件密钥方案以考虑并允许进行一些更改。
也正因为如此,该软件很可能不会在 VM 内运行,不过这很好,我没有考虑过。
应用程序不会定期调用,如果网络连接可用,用户可以选择进行更自动的注册,否则他/她会获得注册密钥,将其输入软件并获得提供给我的安装 ID ,注册码 + 安装 ID 生成用户从我这里获得的激活密钥,然后解锁软件。
我正在寻找的是对 2 点好的/可行的解决方案。硬件欺骗,撤销许可证密钥,即确保用户不能使用相同的 regcode+activationcode。
感谢您的所有反馈
没有必要