【问题标题】:Software licencing scheme [closed]软件许可计划 [关闭]
【发布时间】:2012-09-23 16:16:11
【问题描述】:

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

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

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

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

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

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

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

    在我看来,如果不访问许可证服务器 RSA 密钥,任何人都无法伪造加密的有效负载。

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

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

谢谢

【问题讨论】:

  • 可能足以阻止随意篡改。没有任何方案足以阻止严重的篡改。只有当破解它所需的成本超过合法许可证的价格时,保护方案才有效。反汇编可能是认真考虑破坏您的软件的人会采取的途径。
  • 谢谢,这个想法确实是为了阻止随意的攻击。该软件没有广泛的公众,也不是极客。

标签: licensing rsa public-key-encryption


【解决方案1】:

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

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

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

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

【讨论】:

  • 我的猜测是该软件的公众甚至不知道十六进制编辑器是什么。不过感谢您的提示,我会记住这一点的。
  • 请注意,至少在 RSA 加密中,密钥对的哪一半是“公开的”,哪一半是“私有的”只是一个符号问题——一个加密的数据只能由其他。他也可以说客户端拥有公钥:只要客户端无法访问密钥对的另一半,这实际上是一回事。
  • 理论上是的。 然而,在实践中,私钥通常存储在一个文件中,该文件不仅包含私钥的两个必要组件,还包含几个可用于加速加密操作的附加值。并且给定 那些 值和私钥,导出公钥可能很简单。以ssh-keygen -y 为例。有一个很好的理由,一个被称为“公共”而另一个被称为“私人”,用户应该注意这种差异,除非他们有必要的知识深度。而且大多数情况下都不会。
  • @Nik B,好的,尽职尽责。非常感谢关于公钥/私钥差异的论文解释。
猜你喜欢
  • 1970-01-01
  • 2020-04-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-08-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多