《深入浅出HTTPS》读书笔记(23):密钥协商算法(续)
《深入浅出HTTPS》读书笔记(23):密钥协商算法(续)
【DH密钥协商算法】
Diffie-Hellman算法,简称DH算法。
而DH算法确切地说,实现的是密钥交换或者密钥协商,DH算法在进行密钥协商的时候,通信双方的任何一方无法独自计算出一个会话密钥,通信双方各自保留一部分关键信息,再将另外一部分信息告诉对方,双方有了全部信息才能共同计算出相同的会话密钥。
DH算法处理过程
◎通信双方的任何一方可以生成公共参数p和g,这两个数是公开的
◎客户端连接服务器端,服务器端将参数发送给客户端。
◎客户端根据公开参数生成一个随机数a,这个随机数是私钥,只有客户端知道,且不会进行发送,然后计算Yc = (g ^ a) mod p, Yc就是公钥,需要发送给服务器端。
◎服务器端根据公开参数生成一个随机数b,这个随机数是私钥。计算Ys = (g ^ b) mod p, Ys是公钥,需要发送给客户端。
◎客户端发送Yc数值给服务器端,服务器端计算Z = (Yc ^ b) mod p。
◎服务器端发送Ys数值给发送方,客户端计算Z = (Ys ^ a) mod p。
◎服务器端和客户端生成的Z就是会话密钥,协商完成。
只要私钥不发生泄露,攻击者即使有了Ys和Yc也不会计算出会话密钥。
【DH算法分类】
DH算法分为两种类型,分别是静态DH算法和临时DH算法。
1)静态DH算法(DH算法)
静态DH算法,p和g两个参数永远是固定的,而且服务器的公钥(Ys)也是固定的。静态DH算法的好处就是避免在初始化连接时服务器频繁生成参数p和g,因为该过程是非常消耗CPU运算的
2)临时DH算法(EDH算法)
在每次初始化连接的时候,服务器都会重新生成DH密钥对。