目录

1.概述

2.协议流程

2.1握手协议涉及以下过程

2.2握手协议流程如图所示

3.握手解析

3.1Client Hello

3.2Server Hello

3.3Server Certificate

3.4Server Key Exchange

3.5Server Hello Done

3.6Client Key Exchange

3.7客户端发送Change Cipher Spec

Encrypted Handshake Message

3.8服务端发送Change Cipher Spec

Encrypted Handshake Message


1.概述

传输层密码协议 Transport Layer Cryptography Protocol (TLCP)

TLCP协议采用SM系列密码算法和数字证书等密码技术保障传输层的机密性、完整性、身份认证和抗攻击。

TLCP协议被定义于GB/T 38636-2020《信息安全技术 传输层密码协议(TLCP)》,于2020年4月发布,在2020年11月实施。

2.协议流程

2.1握手协议涉及以下过程

  • 交换hello消息来协商密码套件,交换随机数,决定是否会话重用。
  • 交换必要的参数,协商预主密钥。
  • 交换证书或IBC信息,用于验证对方。
  • 使用预主密钥和交换的随机数生成主密钥。
  • 向记录层提供安全参数。
  • 验证双方计算的安全参数的一致性、握手过程的真实性和完整性。

2.2握手协议流程如图所示

3.握手解析

用wireshark工具抓了整个握手过程(此处是单向握手),如下所示:

接下来针对每一步作进一步介绍。

3.1Client Hello

ClientHello消息里面有客户端在这个会话中使用的协议版本、产生的随机信息以及客户端所支持的密码套件。

密码套件是有固定格式和规范的,基本形式是:密钥交换协议_对称加密算法_对称加密模式_完整性校验算法。

GB/T 38636-2020里定义了目前TLCP协议支持所有密码套件如下所示:

3.2Server Hello

返回的ServerHello消息,消息里面有服务器确认的协议版本号,也给出了服务端产生的随机数,然后从客户端的密码套件列表中选取的一个密码套件 。

3.3Server Certificate

服务端发送一个服务端证书消息给客户端 ,当选中的密码套件使用RSA或ECC或ECDHE算法时,本消息的内容为服务端的签名证书和加密证书。

3.4Server Key Exchange

 本消息为服务端密钥交换消息,传送的信息用于客户端计算产生48字节的预主密钥。

3.5Server Hello Done

表示握手过程的hello消息阶段完成,发送完该消息后服务端会等待客户端的响应消息。

3.6Client Key Exchange

本消息为客户端密钥交换消息,如果服务端请求客户端证书,本消息紧跟于客户端证书消息之后,否则本消息是客户端接收到服务端hello done后所发送的第一条消息。

如果密钥交换算法使用RSA算法、ECC算法和IBC算法,本消息中包含预主密钥,该预主密钥由客户端产生,采用服务端的加密公钥进行加密。当服务端收到加密后的预主密钥后,利用相应的私钥进行解密,获取所述预主密钥的明文。

3.7客户端发送Change Cipher Spec

Encrypted Handshake Message

客户端发送Change Cipher Spec,告诉服务端开始使用加密方式发送消息;

再发一个Encrypted Handshake Message在密码规格变更消息之后发送本消息,用于验证密钥交换过程是否成功,并校验握手过程的完整性,本消息用本次握手过程协商出的算法和密钥保护。

3.8服务端发送Change Cipher Spec

Encrypted Handshake Message

服务器也是同样的操作,发送Change Cipher Spec和Encrypted Handshake Message消息,如果双方都验证加密和解密没问题,那么握手正式完成。

本消息的接收方应检验消息内容的正确性。一旦一方发送了握手结束消息,并且接收到了对方的握手结束消息并通过校验,就可以使用该连接进行数据安全传输。

Logo

海思 HiSpark 开发者社区是上海海思为开发者搭建的内容和交流平台,依托完备芯片解决方案、专业开发环境、开源/开放的软件资源与社区技术内容,构建完整服务生态开发者的闭环体系。

更多推荐