Diffie-Hellman
可以將 Diffie-Hellman 密鑰交換推廣到三方或更多方嗎?
有誰知道如何與多於兩方進行 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}. $$ 由於每一方都想讓自己的密鑰私有化,因此每次取冪都需要在不同的位置進行,這意味著一些方必須將他們的第二步結果發送給其他方。
一種可能的協議如下:
- A、B、C 各自生成自己的私鑰 $ x_A $ , $ x_B $ , $ x_C $ .
- A、B、C各計算 $ y_A = g^{x_A} $ , $ y_B = g^{x_B} $ , $ y_C = g^{x_C} $ .
- A 發送 $ y_A $ 給B,B發送 $ y_B $ 給 C,C 發送 $ y_C $ 對 A。
- A 計算 $ z_{CA} = {y_C}^{x_A} $ , B 計算 $ z_{AB} = {y_A}^{x_B} $ , C 計算 $ z_{BC} = {y_B}^{x_C} $ .
- A 發送 $ z_{CA} $ 給B,B發送 $ z_{AB} $ 給 C,C 發送 $ z_{BC} $ 對 A。
- 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 $ 指數)。
所有這些都適用於所有組,在橢圓曲線組中也是如此(這通常被寫為點乘而不是求冪)。
在實踐中,與某個“集線器”節點交換密鑰可能更容易,然後它會創建一個公共秘密並將其發送給每個參與者,就像丹尼斯在他的回答中提出的那樣。