2013-02-11 172 views
2

参照answer of this question公钥软件许可解密我不明白,如果私有密钥保存在许可服务器和公钥运在应用软件许可方案如何能工作可执行文件,而不是反之。存储在应用程序二进制

我尝试做以下的软件许可方案:

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

如何应用此解密如果它没有私钥但是公钥有许可证文本?

谢谢!

编辑:

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

回答

4

申请应明文存储的细节。

在注册时,服务器应签署使用私钥那些细节(包括机器标识)。

每个应用程序启动时,它应该使用公共密钥验证签名。

+0

我需要加密的那些细节,它们包含有关应用程序使用的限制,如基本版,企业版等信息,如果是在纯文本应用程序可以通过简单地改变文本解锁。 – 2013-02-11 14:43:06

+2

@MarcusFrenkel服务器签名不会验证数据是否被更改。 – 2013-02-11 18:32:10

+0

@MarcusFrenkel:签名就是这样。如果用户修改任何内容,签名将不再匹配,并且用户不能在没有服务器的公钥的情况下重新签名。 – SLaks 2013-02-11 18:35:51

3

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

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

客户机可以读取文件,然后简单地验证使用的许多数字签名算法是在那里一个TE签名。

+1

我会做就像你所建议的那样,我必须先接受其他答案,非常感谢你。 – 2013-02-11 19:43:38

+0

不用担心,祝你的解决方案得到实施和部署。 – 2013-02-11 19:44:34