TLCP协议介绍及握手流程解析
目录
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消息,如果双方都验证加密和解密没问题,那么握手正式完成。
本消息的接收方应检验消息内容的正确性。一旦一方发送了握手结束消息,并且接收到了对方的握手结束消息并通过校验,就可以使用该连接进行数据安全传输。
更多推荐


所有评论(0)