如何保护软件许可证免受假数字签名?

时间:2012-01-27 15:03:18

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

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

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

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

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

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

4 个答案:

答案 0 :(得分:3)

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

如果有人真的决心破坏你的保护,那么他们就会这样做。但是,这个计划将阻止99.9%的人试图剽窃你的软件。

答案 1 :(得分:2)

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

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

答案 2 :(得分:1)

  

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

     

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

同样可以防止有人完全禁用数字签名检查。你的问题就像问你如何防止小偷进入你的第二个故事最左边的窗口。这不是他要经历的窗口,无论如何,你让他不能像你一样阻止他进入你的窗户。

答案 3 :(得分:0)

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

  1. 用DLL嵌入公钥。这样可以隐藏公钥。

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

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

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