-
-
[原创]Crypto-Diffie-Hellman(DH)密钥交换
-
发表于: 2021-3-18 10:29 16303
-
本文主要内容:简要介绍Diffie-Hellman密钥交换基本原理,所存在的中间人攻击,以及UCTF2021比赛中关于DH的Small p Problems暴力破解题
Diffie-Hellman密钥交换是一种在公共通道上安全交换加密密钥的方法,该公共通道相较传统意义两方加密通信需先通过物理安全通道有较大不同,也即此通道运行通过不安全通道共同建立共享密钥。
DH可广泛应用于保护各种Internet服务,比如DH-RSA算法组合应用于TLS协议中。
采用wiki上一张图形象解释:
如果第三方监听到,交换信息,由于不知道各自的秘密颜色,无法获取共享密钥
密码学解释
选择素数p及其本原根g,是为了确保共享密钥在1到p-1之间
DH密钥交换的安全性建立在以下事实:
当p为600位以上的质数时,不知私钥a和b时是很难解出a的。
由于DH密钥交换本身不提供通信方的身份验证,因此容易受到中间人攻击。
也即中间人分别和Alice和Bob构建共享密钥K1和K2
更多信息可参考:DH密钥交换
示例通过一道CTF题,来反映在DH密钥交换中,p选择素数较小,使用暴力破解便可获取共享密钥的过程
My buddies Whitfield and Martin were trying to share a secret key between themselves, and I was able to eavesdrop on their conversation. I bet I could probably figure out their shared secret with a little math...
Note: submit either the shared secret or the shared secret wrapped in utflag{}
根据题目,无法得知各自私钥
所以,当p选取较小时,可以使用暴力破解方式得当各自私钥
p
=
69691
g
=
1001
A
=
17016
B
=
47643
p
=
69691
g
=
1001
A
=
17016
B
=
47643
p
=
69691
g
=
1001
A
=
17016
B
=
47643
# 暴力破解a或者b ,范围从1-p-1
for
i
in
range
(
1
,p):
if
pow
(g,i,p)
=
=
A:
# 若满足g^i mod p = A,则说明i为A的私钥a
print
(
"a:"
,i,
"\nK:"
,
pow
(B,i,p))
break
p
=
69691
g
=
1001
A
=
17016
B
=
47643
# 暴力破解a或者b ,范围从1-p-1