2009-11-22 179 views
4

我正在開發一個客戶端服務器應用程序,其中通過服務器在兩個客戶端之間傳輸數據。客戶端服務器AES加密

數據應該加密,我想到使用AES。 我的想法是使用PBKDF2爲了從客戶端的密碼派生AES密鑰。

在這種情況下,客戶將編碼數據時,服務器會對其進行解碼,重新編碼它使用第二客戶端的密碼,並將其發送到第二客戶端。

您認爲這是實現此目的的最佳方式嗎?

有沒有辦法讓第一個客戶端編碼,第二個客戶端解碼沒有服務器干擾?

如何加密AES密鑰並將其從一個客戶端傳輸到另一個客戶端?


您如何看待以下解決方案?

  1. 客戶端和服務器使用Diffie-Hellman(此密鑰特定於每個客戶端)創建私有AES密鑰。
  2. 傳輸客戶端創建會話AES密鑰並使用私有AES密鑰對其進行編碼。
  3. 服務器解密會話密鑰併爲會話中的每個客戶端重新加密(使用每個客戶端的私鑰)。
  4. 傳輸客戶端使用會話AES密鑰加密數據並將其發送到服務器。
  5. 服務器將數據發送給所有收件人客戶端,無需任何必需的處理。

回答

2

你可以使用一個asymmetric加密算法,安全地發送AES密鑰,然後使用該鍵對稱AES加密/解密。通信可能是這樣的:

  1. 客戶端想要與加密消息的服務器交談。
  2. 客戶端生成一對公鑰/私鑰並將公鑰發送到服務器。
  3. 服務器使用公鑰來加密某個密鑰並將其發送回客戶端。
  4. 客戶端使用其私鑰解密祕密(現在都知道加密/解密其通信的祕密密鑰)。
  5. 客戶端使用AES與密鑰來加密他想發送給服務器的消息。
  6. 服務器使用密鑰解密消息。
+0

是RSA還是比派生函數更好的任何其他不對稱算法? – lebamb

3

您也可以使用Diffie–Hellman key exchange。你使用什麼編程語言?

+0

我正在寫C++ 我該如何使用Diffie-Hellman?你的意思是DH的輸出密鑰將被用作AES密鑰? 我認爲它不允許我只在客戶端執行enc/dec。 我忘記提及客戶端可能會將數據發送給多個收件人客戶端 – lebamb

+0

Diffie Hellman不夠安全,因爲它很容易受到中間主要攻擊 –

0

首先必須創建自己的協議communating程序的一部分,或者使用可用的安全協議,如HTTPS.the只有我可以告訴你的是,繁重的計算操作,例如加密/解密必須由客戶先通過然後服務器處理可靠的請求。

相關問題