2011-02-09 329 views
0

有没有一种方法可以让我的服务器提供一个可以在客户端上解密的加密字符串,但不会在客户端上重新加密?我知道这似乎有些倒退......这就是我的需要。从服务器加密,在客户端解密(但不在客户端加密)?

我有一个软件密钥需要在我们的远程服务器上激活。服务器需要向客户提供一些说明“您处于活动状态”的信息,并包含信息,例如有效日期,许可证等等。但是,我需要防止它被轻易地篡改以增加许可证计数或日期(例如,使用在解编译的二进制文件或W/e中找到的密钥用新的日期重新加密该值)。

这样的事情可能使用公钥/私钥吗?或者也许哈希?

编辑

或者,可以在服务器提供的哈希,客户端可以验证确实是从服务器不给客户以欺骗或产生它自己的一个哈希的能力吗?

在此先感谢。

回答

1

公钥/私钥加密应该做你所需要的。哈希是单向函数;一个好的散列函数将使得检索原始值变得不可能。

在这种情况下,服务器具有公钥/私钥对,客户端具有公钥/私钥对。服务器的公钥被嵌入到客户端中,服务器也拥有客户端的公钥。服务器现在可以使用它的私钥和客户端的公钥来加密你的有效载荷。当客户想要解密有效负载时,它使用它的私钥和服务器的公钥。客户端不能在不访问服务器私钥的情况下重新加密数据。

http://en.wikipedia.org/wiki/Public-key_cryptography - 对于这一切是如何工作的

http://msdn.microsoft.com/en-us/library/e970bs09.aspx的解释 - 作为一个起点.NET类让用户轻松

+0

恩,我想你的意思是,为了加密单个消息,发送者用它自己的私钥加密,然后再用接收者的公钥加密。这是可能的,但在实际使用中是不正确的;要以单向方式加密消息,发送方只用接收方的公钥对其加密。接收者可以使用其私钥对其解密。两台互相交谈的计算机将生成一个密钥对,将公钥发送给另一台计算机,并发送使用另一台公钥加密的消息。 – KeithS 2011-02-09 21:49:47

1

当然它。使用像RSA这样的非对称密钥算法。两个密钥都需要从明文转到明文;一个会加密,另一个会解密。您不能使用加密的相同密钥进行解密,反之亦然。因此,客户端无法获得密文,将其解密,然后使用它提供的相同密文的任何信息。

然而,非对称密钥算法不区分加密和解密密钥,直到用于加密。他们只需要使用另一个密钥来解密由第一个加密的消息。因此,理论上,您的客户端可以使用其“解密”密钥对消息进行“重新加密”,该密钥可以由服务器使用其“加密密钥”进行解密。我不知道一个会禁止这个的算法;您只需将其构建到通信库中,方法是省略任何解密密钥的解密密钥。