PKI与SSL基础
1.基本概念
密码学基本概念
- 密码(cipher):密码学中的密码(cipher)是一种用于加密或者解密的算法。而我们日常所使用的“密码(password)”是一种口令,它是用于认证用途的一组文本字符串。常见的算法又对称算法、非对称算法、摘要算法等。
- 密钥(key):密钥是一种参数,它是在使用密码(cipher)算法过程中输入的参数。同一个明文在相同的密码算法和不同的密钥计算下会产生不同的密文。密钥分为对称密钥与非对称密钥。
- 明文/密文(plaintext/ciphertext):明文是加密之前的原始数据,密文是通过密码运算后得到的结果。
常用算法:对称算法、非对称算法、摘要算法。
-
对称算法:对称算法指加密和解密使用相同密钥的加密算法。
算法特点是速度快,通信各方加密和解密都采用相同密钥。
常用的对称算法有:AES、DES、RC4、SM1、SM4等。 -
非对称算法:加密和解密使用不同密钥的加密算法,也称为公开密钥算法。
算法特点是公钥可以公开发布,自己保存私钥用于解密。
常见的非对称算法有:RSA、DSA、DH、ECC、SM2等。
-
摘要算法:摘要算法是一种把任意长度的原始数据提取为固定长度密文的算法。
算法特点是不同原始数据产生不同的摘要结果,算法过程不可逆、难碰撞。
常见的摘要算法有:MD5、SHA1、SM3等。
加/解密数据
-
数字签名(DIgital Signature):数字签名是将原始数据生成摘要值,然后将摘要信息用私钥加密的过程。
数据通过hash运算后得到hash值,然后利用私钥加密hash值。
-
验证签名(Verify):验证签名是将签名密文用发送方公钥解密,然后和原始数据的摘要值作对比的过程。
接收方收到数据和加密后的hash值,用发送方公钥解密得到hash值,然后和原始数据的hash值做对比。
-
数字信封:数字信封是发送方使用接收方的公钥来加密对称密钥后所得的数据。
数字信封用于确保对称密钥传输的安全性。
证书与证书链
-
数字证书(Certificate):数字证书是一个经证书授权中心(CA)数字签名的(包含公钥以及公钥拥有者信息)的文件。
数字证书用于证明所有者的合法身份。
-
证书链:多个证书可以绑定到一个信息或交易上形成证书链,证书链中每一个证书都由其前面的数字证书进行鉴别。
最高级的CA必须是受接收者信任的、独立的机构。
2.PKI与CA
PKI的基本概念
PKI(Public Key Infrastructure),公钥基础设施。
-
PKI的定义:
一个用公钥概念和技术实施和提供安全服务的具有普适性的规范体系。
其定义在不断延伸和扩展。
-
PKI的目标:
为所有应用提供统一规范的安全服务。
PKI的基本组成
- 密钥对
- 数字证书
- 证书吊销列表(CRL)
- 证书中心CA(Certificate Authority)
- 注册机构RA(Register Authority)
- 目录服务LDAP
- 证书存档(Repository)
- 用户(End User)
PKI的基本服务
-
真实性/身份鉴别:
通过数字签名技术确定通信另一方的身份。
-
完整性:
通过摘要算法和数字签名技术,保障交易中的信息不可篡改。
-
保密性:
使用公钥分发随机密钥,只有指定的信息接受者才能访问信息。
-
不可抵赖:
发送方发送请求信息及数字签名,接收方发送响应信息和数字签名。
CA(Certificate Authority)
CA是签发电子证书的实体
CA的职责:
- 接受用户的请求
- 对用户的身份信息进行验证
- 用自己的私钥签发证书
- 提供证书查询
- 接受证书吊销请求
- 提供证书吊销列表
CA的组织结构
CA的组织结构跟域名有些相似,有一个根CA,然后它派生了一些子的,子又生孙,孙又生子,子子孙孙无穷匮也。
数字证书
- 数字证书(certificate):数字证书是一个经证书授权中心(CA)数字签名(包含公开密钥拥有者信息以及公开密钥)的文件,它是一种用于绑定用户身份信息和公钥信息的数据结构。
- PKI适用于异构环境中,所以证书的格式在所使用的范围内必须统一
- 证书是一个机构颁发给一个安全个体的证明,所以证书的权威性取决于该机构的权威性
- 一个证书中,最重要的信息是公钥、持有者信息、机构签名、证书有效期、算法和用途
- 签名证书和加密证书分开
- 最常用的证书格式为X.509 v3
X.509 证书格式
-
版本:
识别用于该证书的 X.509 标准的版本,这可以影响证书中所能指定的信息。
-
序列号:
发放证书的实体有责任为证书指定序列号,以使其区别于该实体发放的其它证书。
-
签名算法标识符:
用于识别 CA 签写证书时所用的算法。
-
签发人姓名:
签写证书的实体的 X.509 名称。
-
有效期:
每个证书均只能在一个有限的时间段内有效。该有效期以起始日期和时间及终止日期和时间表示,可以短至几秒或长至一世纪。
-
主机名:
证书可以识别其公钥的实体名。此名称使用 X.500 标准,因此在Internet中应是唯一的。
-
主体公钥信息:
这是被命名实体的公钥,同时包括指定该密钥所属公钥密码系统的算法标识符及所有相关的密钥参数。
-
签发人唯一标识符
-
个体唯一标识符
-
扩展域
-
签名
证书的签发和认证
-
签发:
首先是使用哈希函数对待签名内容进行安全哈希,生成消息摘要,然后使用CA自己的私钥对消息摘要进行加密。
-
认证:
使用CA的公钥解密签名,然后使用相同的签名函数对签名证书内容进行签名,并和服务端数字签名里的签名内容进行比较,如果相同就认为校验成功。
证书请求和证书应答
- 用户:
- 录入持有者信息,生成签名密钥对。
- 发送证书请求。
- CA:
- 生成签名证书。
- 生成加密密钥对。
- 生成加密证书。
- 使用签名公钥保护加密私钥。
- 返回证书应答(签名证书、加密证书、签名公钥保护的加密私钥)。
证书链
证书链可以有任意环节的长度,所以在三节的链中,信任锚证书CA 环节可以对中间证书签名;中间证书的所有者可以用自己的私钥对另一个证书签名。
3.国际SSL协议
SSL/TLS 协议
- SSL(Secure Socket Layer,安全套接层):位于TCP/IP协议与各种应用层协议之间,为数据通讯提供安全支持。
- SSL协议可分为两层:
- SSL记录协议(SSL Record Protocol):建立在可靠的传输协议(如TCP)之上,为高层协议提供数据封装、解压、加密等基本功能的支持。
- SSL握手协议(SSL Handshake Protocol):建立在SSL记录协议之上,用于在实际的数据传输开始前,通讯双方进行身份认证、协商加密算法、交换加密密钥等。
- TLS(Transport Layer Security,传输层安全协议):SSL3.0版本的新协议,目前最新版本是TLS1.3。
- HTTPS:即HTTP over SSL/TLS,用于安全的HTTP数据传输。
应用层 | HTTPS |
---|---|
会话层 | SSL/TLS |
传输层 | TCP |
网络层 | IP |
SSL 安全机制
- 身份认证:基于证书利用数字签名方法对服务器和客户端进行身份验。
- 消息完整性:消息传输过程中使用 MAC算法来检验消息的完整性。
- 消息机密性:利用对称密钥算法对传输的数据进行加密。
SSL 协议组成
上层协议
- 握手协议:SSL协议非常重要的组成部分,用来协商通信过程中使用的加密套件(加密算法、密钥交换算法和MAC算法等)、在服务器和客户端之间安全地交换密钥、实现服务器和客户端的身份验证。
- 密钥变化协议:客户端和服务器端通过密码变化协议通知对端,随后的报文都将使用新协商的加密套件和密钥进行保护和传输。
- 报警协议:用来向通信对端报告报警信息,消息中包含报警的严重级别和描述。
下层协议
- 记录协议:主要负责对上层的数据进行分块、计算并添加MAC值、加密,并把处理后的记录块传输给对端。
SSL 握手过程(双向)
- ClientHello:协议和版本、密码套件、随机数1
- ServerHello:协议和版本、密码套件、随机数2、会话ID
- Certificate:服务端证书
- ServerKeyExchange:可能的密钥交换参数
- CertificateRequest:需要的客户端证书类型、证书链
- ServerHelloDone:版本和算法协商结束,开始密钥交换
- Certificate:客户端证书
- ClientKeyExchange:密钥交换参数(RSA为预主密钥)
- CertificateVerify:所有握手消息的签名
- ChangeCipherSpec:计算并开始使用会话密钥
- Finished:加密发送所有握手消息的摘要
- ChangeCipherSpec:计算并使用会话密钥
- Finished:加密发送所有握手消息的摘要
1、7、8、9、10、11为client。2、3、4、5、6、12、13为server。
SSL 握手过程(单向)
- ClientHello:协议和版本、密码套件、随机数1
- ServerHello:协议和版本、密码套件、随机数2、会话ID
- Certificate:服务端证书
- ServerKeyExchange:可能的密钥交换参数
- ServerHelloDone:版本和算法协商结束,开始密钥交换
- ClientKeyExchange:密钥交换参数(RSA为预主密钥)
- ChangeCipherSpec:计算并开始使用会话密钥
- Finished:加密发送所有握手消息的摘要
- ChangeCipherSpec:计算并使用会话密钥
- Finished:加密发送所有握手消息的摘要
1、6、7、8为client。2、3、4、5、9、10为server。
SSL 会话重用过程
- ClientHello:会话ID
- ServerHello:会话ID
- ChangeCipherSpec:计算并开始使用会话密钥
- Finished:加密发送所有握手消息的摘要
- ChangeCipherSpec:计算并使用会话密钥
- Finished:加密发送所有握手消息的摘要
1、3、4为client。2、5、6为server。
4.国产密码算法
国产密码算法
- 国产密码算法(国密算法)是指国家密码局认定的国产商用密码算法,在金融领域目前主要使用公开的SM2、SM3、SM4三类算法,分别是非对称算法、摘要算法和对称算法。
- SM2:SM2椭圆曲线公钥密码算法是我国自主设计的公钥密码算法,包括SM2-1椭圆曲线数字签名算法,SM2-2椭圆曲线密钥交换协议,SM2-3椭圆曲线公钥加密算法,分别用于实现数字签名密钥协商和数据加密等功能。SM2算法与RSA算法不同的是,SM2算法是基于椭圆曲线上点群离散对数难题,相对于RSA算法,256位的SM2密码强度已经比2048位的RSA密码强度要高。
- SM3:SM3杂凑算法是我国自主设计的密码杂凑算法,适用于商用密码应用中的数字签名和验证消息认证码的生成与验证以及随机数的生成,可满足多种密码应用的安全需求。为了保证杂凑算法的安全性,其产生的杂凑值的长度不应太短,例如MD5输出128比特杂凑值,输出长度太短,影响其安全性SHA-1算法的输出长度为160比特,SM3算法的输出长度为256比特,因此SM3算法的安全性要高于MD5算法和SHA-1算法。
- SM4:SM4分组密码算法是我国自主设计的分组对称密码算法,用于实现数据的加密/解密运算,以保证数据和信息的机密性。要保证一个对称密码算法的安全性的基本条件是其具备足够的密钥长度,SM4算法与AES算法具有相同的密钥长度分组长度128比特,因此在安全性上高于3DES算法。
国密SSL协议
-
椭圆曲线
ECC(Elliptic Curves Cryptography)加密算法是一种公钥加密算法。
与RSA算法相比,ECC算法可以使用较短的密钥达到相同的安全程度,有明显性能优势。
-
国密SSL协议
- 由国家密码管理局颁布,基于国际标准TLS1.1版本设计。
- 无单独规范,其标准定义在《GM/T 0024 SSL VPN技术规范》。
-
国密证书
- 由国家密码管理局颁布,其标准为《GM/T 0015 基于SM2密码算法的数字证书格式规范》。
-
国密套件
- 主要套件有两个:ECC_SM4_SM3、ECDHE_SM4_SM3,实现ECC和ECDHE的算法为SM2。
- 密钥交换算法使用ECC算法时由客户端产生预主密钥,使用ECDHE算法则使用密钥交换参数。
主要区别
- 版本号:TLS1.1的版本号为0x0301,国密协议版本号为0x0101
- 加密算法:主要使用国密局颁布的SM1/2/3/4系列国产密码算法
- 伪随机算法:标准ECC使用SHA1,国密协议可使用国产SM3算法
- 密钥交换:标准ECC使用DH算法,国密协议使用SM2算法
- 数字证书:国密协议要求使用双证书,即签名证书和加密证书
- 具体报文格式见《GM/T 0024 SSL VPN技术规范》