TLS RSA ECDHE & TLS 1.3协议详解

原文链接:https://blog.csdn.net/mrpre/article/details/81532469

TLS RSA: https://www.cnblogs.com/xiaolincoding/p/14274353.html

TLS ECDHE: https://www.cnblogs.com/xiaolincoding/p/14318338.html

这里简单的描述下 TLS 1.3 之前协议的秘钥交换流程,以及其缺点

RSA 秘钥交换
1:client 发起请求(Client Hello)
2:server 回复 certificate
3:client使用证书中的公钥,加密预主秘钥,发给 server(Client Key Exchange)
4:server 提取出 预主秘钥,计算主秘钥,然后发送对称秘钥加密的finished。
5:client 计算主秘钥,验证 finished,验证成功后,就可以发送Application Data了。

缺点:RSA秘钥交换不是前向安全算法(证书对应私钥泄漏后,之前抓包的报文都能被解密)。

所以在 TLS 1.3中 RSA 已经废弃了

ECDHE秘钥交换
1:client 发送请求(Client Hello),extension携带支持的椭圆曲线类型。
2:server 回复 Server Hello和certificate等;server选择的椭圆曲线参数,然后 生成私钥(BIGNUM),乘以椭圆曲线的base point得到公钥(POINT),顺便签个名表示自己拥有证书,然后将报文发给client,报文就是Server Key Exchange,其包含了server选择的椭圆曲线参数、自己根据这个参数计算的公钥、自己用证书的私钥对当前报文的签名。
3:client 收到 Server Key Exchange,获得椭圆曲线参数,生成私钥(BIGNUM)后计算公钥(POINT),然后把公钥发出去Client Key Exchange。client使用自己的私钥(BIGNUM)和server的公钥(POINT)计算出主秘钥。
4:server 收到 client的公钥(POINT),使用自己的私钥(BIGNUM),计算主秘钥。两端主秘钥是一致。

缺点:
client发送自己支持的椭圆曲线类型,然后等待server选择后,才计算自己的公钥然后发送给server。这个可以优化。

TLS 1.3 中是这样优化握手的:
1:client 发送请求(Client Hello),extension携带支持的椭圆曲线类型。且对每个自己支持的椭圆曲线类型计算公钥(POINT)。公钥放在extension中的keyshare中。
2:server 回复 Server Hello和certificate等;server选择的椭圆曲线参数,然后乘以椭圆曲线的base point得到公钥(POINT)。然后提取Client Hello中的key_share拓展中对应的公钥,计算主秘钥。公钥(POINT)不再和之前的以协议一样放在Server Key Exchange中,而是放在Server Hello的key_share拓展中。client收到server的公钥(POINT)后计算主秘钥。

所以在TLS 1.3 中最显著的变化,也即上文说的无条件的1-RTT就是基于对握手协商的优化生。

所以,Client 相当于计算了多种可能情况下server会使用的ecdhe参数,然后根据这些参数计算公钥提前发给server = =(为了追求rtt,也是绝了),你让那种嵌入式的客户端怎么办。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值