Diffie-Hellman

可以將 Diffie-Hellman 密鑰交換推廣到三方或更多方嗎?

  • January 13, 2021

有誰知道如何與多於兩方進行 Diffie-Hellman 或ECDH密鑰交換?

我知道如何在兩方之間進行密鑰交換,但我需要能夠在三方或更多方之間達成密鑰協議。

標準 Diffie-Hellman 密鑰交換算法(或算法族)在帶有生成器的循環組中工作 $ g $ ,並且依賴於

$$ {y_A}^{x_B} = (g^{x_A})^{x_B} = (g^{x_B})^{x_A} = {y_B}^{x_A}, $$ 在哪裡 $ y_A $ 和 $ y_B $ 是公開傳播的,而 $ x_A $ 和 $ x_B $ 保持私密。

有了三方,我們還有

$$ ((g^{x_A})^{x_B})^{x_C} = ((g^{x_A})^{x_C})^{x_B} = ((g^{x_B})^{x_A})^{x_C} = ((g^{x_B})^{x_C})^{x_A} = ((g^{x_C})^{x_B})^{x_A} = ((g^{x_C})^{x_A})^{x_B}. $$ 由於每一方都想讓自己的密鑰私有化,因此每次取冪都需要在不同的位置進行,這意味著一些方必須將他們的第二步結果發送給其他方。

一種可能的協議如下:

  1. A、B、C 各自生成自己的私鑰 $ x_A $ , $ x_B $ , $ x_C $ .
  2. A、B、C各計算 $ y_A = g^{x_A} $ , $ y_B = g^{x_B} $ , $ y_C = g^{x_C} $ .
  3. A 發送 $ y_A $ 給B,B發送 $ y_B $ 給 C,C 發送 $ y_C $ 對 A。
  4. A 計算 $ z_{CA} = {y_C}^{x_A} $ , B 計算 $ z_{AB} = {y_A}^{x_B} $ , C 計算 $ z_{BC} = {y_B}^{x_C} $ .
  5. A 發送 $ z_{CA} $ 給B,B發送 $ z_{AB} $ 給 C,C 發送 $ z_{BC} $ 對 A。
  6. A 計算 $ k_{BCA} = {z_{BC}}^{x_A} $ , B 計算 $ k_{CAB} = {z_{CA}}^{x_B} $ , C 計算 $ k_{ABC} = {z_{AB}}^{x_C} $ .

上述相等意味著三方現在知道了一個共同的秘密 $ k_{ABC} = k_{CAB} = k_{BCA} $ .

這顯然可以推廣到三個以上的參與方,但是對於每個額外的參與者(即總共 $ n^2 $ 指數)。

所有這些都適用於所有組,在橢圓曲線組中也是如此(這通常被寫為點乘而不是求冪)。

在實踐中,與某個“集線器”節點交換密鑰可能更容易,然後它會創建一個公共秘密並將其發送給每個參與者,就像丹尼斯在他的回答中提出的那樣。

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