Diffie-Hellman密钥交换(DHKE)是由Whitfield Diffie和Martin Hellman在1976年提出的。密钥交换方案提供了实际中密钥分配问题的解决方案,即允许双方通过不安全的信道进行交流获得一个共同密钥。许多公开和商业密码协议中都实现了这种基本的密钥协议技术,比如安全外壳(SSH),传输层安全(TLS)
DHKE的基本思想为(Z^*_p)内的指数运算(p是素数)是单向函数,并且该指数运算是可交换的:$$k = (a^x)^y = (a^y)^x mod p$$
Diffie-Hellman握手协议
- 选择一个大素数p
- 选择一个整数 (alpha in {2, 3, cdots, p - 2})
- 公开p和(alpha)
p和(alpha)两个值有时也称为域参数。如果Alice和Bob都知道握手阶段计算得到的公开参数p和(alpha),则他们就可以使用下面的密钥交换协议生成以一个联合私钥k:
Diffie-Hellman密钥交换
- Alice选择则一个(alpha = k_{pr, A} in {2, cdots, p - 2})
- Bob选择一个(b = k_{pr, B} in {2, cdots, p - 2})
- Alice计算(A = k_{pub, A} = alpha^a mod p),将(k_{pub, A})传递给Bob
- Bob计算(B = k_{pub, B} = alpha^b mod p),将(k_{pub, B})传递给Alice
- Alice计算(K_{AB} = k^{k_{pr, A}}_{k_{pub, B}} equiv B^a mod p)
- Bob计算(K_{AB} = k^{k_{pr, B}}_{k_{pub, A}} equiv A^b mod p)