使用存储在应用程序二进制文件中的公钥进行软件许可证解密

时间:2013-02-11 14:35:59

标签: rsa encryption-asymmetric license-key

参考answer of this question我无法理解如果私钥保存在许可证服务器上并且公钥在应用程序可执行文件中提供,软件许可方案如何工作,而不是相反。< / p>

我正在尝试执行以下软件许可方案:

  1. 用户在购买时获取产品ID(基于GUID),并在应用程序内部使用它来激活它。
  2. 应用程序连接到使用RSA公钥发送回加密文本的许可证服务器。此文本(许可证)将存储在用户的硬盘上。
  3. 每次应用程序启动时,都需要使用RSA私钥解密此许可证,以便提取不同的参数,如产品版本,产品限制,注册到哪家公司等。
  4. 如果应用程序没有私钥而是公钥,应用程序如何解密此许可文本?

    谢谢!

    编辑:

    1. 如果用于加密许可证的密钥仅在服务器端而不是公众处可用,我们可以将其称为私钥吗?在这种情况下,如果一方有加密密钥而另一方(公众)有密钥进行解密,那么拥有解密密钥的一方是否可以获得加密密钥?关注点是基于stackoverflow的各种主题,在给定私钥的情况下生成公钥并不困难。如果你有私钥,你实际上可以拥有两个密钥。
    2. 这个想法是,一旦软件被激活,它就不再需要连接到许可证服务器了。

2 个答案:

答案 0 :(得分:5)

应用程序应以纯文本格式存储其详细信息。

注册时,服务器应使用私钥签署这些详细信息(包括机器标识)。

每次应用程序启动时,都应使用公钥验证签名。

答案 1 :(得分:3)

我真的没有看到所有这些东西的需要。

为什么不在验证时简单地建立与服务器的连接,让服务器生成一个包含您想要的所有参数的文件(甚至是纯文本),然后让服务器签署该文件并将其返回给软件?

客户端可以读取文件,然后使用众多数字签名算法之一简单地验证te签名。