Diffie-Hellman算法描述目前被许多商业产品交易采用.
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Diffie-Hellman 算法描述:目前被许多商业产品交易采用。
HD 算法为公开的密钥算法,发明于1976 年。
该算法不能用于加密或解密,而是用于密钥的传输和分配。
DH 算法的安全性体现在:在有限域上计算离散对数非常困难。
离散对数:定义素数p 的原始根( primitive root )为这样一个数,它能生成1~p-1 所有数的一个数。
现设 a 为p 的原始根,则
a mod p, a 2 mod p, , ,a p-1 mod p 两两互不相同,构成一个1~p-1 的全体数的一个排列。
对于任意数
b 及素数p 的原始根a, 可以找到一个唯一的指数i ,满足b=a i mod p, 0<=i<=p-1
则称指数i为以a为底、模P的b的离散对数。
1)HD算法描述
假设Alice和Bob想在不安全的信道上交换密钥,则他们可采取如下步骤:
(1)A lice和Bob共同协商一个大素数p以及p的原始根a,
a 和p 可以公开。
(2)Alice 秘密产生一个随机数x,计算X=s f mod p,然后把X发给Bob;
(3)Bob秘密产生一个随机数y,计算Y=a f mod p,然后把Y 发给Alice ;
(4)Alice 计算k=Y x mod p;
(5)Bob 计算k*=X y mod p;
因为
k=Y x mod p= (a y) x mod p=(a x)y mod p=X y mod p= k * 所以k= k *。
不安全线路上的窃听者只能得到a、p、X、Y, 除非能计算离散对数x和y,否则将无法得到密钥k。
因此,k为Alice 和Bob 独立计算出的密钥。
例:Alice和Bob在不安全网络信道上秘密交换密钥,见下图。
Alice
图 4-3 Diffie-Hellman 密钥交换
(RefC_p57_HD 算法描述) Bob
【锻曲I 喷;k
B'_a I. 1 ■■ ■■■■■・・ I Oh- IIH B J ' ■ " 4 4 Hi ■ 1 p;;•強安. J
•础7恥
:-: 會 y
nwd p — 1片诽猶J •「■心一卞V kg
・l ■卜 r _»: .. -i ■访匚
(1) Alice和Bob协商后决定采用素数p=353及其原始根a=3;
(2) Alice 秘密产生一个随机数x=97,计算
X=37 mod 353=40,然后把 X=40发给 Bob;
则双方得到共同密钥 k=160
缺点:DH 密钥交换算法易受到中间人攻击。
中间人攻击 描述 :
(1) Alice 公开发送值a 和p 给Bob,攻击者Carol 截 获这
些值,随即把自己产生的公开值发给 Bob 。
3) 4) 5) Bob 秘密产生一个随机数y=233,计算 丫=才33 mod 353=248,然后把 Y=248发给 Alice Ali ce
计算 k=Y x mod p=24 97 mod 353=160;
Bo b
(2)Bob 公开发送值a 和p 给Alice, 又被Carol 截获,随
即把自己产生的公开值发给Alice 。
(3)Alice 和Carol 计算出两人之间的共享密钥k1。
(4)Bob 和Carol 计算出两人之间另一个的共享密钥k2。
受到中间人Carol 攻击后,Alice 用密钥k1 给Bob 发送消息,Carol 截获后用k1 解密就可读取消息,然后将获得的明文消息用k2 加密(加密前对消息可能做某些修改,即主动攻击),然后发给Bob=对Bob发给Alice的消息,Carol 用同样的手法读取和修改。
造成中间人攻击得逞的原因是:DH密钥交换算法不进行认证对方。
利用数字签名可以解决中间人攻击的缺陷。
2 )经过认证的DH密钥交换
用于挫败中间人攻击,可用数字签名和公钥证书相互认证方法进行。
在密钥交换之前,Alice 和Bob 双方各自拥有公钥/ 私钥对和公开密钥证书。
(1)Alice和Bob确定一个公共的p和a,该两数值必须以可靠的方式公布(例如通过PKI 公布,后介绍)
(注:Carol 可得到p 和a。
)
(2)Alice 产生随机数x,并发给Bob。
(注:Carol 可得x, 现已得到p、a 和x, 但仍无法算出k 。
)(3)Bob产生随机数y,并根据DH协议计算岀共享秘密密钥k=Y mod p=(a y mod p)x mod p= (a y)x mod p, 然后Bob
对x、y签名(何谓签名?如何签名?后详述)并用k 加密此
签名,最后把加密的签名和消息,以及y
一起发给Alice 。
(注:Carol 可得y, 现已得到p、a、x 和y, 现可同
Bob —样算出k,即k现为一公钥,Carol可以用k 解密消息,
但不可更改,因为消息和签名“捆绑” 在一起,而Carol对
Bob的签名无法做手脚。
)
4) Alice 计算出k=X y modp=(a x modp) y modp= (a x) y mod p,用k
解密Bob发给她的消息,并对其签名进行验证(如何验证?后详述 ),确信消息为真。
验证后对x、y 签名并用k 加密此
签名和自己的消息后,然后发给Bob。
(注:Carol 同样可以用k 解密,但不可更改Alice 的消息。
)
5) Bob 解密消息,并验证Alice 的签名,确信消息为
中,
Carol只能进行被动攻击。