# 迪菲-赫尔曼密钥交换

（重定向自Diffie-Hellman密钥交换

• 迪菲－赫尔曼密钥协商
• 迪菲－赫尔曼密钥创建
• 指数密钥交换
• 迪菲－赫尔曼协议

## 该协议的历史

2002年，马丁·赫尔曼写到：

The system...has since become known as Diffie–Hellman key exchange. While that system was first described in a paper by Diffie and me, it is a public key distribution system, a concept developed by Merkle, and hence should be called 'Diffie–Hellman–Merkle key exchange' if names are to be associated with it. I hope this small pulpit might help in that endeavor to recognize Merkle's equal contribution to the invention of public key cryptography. [1]

## 描述

Diffie–Hellman 密钥交换

p, g
a
ga mod p
(gb mod p)a mod p
 ${\displaystyle \rightarrow }$ ${\displaystyle \leftarrow }$ =

p, g
b
gb mod p
(ga mod p)b mod p
1. 爱丽丝与鲍伯协定使用 p=23以及base g=5.
2. 爱丽丝选择一个秘密整数a=6，计算A = ga mod p并发送给鲍伯。
• A = 56 mod 23 = 8.
3. 鲍伯选择一个秘密整数b=15，计算B = gb mod p并发送给爱丽丝。
• B = 515 mod 23 = 19.
4. 爱丽丝计算s = B a mod p
• 196 mod 23 = 2.
5. 鲍伯计算s = A b mod p
• 815 mod 23 = 2.

1. 爱丽丝和鲍伯协商一个有限循环群 G 和它的一个生成元 g。 （这通常在协议开始很久以前就已经规定好； g是公开的，并可以被所有的攻击者看到。）
2. 爱丽丝选择一个随机自然数 a 并且将${\displaystyle g^{a}{\bmod {p}}}$发送给鲍伯。
3. 鲍伯选择一个随机自然数 b 并且将${\displaystyle g^{b}{\bmod {p}}}$发送给爱丽丝。
4. 爱丽丝 计算${\displaystyle \left(g^{b}\right)^{a}{\bmod {p}}}$
5. 鲍伯 计算${\displaystyle \left(g^{a}\right)^{b}{\bmod {p}}}$

### 图示

• Let s = 共享密钥。 s = 2
• Let a = 爱丽丝的私钥。如 a = 6
• Let A = 爱丽丝的公钥。如 A = ga mod p = 8
• Let b = 鲍伯的私钥。如 b = 15
• Let B = 鲍伯的公钥。如 B = gb mod p = 19
• Let g = 公共原根。如 g=5
• Let p = 公共质数. 如 p = 23

p = 23
base g = 5
a = 6
b = 15
A = 56 mod 23 = 8
B = 5b mod 23 = 19
s = 196 mod 23 = 2
s = 8b mod 23 = 2
s = 196 mod 23 = 8b mod 23
s = 2

p = 23
base g = 5
a = 6
b = 15
B = 515 mod 23 = 19
A = 5a mod 23 = 8
s = 815 mod 23 = 2
s = 19a mod 23 = 2
s = 815 mod 23 = 19a mod 23
s = 2

p = 23
base g = 5
a = 6
b = 15
A = 5a mod 23 = 8
B = 5b mod 23 = 19
s = 19a mod 23
s = 8b mod 23
s = 19a mod 23 = 8b mod 23
s = 2

## 安全性

G应当是一个素数，或者它有一个足够大的素因子以防止使用Pohlig–Hellman算法来得到a或者b。由于这个原因，一个索菲热尔曼素数 q可以用来计算素数p=2q+1，这样的p称为安全素数，因为使用它之后G的阶只能被2和q整除。g有时被选择成Gq阶子群的生成元，而不是G本身的生成元，这样ga勒让德符号将不会显示出a的低位。