2

我设计了以下机制,以便在不直接连接到服务器的情况下授权软件,看起来很简单,但我没有发现任何严重的缺陷:

我计划使用非对称加密,以便将消息从 1 个服务器(许可证服务器)发送到 n 个客户端(安装该软件的 n 个计算机)

  1. 客户端发送(例如,通过邮件)有关计算机的一些信息(MAC 地址、机器名称、您命名)

  2. 在许可证服务器上,这些信息使用安全性良好的公共(不那么公共)RSA 密钥进行加密,这个加密的有效负载就是许可证。

  3. 加密的许可证被发送到客户端

  4. 当软件启动时,它会检查许可证文件,它能够确保使用每个版本的软件附带的相应 RSA 私钥使用服务器密钥对有效负载进行加密。

  5. 许可证解密后,软件会检查它是否在授予许可证的同一台机器上运行。

    在我看来,没有人能够在没有访问许可证服务器 RSA 密钥的情况下伪造加密的有效负载。

当然,也有可能是许可证被盗,然后软件在模拟正版客户端机器的虚拟机中启动,或者软件可能被反汇编以拔掉许可证检查。

但是这个方案足够好,还是我在这方面完全天真?

谢谢

4

1 回答 1

3

这是一个不错的方案,尽管您确定您希望客户端拥有私钥而服务器拥有公钥吗?除非您每次安装都生成一个密钥对,否则不应该反过来吗?

方案很简单,但实用吗?如果您的目标是防止您的应用程序被随意破解,那么可以使用同样有效的更简单的解决方案。如果您的目标是防止破解者运行您的应用程序,那么很可能(a)您不会成功,并且(b)您的程序不够重要,不值得关注。

当简单地对二进制文件进行十六进制编辑以将许可证检查代码更改为 NOP 几乎肯定会正常工作时,为什么有人会试图攻击许可证方案的加密部分?

如果我是您,我会重新考虑许可策略及其对您的产品及其成功的重要性。

于 2012-10-03T02:05:51.033 回答