【问题标题】:How to protect software license from fake digital signature?如何保护软件许可证免受伪造的数字签名?
【发布时间】:2023-04-06 23:52:01
【问题描述】:

我正在考虑使用 DSS 将软件许可证分发给最终用户。

基本上,软件许可证是一个简单的文本文件/xml文件,包含软件模块和公司信息。该文件将使用私钥进行签名。

软件许可证和数字签名将部署在最终用户的计算机上。当应用程序启动时,它将使用已知的公钥验证软件许可证是否有效。如果有效,它将读取软件许可中的信息并打开许可使用的功能。

但是,这是该协议的一个弱点。软件许可证是一个可读的文本文件。任何人都可以生成公钥/私钥对,签署软件许可证并使用假公钥修补软件。它将通过验证过程并可以创建自己的软件许可证。

有什么好的方法可以防止伪造数字签名吗?

【问题讨论】:

    标签: licensing digital-signature public-key-encryption


    【解决方案1】:

    完全保护您的软件免遭盗版是不可能的。无论如何,您必须以某种方式分发您的公钥,然后盗版者可以将其与自己的交换。但是,您可以尝试让他们更难。例如,通过将公钥作为字符串嵌入到可执行文件中。您甚至可以对其进行一些基本的加密,使其更难找到。

    但同样,如果您的软件值得破解,它被破解。

    【讨论】:

      【解决方案2】:

      我不知道您使用什么工具来开发您的代码,但是有一个excellent description 说明如何在 .NET 框架世界中实现这一点,请参阅http://www.codeproject.com/Articles/4940/Using-XML-Digital-Signatures-for-Application-Licen。公钥嵌入到应用程序本身的代码中。我使用与此类似的方案来许可 Ruby 插件。

      如果有人真的决心破解您的保护,那么他们就会这样做。但是,这种方案将阻止 99.9% 的人企图盗用您的软件。

      【讨论】:

      • 我想知道你的 99.9% 是从哪里来的 :) 如果有人真的想破解它,他们就会破解它,所以如果 0% 有效,这些数字的保护。其余的用户只会在互联网上寻找破解。
      • 大多数想要免费软件的人都是临时用户,他们被编码的前景吓倒了。我不假装这个计划是无懈可击的,但它应该可以阻止投机取巧的海盗。而且这是一个血腥的景象,总比没有保护好。尽管我们尽了最大努力,顽固而坚定的窃贼仍会进入房屋,但我没有听到有人主张我们不妨不锁门窗。这是一个愚蠢的论点。
      【解决方案3】:

      任何人都可以生成公钥/私钥对,签署软件许可证并使用假公钥修补软件。它将通过验证过程并可以创建自己的软件许可证。

      有什么好的方法可以防止伪造数字签名吗?

      与防止有人完全禁用数字签名检查的方式相同。你的问题就像问你如何防止小偷进入你第二层最左边的窗户。那不是他要穿过的窗户,无论如何,你阻止他进入的方式与阻止他进入你的其他窗户一样。

      【讨论】:

      • 这更像是一个评论,而不是一个答案,不是吗?
      • @mkl 老实说,我相信这是对该问题的最佳答案。我确实对这个问题投了反对票。
      【解决方案4】:

      有两种方法可以防止使用新的密钥对进行签名。

      1. 在 DLL 中嵌入公钥。这样公钥就被隐藏了。

      2. 使用公钥Pinning 技术。这涉及从签名机构获得证书,这对个人来说很困难。整个事情都属于PKI(公钥基础设施)。

      3. 第三种方法是应用非对称加密技术(例如 AES)来加密您的签名许可证文件并将其嵌入到您的许可证 dll 中。这使得许可证中的信息不那么明显,并且可以防止基本攻击。

      正如其他人所指出的,这并非万无一失,只能解决您提出的问题。

      【讨论】:

        猜你喜欢
        • 2011-07-14
        • 1970-01-01
        • 2014-03-07
        • 2012-01-07
        • 2010-12-10
        • 2013-11-16
        • 2019-10-11
        • 1970-01-01
        • 2017-02-05
        相关资源
        最近更新 更多