19

我目前正在开发的共享软件注册系统将公共 DSA 密钥嵌入到可执行文件本身中,而私钥驻留在服务器上。(为了讨论,我们假设服务器是 100% 安全的,任何人都无法获得私钥。)

每当购买程序时,服务器都会通过使用私钥签署用户名来为用户生成许可证。然后将该许可证通过电子邮件发送给用户。一旦用户手动将他们的姓名和许可证输入到共享软件应用程序中,应用程序中嵌入的公钥就会验证它是有效还是无效的许可证。

但是,对于具有正确“专业知识”的坚定的人来说,反汇编可执行文件并检索公钥将是相当微不足道的。

我的问题是,他们能用它做什么?公钥本身是完全无害的吗?公钥是否足以对密钥生成器进行逆向工程?

好奇的人想知道。提前致谢!

4

8 回答 8

24

公钥应该让他们没有任何用处。但是,如果检查很容易找到,他们可能能够简单地绕过它并修补始终成功的测试,而无需费心根据公钥验证许可证。

于 2010-10-19T20:39:26.683 回答
7

公钥本身可以让他们解密服务器发送的任何加密信息。就是这样。从公钥到私钥非常困难;这就是公钥密码学的工作原理。(我所说的“特别”是指它旨在抵抗资金充足的政府努力;如果它阻止 NSA 破解你,它肯定足以阻止 Joe Blow。)

请注意,它对 DRM 没有帮助,这听起来有点像您正在尝试做的事情。DRM 只是被设计破坏了。如果攻击者在他本地的设备中拥有信息和解锁它的密钥,那么游戏就已经结束了。如果您将密钥提供给攻击者,它也可能是公开的,因为他肯定不会愿意保密……</p>

于 2010-10-19T20:41:58.177 回答
4

假设正在使用尚未破解的加密方法,则无法使用公钥来确定私钥。它是真正公开的;任何人都知道。

于 2010-10-19T20:40:02.083 回答
2

公钥无处不在——登录表单、银行交易的安全性、客户端身份验证等。所以简短的回答是你不应该担心,因为许多其他更聪明的人已经研究了这个问题并接受了端点的公钥。

人们可以从您的公钥中看出什么?他们显然会知道密钥名称和密钥长度。我假设密钥是证书的一部分,其中还可能包含有关您的公司和网站 URL 的一些详细信息。

我对你的问题是:

1)你为什么担心可执行文件中的公钥?任何半正派的破解者只会更改您的可执行文件以完全绕过公钥检查。当您向客户端提供可以修改的二进制文件时,加密强度高这一事实毫无意义。

2)你是否意识到你可能会让自己陷入困境?使用公钥加密来保护二进制文件本身并没有错,但是随着系统的发展,您最终可能会遇到问题。诸如过期密钥、密钥翻转和密钥发行(我相信这是您正在开发出售的工具)之类的事情可能会成为一个主要的痛苦。然而,您仍然会面临这样一个现实,即您面临的更大挑战是阻止破解者重新路由二进制文件以完全避免您的安全检查。

于 2010-10-19T23:34:05.090 回答
1

仅仅拥有公钥是不够的信息来做任何有用的事情。

唯一可以做的就是有人可以使用只能用私钥解密的公钥来加密消息。但如果私钥只在服务器上,这将无济于事。

任何其他攻击都需要尝试计算私钥,而拥有公钥根本不会加速。

于 2010-10-19T20:41:01.140 回答
1

在非对称密码学中,将您的公钥提供给攻击者是安全的。但是,此值以及私钥产生的签名或密文可以在Trivial Attack中使用,以获取相应的私钥。

于 2010-10-19T20:45:12.113 回答
0

关键是这种加密旨在保护消息的内容并验证发件人的真实性,在这种情况下,用户清楚地知道,即名称和供应商等。更好的是保护代码的一部分这种加密使得关键的代码位在使用正确的密钥之前一直是乱码。

但是,一旦使用了密钥,用户就可以解密并复制软件。完全受保护的软件完全无法使用。虽然不相关,但这是一本关于保护事物的有趣读物。

于 2010-10-19T21:25:05.667 回答
0

我不同意公钥没有用。我生成自己的公钥和私钥对,让我们假设我在可执行文件中找到了公钥的位。我将公钥更改为我的公钥。现在我可以用我的私钥签署任何东西,程序会接受它。

于 2015-10-27T15:25:31.743 回答