【问题标题】:Software license decryption with a public key stored in the application binary使用存储在应用程序二进制文件中的公钥解密软件许可证
【发布时间】:2013-01-26 16:16:46
【问题描述】:

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

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

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

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

谢谢!

编辑:

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

【问题讨论】:

    标签: rsa encryption-asymmetric license-key


    【解决方案1】:

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

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

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

    【讨论】:

    • 我需要对这些细节进行加密,它们包含有关应用程序使用限制的信息,例如基本版、企业版等。如果是纯文本,只需更改文本即可解锁应用程序。跨度>
    • @MarcusFrenkel 如果数据被更改,服务器签名将不会验证。
    • @MarcusFrenkel:这就是签名的用途。如果用户修改任何内容,签名将不再匹配,并且用户无法在没有服务器公钥的情况下重新签名。
    • (除非用户修改了您的应用程序并输入了自己的公钥,或者完全删除了检查)
    • 好吧,我明白了。非对称加密对我来说是新的,尽管签名和加密是一回事。谢谢!
    【解决方案2】:

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

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

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

    【讨论】:

    • 我会按照你的建议去做。我不得不接受另一个答案,因为它首先出现。非常感谢。
    • 不用担心。祝您的解决方案实施和部署好运。
    猜你喜欢
    • 2011-07-28
    • 1970-01-01
    • 2011-08-15
    • 2012-07-16
    • 1970-01-01
    • 1970-01-01
    • 2012-04-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多