2013-02-16 176 views
1

假設我們有一個帶有私鑰和公鑰的服務器,後者可用於所有客戶端,並且我們有一個客戶端沒有任何非對稱密鑰擁有。我們希望建立服務器和客戶端之間的安全通信,客戶端必須確保服務器的真實性。這是一個很常見的情況。祕密密鑰分配與Diffie-Hellman的公鑰加密

現在,我的理解是,私鑰/公鑰對通常只用於確保真實性(我們的客戶端可以使用服務器的公鑰來驗證服務器的真實性)。爲了確保服務器和客戶端之間的雙向通信,使用Diffie-Hellman密鑰交換,然後通信基於共享密鑰。

我不禁想知道爲什麼Diffie-Hellman會在這種情況下使用。從我所瞭解的公鑰加密技術可以用來確保真實性並在客戶端和服務器之間共享密鑰。服務器可以向客戶端發送使用其私鑰編碼的消息,客戶端可以使用服務器的公鑰對其進行解碼以確認其身份。此外,客戶端可以使用服務器的公鑰將新的隨機密鑰發送給服務器。只有服務器會知道這個祕密密鑰,因爲只有服務器知道他的私鑰。我知道一些人建議不要使用公共密鑰來編碼和解碼,但沒有人會說爲什麼。

顯然,如果客戶端和服務器都有自己的公鑰/私鑰,他們甚至不需要共享任何密鑰,但這不是典型的情況。

所以......總結一下。爲什麼使用Diffie-Hellman而不是使用公鑰密碼體制的祕密密鑰分配?有什麼好處?

+3

Diffe-Hellman是一種公鑰密碼。所以你的前提是有缺陷的。 – CodesInChaos 2013-02-16 16:52:24

+1

看[「爲什麼我們需要Diffie Hellman?」對crpyto.SE](http://crypto.stackexchange.com/questions/3163/why-do-we-need-diffie-hellman) – CodesInChaos 2013-02-16 16:54:23

回答

3

我不禁止奇怪,爲什麼在這樣的 情況下使用迪菲赫爾曼。從我所瞭解的公開密鑰密碼術可能是 用於確保真實性和共享密鑰在 客戶端和服務器之間。

Diffie-Hellman和RSA密鑰交換(其中RSA用於加密)都可以與SSL/TLS一起使用。這取決於密碼套件。

服務器可以發送到客戶端用自己的私鑰和 客戶端可以使用服務器的公鑰來確認其身份 解碼它編碼的消息。

這確實是使用RSA或DSS認證的DH密鑰交換時發生的情況:服務器使用其私鑰簽署其DH參數,客戶端可以驗證簽名。

此外,客戶端可以使用服務器的公鑰將新的 隨機密鑰發送給服務器。只有服務器知道這個祕密 密鑰,因爲只有服務器知道他的私鑰。

這或多或少是與RSA密鑰交換時發生的:客戶端加密預主密鑰,只有服務器可以解密。

你可以在Authentication and Key Exchange section of the TLS specification(不考慮匿名密鑰交換)中閱讀所有這些內容。 cipher suites(見附錄A.5和C)的選擇取決於客戶端和服務器的配置方式,這將決定使用的密鑰交換機制。

就我所知,固定的DH交換是相當罕見的。 Ephemeral DH(DHE密碼套件)更爲常見。它可以提供「完美前向保密」:即使攻擊者獲得了私鑰,他們也無法破譯現有的流量,因爲他們也需要具有DH參數,這對所有連接來說都不相同。但是,這在性能方面有成本。您可以在this article中找到關於此主題的更多信息。

+0

你已經清除了我所有的疑惑。前向保密是我沒有想到的事情!謝謝。 – Quarx 2013-02-16 17:01:12

0

。爲什麼使用Diffie-Hellman而不是使用公鑰密碼體制的祕密密鑰分配?有什麼好處?回答:假設黑客一直在跟蹤客戶端和服務器之間交換的所有消息並保存消息,但他不能解密這些消息,因爲他不知道共享對稱密鑰。如果服務器的私鑰被泄露,那麼在Diffie-hellman黑客的情況下仍然不能解密消息,因爲Diffie Hellman算法從不在線上發送密鑰,而是客戶端和服務器在不共享的情況下在同一個密鑰上同意,這是一種密鑰協商算法分享。攻擊困難Hellman在中間的人應該是活的,應該知道用於認證的服務器私鑰。但在我們的案例中,黑客已經過了困難的Hellman消息,所以他不能在中間人攻擊中使用人。同時服務器更改它的私鑰,所以沒有損害。但是如果我們使用RSA密鑰共享密鑰,那麼服務器的私鑰黑客就可以獲得所有會話對稱密鑰,並且可以解密所有過去的消息。