D i f f i e − H e l l m a n 算 法 同 R S A 都 属 于 公 钥 加 密 算 法 , 但 是 二 者 得 差 异 还 是 很 大 的 。 Diffie-Hellman算法同RSA都属于公钥加密算法,但是二者得差异还是很大的。 Diffie−Hellman算法同RSA都属于公钥加密算法,但是二者得差异还是很大的。
概述
该
算
法
基
于
的
数
学
难
题
是
“
有
限
域
上
计
算
离
散
对
象
”
的
问
题
。
该算法基于的数学难题是“有限域上计算离散对象”的问题。
该算法基于的数学难题是“有限域上计算离散对象”的问题。
该
算
法
不
是
用
来
加
密
的
,
也
不
可
以
用
来
加
密
。
其
仅
用
于
交
换
对
称
密
钥
(
如
A
E
S
和
D
E
S
的
初
始
密
钥
)
该算法不是用来加密的,也不可以用来加密。其仅用于交换对称密钥(如AES和DES的初始密钥)
该算法不是用来加密的,也不可以用来加密。其仅用于交换对称密钥(如AES和DES的初始密钥)
算法
- 双方/多方选择大素数p,以及p的一个原根a
p 和 a 是 双 方 / 多 方 之 间 的 秘 密 。 ( 但 是 攻 击 者 可 以 得 到 ) \;\\\;p和a是双方/多方之间的秘密。(但是攻击者可以得到) p和a是双方/多方之间的秘密。(但是攻击者可以得到)
a i m o d p ( 1 < a < p , 1 < i < p ) 存 在 a 对 于 任 何 i 模 p 得 到 的 值 都 不 相 同 , 这 样 a 就 是 p 的 原 根 a^i\;mod\;p\;(1<a<p,1<i<p)\\存在a对于任何i\;模p得到的值都不相同,这样a就是p的原根 aimodp(1<a<p,1<i<p)存在a对于任何i模p得到的值都不相同,这样a就是p的原根
- 用户A选择一个随机数 X a < p X_a<p Xa<p,计算: Y a = a X a m o d p 。 Y_a=a^{X_a}mod\;p。 Ya=aXamodp。
- 用户B选择一个随机数 X b < p X_b<p Xb<p,计算: Y b = a X b m o d p 。 Y_b=a^{X_b}mod\;p。 Yb=aXbmodp。
- 将Y作为公钥交换给对方,X作为私钥仅自己知道。
- 对方获得共享密钥k
k = a X A X B m o d p k=a^{X_AX_B}mod\;p k=aXAXBmodp
对 于 用 户 A , 计 算 : k = a X A X B m o d p = ( a X B m o d p ) X A m o d p = Y b X A m o d p , 求 得 k 。 对于用户A,计算:k=a^{X_AX_B}mod\;p=(a^{X_B}mod\;p)^{X_A}mod\;p={Y_b}^{X_A}mod\;p,\;{\color{red}求得k。} 对于用户A,计算:k=aXAXBmodp=(aXBmodp)XAmodp=YbXAmodp,求得k。(XA是A的私钥)
对 于 用 户 B , 计 算 : k = Y a X B m o d p , 求 得 k 。 对于用户B,计算:k={Y_a}^{X_B}mod\;p,{\color{red}求得k。} 对于用户B,计算:k=YaXBmodp,求得k。(XB是B的私钥)
- 得到的k,即为协商好的密钥,作为会话密钥,用于协商后续的对称密码(如AES的初始密钥)。
对于攻击者,仅知道 Y A , Y B , a , p , 是 很 难 得 到 X a 和 X b 的 , 即 很 难 得 到 A 和 B 本 次 会 话 的 私 钥 Y_A,Y_B,a,p,是很难得到X_a和X_b的,即很难得到A和B本次会话的私钥 YA,YB,a,p,是很难得到Xa和Xb的,即很难得到A和B本次会话的私钥