# Introduction
Diffie-Hellman 演算法是用來讓兩位使用者能夠安全地交換金鑰,以便之後在通訊中可以使用該金鑰作為對稱式加密之用。而 Diffie-Hellman 演算法的安全性設計是依賴於計算離散對數(discrete logarithm)的困難性。
# Diffie-Hellman 演算法
質數 q 與原根 p 是兩個公開的整數,我們假設 Alice 和 Bob 希望共享一把金鑰。
# Alice
- Alice 選擇一個隨機的整數 XA 且 XA<q
- 計算 YA=pXAmodq
- XA 是私鑰、YA 是公鑰
- 將自己的公鑰 YA 傳送給 Bob
- 收到 Bob 的公鑰 YB
- 計算金鑰 K=(YB)XAmodq
# Bob
- Bob 選擇一個隨機的整數 XB 且 XB<q
- 計算 YB=pXBmodq
- XB 是私鑰、YB 是公鑰
- 將自己的公鑰 YB 傳送給 Alice
- 收到 Alice 的公鑰 YA
- 計算金鑰 K=(YA)XBmodq
# 範例
令質數 q=11 與原根 p=7 是兩個公開的整數。為了方便說明,這裡選用的質數 q 很小,實際應用場景中會使用超大質數。
# Alice
- Alice 選擇一個隨機的整數 XA=4, XA<q
- 計算 YA=pXAmodq=74mod11=3
- 私鑰 XA=4
公鑰 YA=3
- 將自己的公鑰 YA=3 傳送給 Bob
- 收到 Bob 的公鑰 YB=2
- 計算金鑰 K=(YB)XAmodq=24mod11=5
# Bob
- Bob 選擇一個隨機的整數 XB=3, XB<q
- 計算 YB=pXBmodq=73mod11=2
- 私鑰 XB=3
公鑰 YB=2
- 將自己的公鑰 YB=2 傳送給 Alice
- 收到 Alice 的公鑰 YA=3
- 計算金鑰 K=(YA)XBmodq=33mod11=5
透過上面 Diffie-Hellman 演算法後可得雙方共享的金鑰 K=5