grpc-go源码剖析九十二之tls握手的本质是什么?tls1.2版本为什么为tls1.3版本多来一次握手呢?

已发表的技术专栏
0  grpc-go、protobuf、multus-cni 技术专栏 总入口

1  grpc-go 源码剖析与实战  文章目录

2  Protobuf介绍与实战 图文专栏  文章目录

3  multus-cni   文章目录(k8s多网络实现方案)

4  grpc、oauth2、openssl、双向认证、单向认证等专栏文章目录)

首先客户端跟服务器端握手的最终目的是

为了协商出一个对称秘钥,

典型的秘钥协商算法有两种:

  • RSA算法
  • ECDH算法;
1) RSA的秘钥协商过程,

RSA算法给予server端一个公钥和私钥,一段消息既可以用公钥加密,然后用私钥解密,也可以用私钥加密,用公钥解密。公钥是什么呢?

你可以理解成服务器从CA那得到的证书。

好,我们来看下TLS1.2的秘钥协商过程,

  • client发一个client_hello,
  • server端收到这个消息后,回传一个server_hello,一个证书,
  • client收到证书后,用公钥(也就是证书)加密一段随机数发回给server,
  • server收到后用私钥解密得到这段随机数,这段随机数就作为对称加密的秘钥了,至此握手就完成。
2) ECDH的秘钥协商过程,

首先EC的意思是椭圆曲线,

  • 这个EC提供了一个特性,在椭圆曲线上找一个点P,给定一个整数K,求解Q=KP很容易,但是给定一个点P,Q,知道Q =KP,求K却是个难题。
  • 在这个背景下,给定一个大家都知道的大数G,client在每次需要和server协商秘钥时,生成一段随机数a,然后发送A=a*G给server,
  • server收到这段消息(aG)后,生成一段随机数b,然后发送B=bG给client,然后server端计算(a*G)*b作为对称秘钥,
  • client端收到后bG后计算a(G*b),
  • 因为(aG)b = a(Gb),所以对称秘钥就是aGb啦,攻击者只能截获A=aG和B=bG,由于椭圆曲线难题,知道A和G是很难计算a和b的,也就无法计算aGb了

这块内容是我参考下面的博客内容,可能有助于大家的理解:

https://blog.csdn.net/zk3326312/article/details/80245756?utm_source=app&app_version=4.5.8
https://blog.csdn.net/mrpre/article/details/81532469?utm_source=app&app_version=4.5.8
https://www.jianshu.com/p/af8cc2db51f4/
https://blog.51cto.com/liuzhengwei521/2430427?source=dra

其实,我个人对tls加密过程,还是有很多地方不清楚的。

源代码都可以通过努力来理解,但是缺少的是对tls算法的理解。

代码只是算法的具体实现。

如果大家对tls感兴趣,可以继续研究tls算法。如果对tls算法有很好的认识的话,再看源码会很容易的。

下一篇文章
  数据帧发送阶段来分析grpc框架加密的原理?

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

码二哥

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值