2011-02-09 314 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這樣的非對稱密鑰算法。兩個密鑰都需要從明文轉到明文;一個會加密,另一個會解密。您不能使用加密的相同密鑰進行解密,反之亦然。因此,客戶端無法獲得密文,將其解密,然後使用它提供的相同密文的任何信息。

然而,非對稱密鑰算法不區分加密和解密密鑰,直到用於加密。他們只需要使用另一個密鑰來解密由第一個加密的消息。因此,理論上,您的客戶端可以使用其「解密」密鑰對消息進行「重新加密」,該密鑰可以由服務器使用其「加密密鑰」進行解密。我不知道一個會禁止這個的算法;您只需將其構建到通信庫中,方法是省略任何解密密鑰的解密密鑰。