SSL/TLS
是用于网络传输的加密协议,用于解决应用层传输安全问题。众所周知,HTTP
是明文传输,加上SSL
后变成HTTPS
,它的发展经历经过了以下阶段:
- SSL1.0,已废除,不再使用。
- SSL2.0,RFC6176,已废除。
- SSL3.0,RFC6101,基本废除
- TLS1.0,RFC2246,少数在使用
- TLS1.1,RFC4346
TLS1.2
,RFC5246,目前广泛使用- TLS1.3,正在规划。
每种加密套件需要具备四项基础功能:
- 身份认证
- 密钥协商
- 信息加密
- 完整性校验
在以上四项功能之上,实现加解密、签名和验签等功能。
国密算法
国密算法是国家密码局认定的国产密钥算法,主要有以下几种
- SM1:对称加密,密钥、分组长度为128位,加密强度与AES相当,非公开,需要专用加密芯片配合。
- SM2:基于ECC椭圆曲线的公钥密钥算法,包括
- SM2-1数字签名算法
- SM2-2密钥交换协议
- SM2-3公钥加密算法
256位的SM2密码强度优于2048位的RSA,运算速度比RSA快。
- SM3:输出长度为256位,适用于数字签名和验证消息认证码。
- SM4:对称加密,密钥长度与分组长度均为128位,用于无线局域网领域。
- SM9:能够实现由用户指定公钥,例如使用身份证号码、邮箱地址等,通过密钥生成中心得到私钥。
以下是SSL和国密算法的对比
标准 | 身份认证 | 密钥协商 | 对称加密 | 完整性校验 |
---|---|---|---|---|
SSL/TLS | 数字签名 | RSA、ECDH、ECDSA | RC4、AES、DES等 | SHA1/SHA256 |
国密算法 | SM2-1 | SM2 | SM4 | SM3 |
国密算法应用
- 国密证书:使用国密算法(SM2-SM3)的标准
X509
格式证书 - 国密
SSL
:采用国密算法,符合国密标准的安全传输协议。
新版Linux内核已经支持的SM3和SM4算法,SM2算法也于2020年10月26日纳入Linux内核。
国密规范规定发送证书时需要有签名证书和加密证书,详见双证书。
证书格式
X.509
是数字证书的格式标准,用于标示通讯各方身份信息的一系列数据,具体有多种编码形式,常用的有:
pem
格式:将DER格式进行Base64编码。der
格式:DER格式,二进制格式保存。
这两种格式可以互转。证书中含有申请者公钥、申请者的组织信息、个人信息、签发机构信息、证书有效时间和证书序列号等明文信息。
TLS握手过程
下图为TLS握手过程:
基本流程如下:
- 客户端向服务器索要并验证公钥
- 双方协商生成"对话密钥"
- 双方采用"对话密钥"进行后续加密通讯
具体流程在 SSL/TLS协议运行机制的概述,这篇文章中有很好的解释,此处不再赘述。
在握手的最后阶段,通讯双方记录对方发送过来的所有内容,并计算内容hash值,交于对方进行校验。
这里需要注意,协商生成"对话密钥"的过程,需要依赖三个随机数,其中有2个明文随机数,分别由客户端和服务端生成,1个密文随机数,由客户端生成,称为pre-master-key
,并通过公钥加密后传给服务端,通讯双方同步这三个随机数后,采用事先商定的密钥生成方法,生成后续会话的对话密钥
。
握手协商阶段
- RSA密钥交换算法
- 客户端生成一个随机数,当做后续对称加密密钥,使用服务端的公钥加密后回传给服务端,服务的使用私钥解密,双方同步对称密钥。
- DHE密钥交换算法
- 客户端生成一个随机值Xa,通过公式Pa=q^Xa mod p(p、q值固定)计算得到Pa,发送Pa到服务器。
- 服务器生成一个随机值Xb,通过公式Pb=q^Xb mod p,计算得到Pb,Pb发送给客户端
- 客户端收到Pb后计算Sa=Pb^Xa mod p,服务端收到Pa后计算Sb=Pa^Xb mod p。
- DHE算法保证了 Sa = Sb = S,S为对称通讯密钥。
- ECDHE密钥交换算法
- 客户端生成一个随机值Ra,计算Pa(x,y) = Ra * Q(x,y),将Pa(x,y)发送至服务器
- 服务端生成一个随机值Rb,计算Pb(x,y) = Rb * Q(x,y),将Pb(x,y)发送至服务器
- 客户端计算Sa(x,y)=Ra *Pb(x,y),服务端计算Sb(x,y) = Rb * Pa(x,y)
- 算法保证Sa=Sb=S,提取S的x向量作为对称通讯密钥
总结
本文简要介绍了SSL和国密算法的基本概念、加密通道的建立流程和握手协商密钥交换流程。
参考资料:
GMT 0024-2014 SSL VPN 技术规范
浅谈国密算法
各种安全证书间的关系及相关操作
PKI - 三种密钥交换算法详解(RSA& DHE& ECDHE)及他们在SSL/TLS协议中的应用
ECC椭圆曲线加密算法:ECDH 和 ECDSA