简要解释下几个概念。
国密:也就是国家密码局认定的国产密码算法,简称为国密。其中对称密码算法主要有ZUC、SM1、SM4和SM7,非对称密码算法主要有SM2和SM9,杂凑密码算法主要有SM3。
HTTPS:Hypertext Transfer Protocol over Secure Socket Layer(SSL) 或 Hypertext Transfer Protocol Secure,是以安全为目标的http通道,简单讲是http的安全版。 https相当于在HTTP下加入SSL层,https的安全基础是SSL。
SSL:Secure Sockets Layer,安全套接字层。是一种标准安全协议,用于在在线通信中建立Web服务器和浏览器之间的加密链接。
TSL:Transport Layer Security,传输层安全。是 IETF 在 SSL 3.0 的基础上设计的协议,它是 SSL 协议的升级版。两者差别极小,可以理解为 TLS 是 SSL 3.1。
SSL/TSL子协议:
- 握手协议 :负责通信双方之间协商决定密码算法和共享密钥。
- 密码规格变更协议 :负责向通信对象传达变更密码方式的信号。
- 警告协议 :负责在发生错误时将错误传给对方。
- 应用数据协议 :是将TLS承载的应用数据传达给通讯对象。
TLCP:传输层密码协议,可以理解为是国密SSL并形成国标GBT38636-2020。TLCP参照了TLSv1.0规范,整个协议握手和加密国产基本一致,但和TLSv1.0并不兼容。主要的不同体现在三个地方:
- 协议的版本号不同,握手和加密协议细节不同;
- 协议采用的主要是SM2/SM3/SM4算法,不同于TLS采用的国际密码算法;
- 采用的是SM2双证书体系。
这里涉及的是HTTPS协议在TLCP握手阶段的消息流程,注意这里客户端与服务器之间采用的是单向身份鉴别,即客户端对服务器端进行身份鉴别。
消息1:客户端向服务器端发送Client Hello消息。
Client Hello消息中重要字段包括:
可用的版本号- version
当前时间-GMT Unix Time
客户端随机数-Random Bytes,随机数1。
会话ID- Session ID,恢复之前的会话时会用到。
可用的密码套件清单-Cipher Suites,这里使用的是国密浏览器所以可以看到支持都是国密算法,服务器端将在依照这个列表选择本端支持的算法进行回复确认。
可用的压缩方式清单-Compression Methods
消息2:服务器端向客户端发送Server Hello消息。
Server Hello消息中重要字段包括:
使用的版本号-version
当前时间-GMT Unix Time
服务器随机数-Random Bytes,随机数2。
会话ID-Session Id
使用的密码套件清单-Cipher Suite,这里服务器端选择了ECC_SM4_CBC_SM3密码套件,也就是SM2公钥算法、SM4-CBC分组密码算法和SM3杂凑算法。具体来说,这里SM2算法密钥交换算法,SM4是加密算法(SM4-CBC)、SM3是校验算法(国标要求为HMAC-SM3)。
使用的压缩方式清单
消息3:服务器端向客户端发送Certificate消息。
Certificate消息中重要字段包括:
服务器的签名证书:国密使用的双证书体系,签名证书和加密证书分开使用,不可混用。签名证书内容如下。在扩展字段中KeyUsage标识出DigitalSignature为true和contentCommitment为true。即该证书用于数字签名和不可否认性(由nonRepudiation修改而来)。
签名算法-Signature:iso.2.156.10197.1.501,即使用SM3消息摘要然后SM2签名。这里的取值和algorithmIdentifier相同。
服务器的加密证书:加密证书中在同样在扩展字段中KeyUsage标识出KeyEncipherment为true和dataEncipherment为true,即数字证书中包含的公钥可用来做密钥加密密钥和数据密钥。
具体公钥信息包含subjectPublickey公钥数据信息和算法名称,例如这里就是使用公钥04c9f......采用iso.2.156.10197.1.301也就是SM2算法进行加密操作。
消息4:服务器向客户端发送Server Key Exchange消息。
这里Server Key Exchange是用于生成预主密钥。
消息5:服务器向客户端发送Server Hello Done消息,通知客户端 Hello 时间结束。
消息6:客户端向服务器端发送Client Key Exchange消息,消息内容取决于双方Hello消息协商出的密钥交换算法,客户端用服务器端加密公钥加密后传输。
消息7:客户端向服务器端发送Change Cipher Spec消息,这不是握手协议,而是密码规格变更协议。客户端告诉服务器我要换密码了。因为已经双方已经交换了密码套件信息,可以开始切换密码进行通信了。
后面就开始正常加密通信,服务器端也会发送Change Cipher Spec,之后开始加密通信。
SSL/TLS/TLCP在通信过程中提供机密性、完整性保护。具体来说,先对消息明文M生成MAC然后将M和MAC一起进行加密传输。所以这里我们看到应用数据就是一个加密后的密文字符串。
现在还有一个问题,就是用于MAC完整性和真实性保护的密钥以及数据加密密钥是怎么生产的(这两个密钥称为工作密钥)。工作密钥的长度由选用的密码算法决定,由主密钥、客户端随机数(随机数1)、服务器端随机数(随机数2)、常量字符串经PRF计算生成。其中主密钥由预主密钥、随机数1、随机数2、常量字符串经PRF计算生成。在这个例子里,数据加密算法使用SM4-CBC,所以用于数据加密的密钥长度为128bit。完整性保护使用HMAC-SM3,SM3分组长度为512bit,所以用于验证完整性的工作密钥长度为512bit。
版权归原作者 搞搞搞高傲 所有, 如有侵权,请联系我们删除。