2

参考这个问题的答案,我无法理解如果私钥保存在许可证服务器上并且公钥是在应用程序可执行文件中提供的,软件许可方案如何工作,反之亦然。

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

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

如果应用程序没有私钥而是公钥,应用程序如何解密此许可证文本?

谢谢!

编辑:

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

2 回答 2

5

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

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

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

于 2013-02-11T14:39:22.277 回答
3

我真的不认为需要所有这些东西。

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

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

于 2013-02-11T18:01:47.200 回答