Public-Key

為什麼在公鑰密碼學的背景下考慮 Diffie-Hellman?

  • May 27, 2018

在所有教科書中,我使用的 Diffie-Hellman 密鑰交換都在“公鑰加密”下。

據我所知,這是一種交換要與對稱密碼算法一起使用的密鑰的方法,因此它非常自然地屬於對稱密鑰密碼學領域。

那麼 DH 在對稱和公鑰算法之間的分歧中處於什麼位置呢?

Diffie-Hellman 密鑰交換是一種公鑰技術。但是,它(本身)不是加密算法(或簽名算法)。

這是基本函式:(這裡的所有計算都發生在一個足夠大的離散組中,其中 Diffie-Hellman 問題被認為是困難的,通常是乘法組以大素數為模(對於經典 DH)或橢圓曲線組(對於 ECDH ).)

  1. 每一方選擇一個私鑰 $ x $ 或者 $ y $
  2. 每一方計算對應的公鑰 $ g^x $ 或者 $ g^y $ .
  3. 每一方發送公鑰 $ g^x $ 或者 $ g^y $ 給對方。
  4. 每一方使用收到的公鑰和自己的私鑰一起計算新的共享密鑰 $ (g^y)^x = (g^x)^y $ .

此密鑰交換的結果是共享密鑰,然後通常與密鑰推導功能(使用雙方已知的其他輸入,例如會話 ID)一起使用,以推導對稱加密方案的一組密鑰 和 MAC 密鑰,如果我們不使用具有集成身份驗證的加密方案。如果我們正在建構雙向通道(如在 TLS/SSL 或 SSH 中),我們會為兩個通信方向派生不同的密鑰。

這可能是造成混淆的原因:它是一種用於協商對稱密鑰的非對稱技術。但同樣適用於大多數其他非對稱技術,如簽名或加密算法:核心是非對稱的,但隨後我們使用對稱算法來完成大部分工作。例如,對於大多數非對稱加密算法,我們通常只加密實際消息的對稱密鑰,對於大多數簽名算法,我們首先對消息進行散列,然後對散列進行非對稱簽名。

價值 $ g^y $ 或者 $ g^x $ 被命名為public keys,因為它們可以明文傳輸,所以任何監聽連接的人都知道。價值 $ x $ 和 $ y $ 永遠不要離開選擇者的電腦,讓他們保持私密。 $ (x, g^x) $ 和 $ (y, g^y) $ 是這裡的私鑰-公鑰對。順便說一下,這些密鑰與 DSA 或 ElGamal 中的密鑰類型相同。

一個人可能有長期的密鑰對(然後公鑰甚至可能已經在某個地址簿中,保存傳輸,或者用一些證書籤名),但更常見的是這些密鑰對是為每個連接動態創建的。

當將 Diffie-Hellman 密鑰交換(帶有接收方的長期公鑰)與對稱加密方案結合起來時,我們得到了一個很好的公鑰加密方案——實際上是最早提出的方案之一。它是這樣工作的:

  1. 接收者有私鑰 $ x $ 和相應的公鑰 $ g^x $ .
  2. 發送者以某種方式安全地獲得了公鑰 $ g^x $ .
  3. 發件人選擇了一個臨時私鑰 $ y $ 併計算出對應的公鑰 $ g^y $ .
  4. 發件人計算 $ (g^x)^y $ 並從中派生出一個對稱密鑰 $ K = f((g^x)^y) $ .
  5. 發件人加密他的消息: $ C = E_K(P) $ .
  6. 發件人發送 $ (g^y, C) $ 到接收器。
  7. 接收器得到 $ (g^y, C) $ .
  8. 接收方計算 $ (g^y)^x $ 並由此衍生 $ K = f((g^y)^x) $ . 這是一樣的 $ K $ 像之前一樣。
  9. 接收方解密消息: $ P = D_K(C) $ .

這是一種非對稱加密方案——要加密,發送者只需要知道 $ g^x $ , 而用於解密 $ x $ 本身是需要的。

引用自:https://crypto.stackexchange.com/questions/6307