TLS中密码交换协议:RSA/DH/DHE/ECDH/ECDHE等说明

以下是学习笔记:

一:首先来看TLS的密钥交换构成涉及到的消息,如下图所示:

TLS 1.2 完整握手过程

二: RSA交互介绍:

9. PKI - 三种密钥交换算法详解(RSA& DHE& ECDHE)及他们在SSL/TLS协议中的应用_阿湯哥的博客-CSDN博客_ecdhe 算法

RSA算法流程文字描述如下:

(1)任意客户端对服务器发起请求,服务器首先发回复自己的公钥到客户端(公钥明文传输)。

(2)客户端使用随机数算法,生成一个密钥S,使用收到的公钥进行加密,生成C,把C发送到服务器。

(3)服务器收到C,使用公钥对应的私钥进行解密,得到S。

(4)上述交换步骤后,客户端和服务器都得到了S,S为密钥(预主密钥)。

TLS/SSL 协议详解 (30) SSL中的RSA、DHE、ECDHE、ECDH流程与区别_Mrpre的博客-CSDN博客_ecdhe

RSA也不具备前向安全性。私钥一旦泄漏,以往的会话都可以解密。 

其中:

  1. 服务器发送的公钥在SSL中是通过certificate证书发送的,certificate中的包含了公钥。
  2. C(加密后的预主密钥)是通过Client key exchange报文发送的。

三 DH算法的介绍:

Diffie–Hellman是如何实现共享密钥交换的呢?答案自然来自于数学,他们两人花了两年多时间找到了一种难以逆转的单向函数:取模运算(modular arithmetic);

单向函数或不可逆函数的特点就是正向计算结果唯一、逆向运算结果不确定(比如 11 * 9 = 8 (mod 13)正向计算结果唯一,但问你“在模等于13的体系中,什么数乘以9后余数为8?”,这个问题显然不能逆运算,所以“模运算”就是一个单向函数。

离散对数应用于DH算法:

Alice、Bob各自生成自己的私钥(A、B),通过公开公共参数(G、P),算出各自的公钥,随之双方交换公钥G^{A} \ and \ G^{B}后,

然后Bob执行运算:  G^{B}^ A ( mod P ),其结果为 K,

因为离散对数的幂运算有交换律,

所以ALICE执行运算:  G^{A}^ B (mod P ),得到的结果也是 K。

DH算法主要问题:

因为在DH密钥协商算法中,服务器的公私密钥是固定的,只有客户端的公钥是会话时随机生成,所以安全隐患很大(没有前向安全性,服务端私钥一旦泄露,以往的会话记录都会被破解),也就被废弃了。

DH密钥交换过程

四:DHE(E为ephemeral(临时性的)算法介绍:

DHE算法流程文字描述如下:

(1):客户端计算一个随机值Xa,使用Xa作为指数,即计算Pa = q^Xa mod p,其中q和p是全世界公认的一对值。客户端把Pa发送至服务器,Xa作为自己私钥,仅且自己知道。

(2):服务器和客户端计算流程一样,生成一个随机值Xb,使用Xb作为指数,计算

Pb = q^Xb mod p,将结果Pb发送至客户端,Xb仅自己保存。

(3):客户端收到Pb后计算Sa = Pb ^Xa mod p;服务器收到Pa后计算Sb = Pa^Xb mod p

(4):算法保证了Sa = Sb = S,故密钥交换成功,S为密钥(预主密钥)。

DHE密钥交换时,服务器私钥没有参与进来,而是客户端和服务器端同时生成临时的随机数。

也就是说,私钥即使泄漏,也不会导致会话加密密钥S被第三方解密,因此也具备前向安全性。

私钥只用于对server key exchange的签名

注意:

  1. DHE参数和Pb都是通过server key exchange发送给客户端
  2. server key exchange的结尾处需要使用服务器私钥对该报文本身进行签名,以表明自己拥有私钥
  3. Pa通过client key exchange发送给服务器的

五:ECDHE密钥交换算法:

    把上面DHE的算法中的离散对数换为椭圆曲线上的运算,就得到了ECDHE:

(1):客户端随机生成随机值Ra,计算Pa(x, y) = Ra * Q(x, y),Q(x, y)为全世界公认的某个椭圆曲线算法的基点。将Pa(x, y)发送至服务器。

(2):服务器随机生成随机值Rb,计算Pb(x,y) = Rb * Q(x, y)。将Pb(x, y)发送至客户端。

(3):客户端计算Sa(x, y) = Ra * Pb(x, y);服务器计算Sb(x, y) = Rb *Pa(x, y)

(4):算法保证了Sa = Sb = S,提取其中的S的x向量作为密钥(预主密钥)。

椭圆曲线需要公开的参数是椭圆曲线的名称和基点;

注意:

  1.  椭圆曲线名和Pb通过server key exchange报文发送;
  2. Pa通过client key exchange报文发送。

ECDHE也具备前向安全性

六:ECDH

        ECDH和ECDHE相比,少了一步计算Pb的过程,Pb用证书中的公钥代替,而证书对应的私钥就是Xb。

   

注意:

  1. 使用ECDH密钥交换算法,服务器必须采用ECC证书;
  2. 服务器可以不发送server key exchange报文,因为发送certificate报文时,证书本身就包含了Pb信息。

   ECDH不具备前向安全

ECDH算法服务器端的私钥是固定的,即证书的私钥作为Rb,故ECDH不被认为前向安全,因为私钥泄漏相当于Rb泄漏,Rb泄漏,导致会话密钥可被第三方计算。ECDH交换算法已经被OpenSSL废弃

  • 0
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值