如何保护软件许可证不受伪造数字签名的影响



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

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

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

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

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

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

如果有人真的决心破解你的保护,那么他们会这么做。然而,这个计划将阻止99.9%的人试图窃取你的软件。

不可能完全保护您的软件免受盗版。不管怎样,你都必须以某种方式分发你的公钥,然后盗版者可以用自己的公钥进行交换。然而,你可以试着让他们更困难。例如,通过将公钥作为字符串嵌入到可执行文件中。你甚至可以对它进行一些基本的加密,使其更难找到。

但是,如果你的软件值得破解,它将被破解。

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

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

同样,你可以防止有人完全禁用数字签名检查。你的问题就像问你如何阻止小偷从你二楼最左边的窗户进来。这不是他要穿过的窗户,无论如何,你把他挡在外面,就像阻止他从你的其他窗户进来一样。

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

  1. 用DLL嵌入公钥。通过这种方式隐藏公钥。

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

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

正如其他人所指出的,这不是万无一失的,只是解决了你提出的问题。

最新更新