ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

你知道HTTPS ECDHE握手吗?

2021-10-06 22:07:14  阅读:271  来源: 互联网

标签:私钥 DH 握手 算法 密钥 HTTPS ECDHE


HTTPS ECDHE握手解析

一、DH算法的原理

数学基础

DH算法是非对称加密算法,因此它可以作为密钥交换,算法的核心是离散对数。
在这里插入图片描述
特别是当模数P是⼀个很大的质数,即使知道底数 a 和真数 b ,在现有的计算机的计算水平是几乎无法算出离散对数的,这就是 DH 算法的数学基础。

DH算法过程

  1. 假设小红和小明使用DH算法进行密钥交换,小红和小明先确定模数和底数作为DH算法的参数,这两个参数是公开的,记作P和G。
  2. 小红生成一个随机数作为私钥,记作a,小明生成一个随机数作为私钥,记作b,双方私钥不能泄漏。
  3. 小红的公钥A=G^a mod P;小明的公钥B=G^b mod P
  4. A和B也是公开的,根据离散对数原理,是很难算出a和b的,至少现在的计算机能力无法破解。
  5. 双方交换公钥。此时小红共有5个数:A,B,a,P,G;小明同样有5个数:A,B,b,P,G;
  6. 小红执行运算K1=B^a mod P;小明执行运算K2=A^b mod P,此时K1=K2,这就是以后的对称加密密钥,可作会话密钥使用。

根据离散对数的原理,如果 P 是⼀个大数,在现有的计算机的计算能力是很难破解出私钥 a、b 的,破解不出私钥,也就⽆法计算出会话密钥,因此 DH 密钥交换是安全的。
在这里插入图片描述

DH算法分类

static DH算法(已经废弃了)

static DH 算法里有一方的私钥是静态的,也就说每次密钥协商的时候有一方的私钥都是⼀样的,⼀般是服务器方固定,即 a 不变,客户端的私钥则是随机⽣成的。于是,DH 交换密钥时就只有客户端的公钥是变化,而服务端公钥是不变的,那么随着时间延长,黑客就会截获大量的密钥协商过程的数据,因为密钥协商的过程有些数据是公开的,黑客就可以依据这些数据暴力破解出服务器的私钥,然后就可以计算出会话密钥了,于是之前截获的加密数据会被破解,所以static DH算法不具备前向安全性。

DHE算法

双方的私钥在每次密钥交换通信时,都是随机生成的、临时的,这个方式也就是 DHE 算法。即使有个牛逼的黑客破解了某⼀次通信过程的私钥,其他通信过程的私钥仍然是安全的,因为每个通信过程的私钥都是没有任何关系的,都是立的,这样就保证了前向安全。

二、ECDHE算法

ECDHE概述

DHE因为做了大量的乘法导致性能不佳,因此出现了广泛应用与密钥交换算法ECDHE算法。
ECDHE算法是在DHE算法的基础上利用了 ECC 椭圆曲线特性,可以用更少的计算量计算出公钥,以及最终的会话密钥。

ECDHE密钥交换过程

  • 双方事先确定好使⽤哪种椭圆曲线,和曲线上的基点 G,这两个参数都是公开的;
  • 双方各自随机生成⼀个随机数作为私钥d,并与基点 G相乘得到公钥Q(Q = dG),此时小红的公私钥为 Q1 和 d1,小明的公私钥为 Q2 和 d2;
  • 双方交换各自的公钥,最后小红计算点(x1,y1) = d1Q2,小明计算点(x2,y2) = d2Q1,由于椭圆曲线 上是可以满足乘法交换和结合律,所以 d1Q2 = d1d2G = d2d1G = d2Q1 ,因此双方的 x 坐标是⼀样的,所以它是共享密钥,也就是会话密钥。 这个过程中,双方的私钥都是随机、临时生成的,都是不公开的,即使根据公开的信息(椭圆曲线、公钥、基点 G也是很难计算出椭圆曲线上的离散对数(私钥)。

三、ECDHE握手过程

第一次握手

ClientHello:客户端发送一个信息

  • TLS版本号
  • 支持的密码套件列表
  • 生成的随机数

第二次握手

SeverHello:服务端发送一个信息

  • TLS版本号
  • 支持的密码套件
  • 生成的随机数
    ServerCertificate:发送数字证书
    ServerKeyExchange:发送用RSA加密的服务端的椭圆曲线公钥
    ServerHelloDone:完成

第三次握手

CleintKeyExchange:发送用RSA加密的客户端的椭圆曲线公钥
ChangeCiperSpec:通知开始使用加密方式发送消息
EncryptedHandshakeMessage(Finish):之前所有发的数据做摘要,用会话密钥加密,让服务器做验证
会话密钥=客户端随机数 + 服务端随机数 + ECDHE 算法算出的共享密钥三个材料生成的。

第四次握手

ChangeCiperSpec:开始使用加密方式发送消息
EncryptedHandshakeMessage:验证成功
在这里插入图片描述

四、RSA和ECDHE握手过程的区别

  • RSA 密钥协商算法不支持1前向保密,ECDHE 密钥协商算法支持前向保密;
  • 使用了RSA密钥协商算法,TLS 完成四次握⼿后,才能进行应用数据传输,而对于ECDHE 算法,客户端可以不用等服务端的最后一次TLS 握手,就可以提前发出加密的 HTTP 数据,节省了⼀个消息的往返时间;
  • 使用ECDHE,在TLS第2次握手中,会出现服务器端发出的Server Key Exchange消息,而RSA握手过程没有该消息;

标签:私钥,DH,握手,算法,密钥,HTTPS,ECDHE
来源: https://blog.csdn.net/JT518721/article/details/120629648

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有