SSL/TLS 交互说明

版权声明:本文为博主原创文章,转载请附上博文链接,谢谢! https://blog.csdn.net/qq_30062125/article/details/84560749

一、SSL/TLS说明

1.1、说明:

安全传输层协议(TLS)用于在两个通信应用程序之间提供保密性和数据完整性,是ssl的后续版本。

该协议由两层组成: TLS 记录协议(TLS Record)和 TLS 握手协议(TLS Handshake)。

Record协议:包括对消息的分段、压缩、消息认证和完整性保护、加密等 。

Handshake协议:包括协商安全参数和密码套件、服务器身份认证(客户端身份认证可选)、密钥交换等。

主要用于解决:

二、TLS交互说明:

2.1、TLS 1.2 协议交互过程:

流程简要说明:

具体可以参见:https://tools.ietf.org/html/draft-whyte-qsh-tls12-02

1、2:TLS运行在TCP基础之上,需要一个完整的来回交互(RTT),完成TCP 三次握手“ 。

3:TCP连接建立后,客户端发送ClientHello,包括:

(1)客户端支持的ssl的最高版本号,如TLS1.2版。

(2)客户端支持的加密套件列表,如RSA公钥加密。

(3)确定的会话ID(用于恢复会话使用,server端会存储关于session id的对应的通信秘钥,当匹配的时候,会使用缓存的对称秘钥)

(4)客户端所支持的压缩算法列表

(5)一个用于生成对话秘钥的32位随机数

4:服务器发送ServerHello,包含:

(1)服务端选择的ssl的版本(选择方式为选择客户端和服务端最高版本中的较低的那一个)

(2)服务端选择的加密套件,如RSA公钥加密。

(3)会话ID(用于恢复会话使用,server端会存储关于session id的对应的通信秘钥,当匹配的时候,会使用缓存的对称秘钥)

(4)客户端选择的压缩算法

(5)一个用于生成对话秘钥的32位随机数

5:双方协商好一个共同的TLS版本和加密算法,客户端使用服务器提供的证书,生成新的对称密钥,并用服务器的公钥进行加密,通知服务器切换到加密通信流程。

以上,除了对称密钥是服务器端的公钥加密,其他都是明文。

6:服务器用自己的私钥解密客户端发过来的对称密钥,通过验证MAC检查消息的完整性,并返回给客户端一个加密的“Finished”的消息。客户端采用对称密钥解密消息,并验证MAC,如果一切OK,加密隧道就建立好了。

7:使用加密隧道传输数据

注: TLS1.2 基于RSA加密,TLS1.3 基于ECDH,减少了一个RTT交互过程。

RSA说明 见:RSA原理说明

2.2、TLS 1.3 协议交互过程:

2.2.1、ECDH:

2.2.1.1、简要说明:

ECDH是基于ECC(Elliptic Curve Cryptosystems,椭圆曲线密码体制,参看ECC)的DH( Diffie-Hellman)密钥交换算法。交换双方可以在不共享任何秘密的情况下协商出一个密钥。

ECC是建立在基于椭圆曲线的离散对数问题上的密码体制,给定椭圆曲线上的一个点P,一个整数k,求解Q=kP很容易;给定一个点P、Q,知道Q=kP,求整数k确是一个难题。ECDH即建立在此数学难题之上。

2.2.1.2、秘钥交换过程:

假设密钥交换双方为Alice、Bob,其有共享曲线参数(椭圆曲线E、阶N、基点G)。

1.Alice生成随机整数a,计算A=a*G。Bob生成随机整数b,计算B=b*G。

2.Alice将A传递给Bob。A的传递可以公开,即攻击者可以获取A。由于椭圆曲线的离散对数问题是难题,所以攻击者不可以通过A、G计算出a。Bob将B传递给Alice。同理,B的传递可以公开。

3.Bob收到Alice传递的A,计算Q=b*A

4.Alice收到Bob传递的B,计算Q‘=a*B

Alice、Bob双方即得Q=b*A=b*(a*G)=(b*a)*G=(a*b)*G=a*(b*G)=a*B=Q' (交换律和结合律),即双方得到一致的密钥Q。

2.2.2、协议交互过程:

流程简要说明:

具体可以参见:https://tools.ietf.org/html/draft-ietf-tls-tls13-28

1、2:TLS运行在TCP基础之上,需要一个完整的来回交互(RTT),完成TCP 三次握手“ 。

3:TCP连接建立后,客户端发送ClientHello,包括:

(1)客户端支持的ssl的最高版本号

(2)客户端支持的加密套件列表

(3)确定的会话ID

(4)客户端所支持的压缩算法列表

其中key_share记录了a*G,其中G是一个大家都知道的大数。服务器拿到a*G,计算得到Q=b*a*G(核心思想,实际逻辑要比这复杂),得到对称秘钥。

4:服务器发送ServerHello,包含:

(1)服务端选择的ssl的版本(选择方式为选择客户端和服务端最高版本中的较低的那一个)

(2)服务端选择的密码套件

(3)会话ID

(4)客户端选择的压缩算法

其中key_share记录了b*G,客户端拿到b*G就可以计算得到Q=a*b*G(核心思想,实际逻辑要比这复杂),得到对称秘钥。

5:客户端会返回验证信息、证书信息等给服务器。

6:使用加密隧道传输数据

猜你喜欢

转载自blog.csdn.net/qq_30062125/article/details/84560749