深入浅出HTTPS(密码套件)
密钥交换算法(RSA,DH,ECDH,DHE,ECDHE,PSK)
RSA
- 客户端发送连接请求
- 服务端分发公钥RSA的公钥给客户端
- 客户端生成预备主密钥,通过公钥进行加密并发送给服务端
- 服务端解密,如果正确解密,则证明共同协商出一个预备主密钥
DH
- 客户端向服务器端发起连接请求。
- 服务器端生成一个RSA密钥对,并将公钥发送给客户端。
- 服务器端生成DH参数和服务器DH密钥对,用RSA私钥签名DH参数和服务器DH公钥,最后将签名值、DH参数、服务器DH公钥发送给客户端。
- 客户端通过服务器RSA的公钥验证签名,获取到DH参数和服务器DH公钥。
- 客户端通过DH参数生成客户端的DH密钥对,并将客户端DH公钥发送给服务器端。
- 客户端通过客户端DH私钥和服务器端DH公钥计算出预备主密钥。
- 服务器端接收到客户端的DH公钥,结合服务器的DH私钥计算出预备主密钥。
- 最终客户端和服务器端计算出的预备主密钥能够保持一致。
特征:客户端生成DH密钥对,服务端生成RSA密钥对,DH属于非对称加密
DHE
通信双方每次连接的时候,服务器通过DH参数生成的服务器DH密钥对是不一样的,在会话结束后,服务器DH密钥对也会失效,这种方式能提供前向安全性。
ECDH
https://zhuanlan.zhihu.com/p/107599962
ECDHE
DHE 算法由于计算性能不佳,因为需要做大量的乘法,为了提升 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)也是很难计算出椭圆曲线上的离散对数(私钥)。
认证/数字算法(RSA,ECDSA,DSA)
RSA
ECDSA
- 使用消息摘要算法将要发送数据加密生成信息摘要。
- 发送方用自己的DSA私钥对信息摘要再加密,形成数字签名。
- 将原报文和加密后的数字签名一并通过互联网传给接收方。
- 接收方用发送方的公钥对数字签名进行解密,同时对收到的数据用消息摘要算法产生同一信息摘要。
- 将解密后的信息摘要和收到的数据在接收方重新加密产生的摘要进行比对校验,如果两者一致,则说明在传送过程中信息没有破坏和篡改;否则,则说明信息已经失去安全性和保密性。
ECDSA
https://www.jianshu.com/p/899077117ff8?msclkid=8178e60eb87d11eca3644df5c7595e09
批量加密算法(AES,CHACHA20,Camellia,ARIA)
CHACHA20
https://jaminzhang.github.io/network/understanding-ChaCha20/?msclkid=c19ee2fcb87d11ec90e88e6a9a36661e
Camellia
https://www.jiamisoft.com/blog/20807-came.html?msclkid=1ca30a3cb87f11ecb98e7fdfb5c2d9a8
消息验证码算法(SHA-256,POLY1305)
|