我正在考虑使用DSS向最终用户分发软件许可证。
基本上,软件许可证是一个简单的文本文件/ xml文件,包含软件模块和公司信息。该文件将使用私钥进行签名。
软件许可证和数字签名将部署在最终用户的计算机上。应用程序启动时,它将使用已知的公钥验证软件许可证是否有效。如果有效,它将读取软件许可证中的信息并打开许可使用的功能。
然而,这是该协议的弱点。软件许可证是可读的文本文件。任何人都可以生成公钥/私钥对,签署软件许可证并使用虚假公钥修补软件。它将通过验证过程并可能创建自己的软件许可证。
有什么好方法可以防止假数字签名吗?
答案 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)
有两种方法可以防止使用新的密钥对进行签名。
用DLL嵌入公钥。这样可以隐藏公钥。
使用公用密钥Pinning
技术。这涉及从签名机构获得证书,这对个人来说很困难。这整个事情属于PKI
(公共密钥基础结构)之下。
正如其他人指出的那样,这并非万无一失,只能解决您所问的问题。