PromleeBlog
网站地图
关于博客
菜单
学习
Security Theory
Public Enc
Diffie-Hellman密钥交换
Diffie-Hellman密钥交换
📅
密钥交换(Key Exchange)
Diffie-Hellman密钥交换(Diffie-Hellman Key Exchange)
Diffie-Hellman密钥交换示例
Diffie-Hellman密钥交换的安全性(Security of Diffie-Hellman Key Exchange)
中间人攻击场景(Man-in-the-Middle Attack Scenario)
中间人攻击的解释与防范(Man-in-the-Middle Attack Description & Prevention)
攻击过程
防范中间人攻击
密钥交换(Key Exchange)
🔗
安全交换通信所需共同密钥的方法。
Alice和Bob通过
公开信道
交换数据,生成共同的秘密密钥。
Alice与Bob之外的第三方,即使截获公开信道上传输的数据,也无法得知密钥。
Diffie-Hellman密钥交换(Diffie-Hellman Key Exchange)
🔗
一种公钥密码方法,用于安全交换秘密密钥。
预先共享参数:素数
p
p
p
,以及具有生成元
g
g
g
的有限群
Z
p
∗
\mathbb{Z}_p^*
Z
p
∗
。
Alice与Bob的操作如下。
Alice。
生成秘密值
a
a
a
。
计算
A
=
g
a
(
m
o
d
p
)
A = g^a \pmod{p}
A
=
g
a
(
mod
p
)
,发送给Bob。
接收
B
B
B
。
计算
K
A
B
=
B
a
(
m
o
d
p
)
K_{AB} = B^a \pmod{p}
K
A
B
=
B
a
(
mod
p
)
。
Bob。
生成秘密值
a
a
a
。
计算
B
=
g
b
(
m
o
d
p
)
B = g^b \pmod{p}
B
=
g
b
(
mod
p
)
,发送给Alice。
将
B
B
B
发送给Alice。
接收
A
A
A
。
计算
K
B
A
=
A
b
(
m
o
d
p
)
K_{BA} = A^b \pmod{p}
K
B
A
=
A
b
(
mod
p
)
。
K
A
B
=
B
a
=
(
g
b
)
a
=
g
a
b
=
(
g
a
)
b
=
A
b
=
K
B
A
K_{AB} = B^a = (g^b)^a = g^{ab} = (g^a)^b = A^b = K_{BA}
K
A
B
=
B
a
=
(
g
b
)
a
=
g
ab
=
(
g
a
)
b
=
A
b
=
K
B
A
Diffie-Hellman密钥交换示例
🔗
p
=
31
p = 31
p
=
31
,
g
=
3
g = 3
g
=
3
。
Alice。
生成秘密值
a
=
6
a = 6
a
=
6
。
计算
A
=
3
6
(
m
o
d
31
)
=
729
(
m
o
d
31
)
=
16
A = 3^6 \pmod{31} = 729 \pmod{31} = 16
A
=
3
6
(
mod
31
)
=
729
(
mod
31
)
=
16
,发送给Bob。
接收
B
=
20
B = 20
B
=
20
,计算
K
A
B
=
20
6
(
m
o
d
31
)
=
64000000
(
m
o
d
31
)
=
4
K_{AB} = 20^6 \pmod{31} = 64000000 \pmod{31} = 4
K
A
B
=
2
0
6
(
mod
31
)
=
64000000
(
mod
31
)
=
4
。
Bob。
生成秘密值
b
=
8
b = 8
b
=
8
。
计算
B
=
3
8
(
m
o
d
31
)
=
4
,
294
,
967
,
296
(
m
o
d
31
)
=
4
B = 3^8 \pmod{31} = 4,294,967,296 \pmod{31} = 4
B
=
3
8
(
mod
31
)
=
4
,
294
,
967
,
296
(
mod
31
)
=
4
,发送给Alice。
接收
A
=
16
A = 16
A
=
16
,计算
K
B
A
=
16
8
(
m
o
d
31
)
=
4
,
294
,
967
,
296
(
m
o
d
31
)
=
4
K_{BA} = 16^8 \pmod{31} = 4,294,967,296 \pmod{31} = 4
K
B
A
=
1
6
8
(
mod
31
)
=
4
,
294
,
967
,
296
(
mod
31
)
=
4
。
密钥交换结果:
K
A
B
=
4
K_{AB} = 4
K
A
B
=
4
K
B
A
=
4
K_{BA} = 4
K
B
A
=
4
Diffie-Hellman密钥交换的安全性(Security of Diffie-Hellman Key Exchange)
🔗
中间人攻击。
Eve想知道Alice与Bob之间的共享密钥,即
K
A
B
=
K
B
A
K_{AB} = K_{BA}
K
A
B
=
K
B
A
。
Eve拥有
(
p
,
g
)
,
(
A
=
g
a
m
o
d
p
)
,
(
B
=
g
b
m
o
d
p
)
(p, g), (A = g^a \mod p), (B = g^b \mod p)
(
p
,
g
)
,
(
A
=
g
a
mod
p
)
,
(
B
=
g
b
mod
p
)
。
如果Eve知道Alice的秘密值
a
a
a
或Bob的秘密值
b
b
b
。
K
A
B
=
B
a
=
(
g
b
)
a
=
g
a
b
=
(
g
a
)
b
=
A
b
=
K
B
A
K_{AB} = B^a = (g^b)^a = g^{ab} = (g^a)^b = A^b = K_{BA}
K
A
B
=
B
a
=
(
g
b
)
a
=
g
ab
=
(
g
a
)
b
=
A
b
=
K
B
A
根据上述等式,Eve就可以计算
K
A
B
K_{AB}
K
A
B
。
由于DLP(Diffie-Hellman Problem)很困难,Eve无法计算
a
a
a
或
b
b
b
。
👨💻
计算性Diffie-Hellman问题(CDH,Computational Diffie-Hellman)
给定
(
g
,
g
a
,
g
b
)
(g, g^a, g^b)
(
g
,
g
a
,
g
b
)
,计算
g
a
b
g^{ab}
g
ab
。
非正式地说,当底层群的阶为素数时,CDH问题与DLP的难度相当。
中间人攻击场景(Man-in-the-Middle Attack Scenario)
🔗
Alice与Bob执行密钥交换。
Eve位于Alice与Bob之间。
向Alice发送
g
e
g^e
g
e
。
向Bob发送
g
f
g^f
g
f
。
Alice与Bob计算
g
e
f
g^{ef}
g
e
f
。
Eve计算
g
e
f
g^{ef}
g
e
f
,从而截获双方通信。
中间人攻击的解释与防范(Man-in-the-Middle Attack Description & Prevention)
🔗
攻击过程
🔗
Eve生成秘密值
e
e
e
,计算
E
=
g
e
m
o
d
p
E = g^e \mod p
E
=
g
e
mod
p
。
Alice与Bob分别向对方发送
A
A
A
和
B
B
B
。
Eve截获它们,并向双方发送
E
E
E
。
Alice与Bob收到
E
E
E
后,分别计算:
K
A
E
=
E
a
=
g
e
a
m
o
d
p
K_{AE} = E^a = g^{ea} \mod p
K
A
E
=
E
a
=
g
e
a
mod
p
、
K
B
E
=
E
b
=
g
e
b
m
o
d
p
K_{BE} = E^b = g^{eb} \mod p
K
BE
=
E
b
=
g
e
b
mod
p
。
之后,Alice向Bob发送
C
=
Enc
(
K
A
E
,
M
)
C = \text{Enc}(K_{AE}, M)
C
=
Enc
(
K
A
E
,
M
)
时,Bob无法解密。
Eve则可以使用
K
E
A
=
A
e
=
(
g
a
)
e
m
o
d
p
K_{EA} = A^e = (g^a)^e \mod p
K
E
A
=
A
e
=
(
g
a
)
e
mod
p
,获得
M
M
M
。
防范中间人攻击
🔗
使用证书。
例如,Alice与Bob发送公钥时附带签名,让双方能够验证对方公钥。
中间人攻击总结
🔗
Diffie-Hellman密钥交换容易受到中间人攻击。
Eve可以截获Alice与Bob之间的通信。
使用证书可以防范中间人攻击。
Diffie-Hellman密钥交换 | PromleeBlog