PKI体系概述

PKI相关基本概念

PKI

PKI全称公钥基础设施,Public Key Infrastructure。

一种遵循既定标准的证书管理平台,利用公钥技术、数字证书为所有网络应用提供安全服务。

信息安全CIA三要素

一般而言,我们讲的信息安全三要素是指:保密性完整性可用性

这并不是说信息安全只有这三个点,其实还有诸如:有效性、真实性、不可抵赖性等等(当然这些特性其实从某种角度而言可以归纳进入三要素之中,可看作是更细分的特性)。而这些就是信息安全需要保障的。PKI体系主要偏向保障了数据的保密性、完整性、不可抵赖性和真实性等。

密码学术语

术语 英文 备注
明文 plaintext 需要被隐蔽的消息
密文 ciphertext 明文经变换形成的隐蔽形式
加密 encrypt 把明文转化为密文的过程
解密 decrypt 把密文还原成明文的过程
密钥 key 在加密或解密的算法中输入的参数

密钥

密钥就是“钥匙”。是加解密过程使用的钥匙,可以理解为锁门关门所使用的“钥匙”,从功能上讲这是相似的。数学上这是一个解开函数的已知量,例如:x+5=y,这里这个“5”就是密钥。加密过程就是知道x计算出y,解密就是知道y反推出x。需要特别指出的是,实际上加密与解密的密钥可以是相同的也可以是不同的,即知道加密的密钥与加密后的密文是不一定能计算出原文的(知道y与5计算不出x),至于原理,那就是数学的魅力了。

对称加密

简单的概括就是加密和解密使用的密钥是相同的。

常见的对称加密算法有DES,3DES,AES,RC2,RC4,RC5,SM4等。

  • 优点:加密计算量小,速度快,适合对大量数据进行加密的场景。

  • 缺点:密钥管理困难,需要安全的渠道来传输和管理密钥。

    • 管理密钥不便:通信双方都需要保存不同秘钥,当通信网络很大的时候,每多一个用户就需要保存很多额外的秘钥。

    • 传输密钥不便:最致命的是,这些密钥也只能通过网络进行传输,不可能用过面对面的方式交换秘钥。密钥的保存也会带来额外的负担;而且秘钥的传输过程需要进行加密,那么这样便进入了一个死循环。

下面简要提及一下对称加密算法,之前在论坛上看到过加密方法的具体实现,用代码写出来还是非常有难度的,所以现阶段暂时绕过,学习数通安全能了解各加密算法的特点即可。

DES

DES 全称 Data Encryption Standard,是一种使用密钥加密的块算法,就是将明文分组进行加密,每次按顺序取明文一部分。

现在认为是一种不安全的加密算法,因为现在已经有用穷举法攻破 DES 密码的报道了。

DES使用56位密钥(密钥原本为64bit ,去掉8位校验位,剩余56位参与运算),以现代计算能力24小时内即可被破解。虽然如此,在某些简单应用中,我们还是可以使用DES 加密算法。

3DES

3DES(或称为 Triple DES)是三重数据加密算法(TDEA,Triple Data Encryption Algorithm)块密码的通称。它相当于是对每个数据块应用三次 DES 加密算法。由于计算机运算能力的增强,原版 DES 密码的密钥长度变得容易被暴力破解;3DES 即是设计用来提供一种相对简单的方法,即通过增加 DES 的密钥长度来避免类似的攻击,而不是设计一种全新的块密码算法。

三次执行DES,分为两个大类

  1. 三个密钥的三重DES

    首先用密钥K1加密明文块P,然后用密钥K2加密,最后用密钥K3加密,其中K1,K2,K3各不相同

  2. 两个密钥的三重DES

AES

AES同样采用分组加密体制,每个分组长度为128位,密钥长度可以是128位16个字节、192位或256位。

因为 AES 加密算法的安全性要高于 DES 和 3DES,所以 AES 已经成为了主要的对称加密算法。AES 加密算法就是众多对称加密算法中的一种,它的英文全称是 Advanced Encryption Standard,翻译过来是高级加密标准,它是用来替代之前的 DES 加密算法的。

RC2

是Ron Rivest为RSA公司设计的变长密钥加密算法,它是一种block模式的密文,就是把信息加密成64位的数据。因为它可以使用不同长度的密钥,它的密钥长度可以从零到无限大,并且加密的速度依赖于密钥的大小。

RC5

是由RSA公司的Rivest于1994年设计的一种新型的分组密码算法。RC5类似于RC2,也是block密文,但是这种算法采用不同的block大小和密钥大小。另外此算法中数据所通过的round也是不同的。一般建议使用128位密钥的RC5算法,并运行12到16个rounds。它是一种分组长度、密钥长度和迭代轮数都可变的分组迭代密码算法。

SM1

SM1 为对称加密,盖算法的算法实现原理没有公开,他的加密强度和 AES 相当,需要调用加密芯片的接口进行使用。SM1 高达 128 bit 的密钥长度以及算法本身的强度和不公开性保证了通信的安全性。

由于 SM1 加密算法的不公开,我们无法知晓其内部的原理。

SM4

SM4 是一种 Feistel 结构的分组密码算法,其分组长度和密钥长度均为128bit。加解密算法与密钥扩张算法都采用 32 轮非线性迭代结构。解密算法与加密算法的结构相同,只是轮密钥的使用顺序相反,即解密算法使用的轮密钥是加密算法使用的轮密钥的逆序。

总结

算法名称 密钥 备注
DES 56位 密钥长度过短,可以在短时间内被暴力破解
3DES 3*56位 在DES加密算法上的技术可以轻松的实施Triple DES
AES 128/192/256 AES取代DES和3DES以增强安全性和效率已是大势所趋
RC2(Rivest算法) 可变 专利细节未公开
RC5 一般为128位 类似于RC2
SM1 128位,该算法不公开 SM1加密强度与AES相当。调用该算法时,需要通过加密芯片的接口进行调用
SM4 128位 SM4 无线局域网标准的分组数据算法。对称加密,密钥长度和分组长度均为128位。
其他 / /

非对称加密

非对称加密算法是现代密码学取得的最大成就之一,也是密码学近20年来能够快速发展和推广应用的主要原因之一。非对称加密算法中加密密钥和解密密钥不一样,并且解密密钥理论上很难根据加密密钥推算出来。

非对称加密算法的加密密钥是公开的,理论上任何人都可以获得这个公开的加密密钥进行数据加密。但是,使用公开的加密密钥加密的信息只有相应的解密密钥才能解开,而这个解密密钥一般是不公开的。在非对称加密算法中,加密密钥也叫公钥,解密密钥称为私钥。

目前比较常用的公钥加密算法,主要包含DH(Diffie-Hellman)、RSA(Ron Rivest、Adi Shamirh、LenAdleman)和DSA(Digital Signature Algorithm)算法。

RSA

RSA是被研究得最广泛的公钥算法,从提出到现在,经历了各种攻击的考验,逐渐为人们接受,普遍认为是目前最优秀的公钥方案之一。

RSA公开密钥密码体制的原理是:根据数论,寻求两个大素数比较简单,而将它们的乘积进行因式分解却极其困难,因此可以将乘积公开作为加密密钥。

目前1024位的RSA密钥虽然未被破解,但有研究称,在未来十年内,1024位的RSA密钥很可能被破解。因此目前商用RSA密码普遍选用了2048位或者更高的密钥位数。1024位已经被认为不太安全了。

RSA算法生成密钥对以及加解密过程:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
(1) 选择两个大素数P,Q

设P = 7,Q = 17

(2) 计算N = P x Q

N = 7 x 17 = 119

(3) 选择一个公钥E,使其不是(P - 1)与(Q - 1)的因子

(P - 1) = 6 = 2 x 3

(Q - 1) = 16 = 2 x 2 x 2 x 2

因此我们选的公钥E不能有因子2和3。我们取E = 5

(4) 选择私钥D,满足:(D x E) mod (P - 1) x (Q - 1) = 1

(D x 5) mod 6 x 16 = 1

(D x 5) mod 96 = 1

经计算,取D = 77

(5) 加密时,从明文PT计算密文CT:CT = P*T^E mod N

假设明文为10

CT = 10^5 mod 119 = 40

(6) 将密文CT发送给接收方

将40发送给接收方

(7) 解密时,从密文CT得到明文PT:PT = C*T^D mod N

PT = 40^77 mod 119 =10

从上述例子可以看出,RSA算法本身很简单,关键是选择正确的密钥。

DH

Diffie-Hellman算法本身是非对称加密的一种, 但这个算法只能用于密钥交换,不能用于加解密。

Diffie-Hellman 算法的安全性在于,在有限域中的离散对数计算难度比同一个域中的指数计算难得多。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
密钥交换过程

(1) Alice与Bob确定两个大素数n和g,可以不保密

取 n = 11, g = 7

(2) Alice选择另一个大随机数x,并计算 A = g ^ x mod n

取 x = 3,A = 7 ^ 3 mod 11 = 2

(3) Alice将A发给Bob

(4) Bob选择另一个大随机数y,并计算 B = g ^ y mod n

取 y = 6, B = 7 ^ 6 mod 11 = 4

(5) Bob将B发给Alice

(6) Alice计算共享密钥K1

K1 = B ^ x mod n = 4 ^ 3 mod 11 = 9

(7) Bob计算共享密钥K2

K2 = A ^ y mod n = 2 ^ 6 mod 11 = 9

通过密钥交换过程可以看出来,最终计算的K1和K2是相等的,后续就可以用这个共享密钥进行加解密了。例如运用在ipsec vpn前的协商过程。

这里讲个故事理解dh算法为什么能公开协商出私密的共享密钥

打个比方,蒜老大有这全球独一无二的蒜,并且油大叔也有全球独一无二的油,只有他自己知道是怎么做出来,不管他用的什么原料,不管他从哪里挤出来的,反正全球都是一家。
现在油大叔用他的排骨和油制做了油炸排骨。因为排骨是他们俩共同确定的食材,蒜老大用蒜和排骨制作了蒜香排骨,他们各自把做好,菜是通过外卖送到对方那里。
不巧的是中间有一个隔壁老王买通了骑手,在他们的外卖里面各夹了一块排骨作为研究。现在蒜老大收到了油大叔的油炸拍过的排骨,再用自己的大蒜和油炸排骨放在一起炒了一下,做出了蒜香炸排骨。同样的方式,油大叔用自己的油和蒜香排骨一起炒了一下。也制作出蒜香炸排骨,他们最后制作出来的蒜香炸排骨是一模一样的,但是隔壁王老板制作不出一模一样的,因为他没有蒜和油。

(原视频来自于B站技术蛋老师-《【不懂数学没关系】DH算法 | 迪菲-赫尔曼Diffie–Hellman 密钥交换》)

SM2

SM2算法是我国自主知识产权的商业密码算法,是ECC的一种。为非对称加密,基于ECC。该算法已公开。由于该算法基于ECC,故其签名速度与秘钥生成速度都快于RSA。ECC 256位(SM2采用的就是ECC 256位的一种)安全强度比RSA 2048位高,但运算速度快于RSA。

国家密码管理局关于发布《SM2椭圆曲线公钥密码算法》公告

ECC

ECC全称为elliptic curve cryptography,即椭圆曲线密码学算法。安全性建立在以下数学困难问题基础之上。数学问题这里就不展开了。

ECC可以使用比RSA短得多得密钥得到相同得安全性,因此可以减少处理负荷,降低处理功耗。

总结

算法 设计者 用途 安全性
RSA RSA数据安全 加密;数字签名;密钥交换 大数分解
DSA NSA 数字签名 离散对数
DH Diffie&Hellman 密钥交换 完全向前保密
其他 / / /

散列算法

散列算法:把任意长度的输入变换成固定长度的输出,以下是几种常见散列算法。

散列算法并不是加密算法

特点 备注
正向快速 给定明文和Hash算法,在有限时间和有限资源内计算Hash值
不可逆性 给定任意的Hash值,在有限时间内很难逆推出明文
输入敏感 如果输入的数据信息被轻微修改,输出的Hash值也会有很明显的变化
抗碰撞性 意输入不同的数据,其输出的Hash值不可能相同。对于一个给定的数据块,找到和它hash值相同的数据块极为困难

摘要算法主要用于检验数据完整性或者说校验数据是否被篡改。比如我们对文件做一个摘要,只要有人修改过文件内容,那么摘要值就和原摘要值不一样了,我们可以据此判断文件是否被篡改。

MD5

信息认证代码是计算机安全领域广泛使用的一种散列函数,用以提供消息的完整性保护。将数据(如汉字)运算为另一固定长度值。其作用是让大量信息在用数字签名软件签署私人密钥前被“压缩”成一种保密的格式。除了可以用于数字签名,还可以用于安全访问认证。

SHA-1

安全散列算法SHA(Secure Hash Algorithm)是由NIST开发的。在1994年对原始的HMAC功能进行了修订,被称为SHA-1。SHA-1在RFC2404中描述。SHA-1产生160位的消息摘要。SHA-1比MD5要慢,但是更安全。因为它的签名比较长,具有更强大的防攻破功能,并可以更有效的发现共享的密钥。

SHA-2

SHA-2是SHA-1的加强版本,SHA-2算法相对于SHA-1加密数据长度有所上升,安全性能要远远高于SHA-1。SHA-2算法包括SHA2-256、SHA2-384和SHA2-512,密钥长度分别为256位、384位和512位。

SM3

国密算法是国家密码管理局编制的商用算法,用于密码应用中的数字签名和验证、消息认证码的生成与验证以及随机数的生成,可满足多种密码应用的安全需求。
以上几种算法各有特点,MD5算法的计算速度比SHA-1算法快,而SHA-1算法的安全强度比MD5算法高,SHA-2、SM3算法相对于SHA-1来说,加密数据位数的上升增加了破解的难度,使得安全性能要远远高于SHA-1。

总结

项目 全称 签名长度 安全级别
MD5 Message Digest 5 128位
SHA1 Secure Hash Algorithm 1 160位
SHA2 Secure Hash Algorithm 2 224位、256位、384位、512位
其他 HMAC、SM3等

加密算法总结

加密技术 特点 优点 缺点
对称加密 加密、解密使用相同的密钥 速度快、算法简单,开销小,密文紧凑,适合加密大量数据 密钥管理复杂,导致实现困难,扩展性差
非对称加密 加密、解密使用不同的密钥(公钥、私钥),又称为公钥加密;公钥公开,私钥保密;公加私解、私加公解 密钥管理简单、通常只用于数字签名 算法复杂,速度慢、密文不紧凑,大数据加密不利于网络传输

PKI体系自底向上理解

这里采用从下向上的方法,介绍PKI体系是如何一步步解决信息安全的问题。

第零阶段(明文传输)

传输过程

此时A与B通信时没有任何加密手段,信息完全在网络上明文传输。随时可能被抓包监听,并且也无法确定对方身份。

问题

  1. 由于是明文传输,类似于裸奔,如果此时C想获取A与B之间传输的信息,是非常容易的,并且还可以删除、修改数据。是最不安全的通信方式。

第一阶段(对称加密)

传输过程

此时A与B通信使用共享的对称加密密钥加密数据,加密解密数据使用同一把密钥,并且密钥通过网络传输给对方。

整个过程相对简单,双方用事先约定好的算法与密钥加解密即可完成加密传输的工作,在能保证密钥不泄露得情况下,数据得保密性也是能够得到一定的保障。

但是不难看出,这个过程中存在着一个致命得问题:密钥的传输问题。在对称加密的方式下,这个问题是无法完全解决的,只要有传输就有截取的风险。

问题

  1. 对称加密的密钥在网络上公开传输,并且对称加密暴力破解难度较低,此时C想要截获信息,只需要得到在网络上公开传输的密钥或者暴力破解即可,因为任何截取了密钥的人都可以窃取、篡改加密的消息。
  2. 在密钥管理中,n个用户的团队需要协商n*(n-1)/2个不同的密钥,管理复杂。

第二阶段(公钥加密)

传输过程

利用了非对称加密的特性来解决密钥传输容易被截取的风险。在这个过程中,除了双方各自的私钥以外,其他的加密过程都是可以公开的,但是没有私钥就无法获取数据内容。私钥也不用做任何的传输(如果可以,保存在脑子里都行),降低或者避免了截取的风险。这个过程做一下文字描述:A需要给B发送消息时,使用B的公钥加密,然后通过网络传输,整个密文只有B能够用自己的私钥解开,其他人都不行,包括A。B需要给A发送消息同理。这个过程中需要双方共同约定使用的算法,并各自生成一对公私钥。

问题

  1. 由于是非对称加密,加密速度慢,CPU消耗大,且加密后报文长度可能会翻倍,容易产生报文分片,对于大量文件来说不太友好。
  2. 如果此时C想干扰A于B之间的通信,虽然C无法直接解密我们的数据,但是可以把整个数据更改掉,甚至删除,对报文完整性和可信度产生干扰。由于这个过程中的公钥是公开的,所以黑客截取数据后虽然无法打开,但它可以选择修改密文,甚至直接替换一段新的用公钥加密的数据,在发送放行,作为接收方,是没有办法进行区分的。

第三阶段(数字信封)

数字信封的概念

数字信封的原理是采用对称密码算法对大批量数据进行加密,然后采用非对称密码算法对其中的对称密钥进行加密;解密过程时,首先用非对称密码算法解密获取对称密钥,然后使用对称密钥解密数据,获取数据明文。

传输过程

由于非对称加密在加密解密过程中消耗时间太长,速度慢,占用资源多,但是恰好对称加密速度快,消耗资源少,所以一般都是对称加密和非对称加密一起使用。即:大量数据的传输利用对称加密,然后使用非对称加密的方式传输对称加密的密钥,当然,如果是小数据的传输也可以直接使用非对称加密方式。

  1. 发送方A需要预先获取接收方B的公钥,然后随机产生对称密钥,并使用该密钥加密数据;

  2. 发送方A使用公钥对对称密钥进行加密;

  3. 发送方A把数据密文和对称密钥密文一起发送给接收方B;

  4. 接收方B使用自己的私钥对密钥密文解密,获取对称密钥;

  5. 接收方B使用密钥对数据密文进行解密,获取明文数据。

问题

  1. 此时存在C拦截A与B之间发送的信息,用自己的对称密钥加密伪造虚假的信息,然后用B在网络上公开的公钥加密对称密钥后发送给B,B收到消息后,解密后得到明文,并且始终认为自己在和A沟通,但是实际上这是已经是C在和A沟通了。这里很显然是没法确认消息完整性和身份验证。

第四阶段(数字签名)

数字签名的概念

数字签名(又称公钥数字签名)是只有信息的发送者才能产生的别人无法伪造的一段数字串,这段数字串同时也是对信息的发送者发送信息真实性的一个有效证明。

数字签名有两种功效:一是能确定消息确实是由发送方签名并发出来的,因为别人假冒不了发送方的签名。二是数字签名能确定消息的完整性。因为数字签名的特点是它代表了文件的特征,文件如果发生改变,数字摘要的值也将发生变化。

信息是由签名者发出的

信息自签名后没有作过任何修改

一次数字签名涉及到一个哈希函数、接收者的公钥、发送方的私钥。

传输过程

  1. 发送方使用哈希函数对消息进行摘要处理,生成消息摘要。
  2. 发送方使用私钥对消息摘要进行加密,生成数字签名。
  3. 发送方将消息和数字签名一起发送给接收方。
  4. 接收方使用发送方的公钥对数字签名进行解密,得到消息摘要。
  5. 接收方使用哈希函数对收到的消息进行摘要处理,得到消息摘要。
  6. 接收方比对解密得到的消息摘要和计算得到的消息摘要,如果一致,则证明消息的完整性和真实性得到了保证。
过程图解(按AB双方视角)

过程图解(按时间顺序)

到此为止,我们利用对称加密,非对称加密,散列算法,解决了大部分安全问题,尤其是解决了完整性的问题。

问题

  1. C更改B的公钥,A获得的是攻击者的公钥。C拦截B发送给A的信息,用C的私钥对伪造的信息进行数字签名然后与使用A的公钥的加密伪造的信息一起发送给A。A收到加密信息后,解密得到的明文,并验证明文没有被篡改,则A始终认为是B发送的信息。
  2. 黑客可以把hash值都替换成他所修改的数据的对应hash值,这样我们就无法判断了。所谓“加盐”就是我们每一次使用算法生产摘要的时候,都在加密前的字段里固定加入一段数据,但这段字符串不参与传输,接收方验证的时候也同样加入该数据得到摘要用于校验。
  3. 整个过程中我们都在谈论技术、流程、工具的安全、保证、验证,忽略了一个重要因素——人。人才是最不可控的因素。就像前面提到的私钥我们说理论上不会被人知道,理论上也存在泄露可能,这都是因为人。记在脑子里都说不定啥时候说梦话泄露。甚至还会出现矢口否认,你拿到的公钥不是我的公钥,或者就真的被骗了拿到了一个错误的公钥,或者就故意拿个错的公钥栽赃,所以我们需要一个保证来对此负责,或者说及时止损,一旦发现可能泄露,停止信任。

第五阶段(数字证书)

数字证书的概念

在现实生活中,人们所从事的活动主体凭证一般有以下几种:1、当事人本身,2、有效证件,3、亲笔签名,等等。这些凭证的共有特点是实物性,可以得到确认和追诉。

而在INTERNET的世界里,人们所面对和处理的都是数字化的信息或数据,对在INTERNET上所发生的某个动作行为或交易如何得到确认及追诉,这就需要用一种统一的技术和方式。数字证书就解决了以上所说的问题。

数字证书是用电子手段来证实一个用户的身份和对网络资源的访问权限。数字证书是由权威机构(CA)采用数字签名技术,颁发给用户,用以在数字领域中证实用户其本身的一种数字凭证。

数字证书的内部格式是由CCITT X.509国际标准所规定的,它主要包含了以下几点:

  • 证书拥有者的姓名,

  • 证书拥有者的公共密钥,

  • 证书的有效期,

  • 证书的序列号,

  • 颁发证书的单位机构,

  • 颁发证书单位的数字签名,

  • 证书的扩展信息。

数字证书是支撑互联网身份认证的重要技术手段,可以简单理解成经过 CA 权威结构签名认证过的站点信息。由于经过 CA 签名,第三方无法通过伪造手段冒充身份。

证书格式
格式 编码 后缀 可否包含私钥
DER 二进制 .der/.cer/.crt
PEM ASCII(Base64) .pem/.cer/.crt
PKCS#12 PKCS .p12/.pfx
证书分类
CA证书 本地证书 自签名证书
CA自身的证书;PKI系统中没有多层级CA,CA证书就是自签名证书;PKI系统中有多层级CA,则会形成一个CA层次结构,最上层的CA是根CA,它拥有一个CA“自签名”的证书;申请者通过验证CA的数字签名从而信任CA,任何申请者都可以得到CA的证书(含公),用以验证它所颁发的本地证书。 CA颁发给申请者的证书;本地证书就是通常意义上的证书,由用户向CA发起申请,CA审核通过后颁发给用户使用的证书。 自签名证书是设备为自己颁发的证书,由设备的预置CA进行签名;通过设备生成自签名证书和不带签名的证书,可以实现简单证书颁发功能。

CA的概念

CA(Certification Authority 认证中心)是用来颁发数字证书的权威机构,相当于现实生活中的公安局。它具有权威性、公正性和可靠性。其主要任务是受理数字证书的申请、签发及对数字证书的管理。在受理申请的同时,一般还会核对申请者的身份,以确保正确。

  • 证书由站点信息和 CA 签名组成,站点信息包含站点公钥,公钥用于协商对称加密密钥;
  • 证书由 CA 权威机构审核签发,签名用的是 CA 的私钥;
  • CA 公钥通常以根证书形式预装在系统内,客户端通过它来验证证书签名;
  • 有了数字签名,黑客无法对证书进行篡改,也无法伪造证书,因此无法部署仿冒站点;
  • 若只窃取原站点证书,不做篡改,客户端使用真实站点的公钥,而黑客无法掌握站点私钥,因此加密连接无法建立;
  • 如果篡改原站点证书,换上自己的公钥,但因为没有 CA 私钥无法生成合法签名,也会被识别出来;

传输过程

  1. 接收证书:接收方接收到需要验证的数字证书。
  2. 验证证书的有效性:检查证书的有效期,确保证书在有效时间范围内。
  3. 验证证书的签名:使用证书颁发机构的公钥验证证书的签名,以确保证书的完整性和真实性。
  4. 验证证书的主体信息:检查证书中的主体信息(如持有者的身份、域名等)是否与预期的接收方匹配。
  5. 验证证书的信任链:确认证书是否由受信任的证书颁发机构颁发,并沿着信任链验证上级证书的有效性。
  6. 检查证书的吊销状态:检查证书是否已被吊销,以确保其仍然有效。
  7. 确认加密算法和密钥长度:验证证书中使用的加密算法和密钥长度是否符合安全要求。
  8. 完成验证:如果所有步骤都通过,数字证书被认为是有效的,可以继续进行相关的安全操作。
  9. 开始安全通信:完成验证后即获得对方公钥,可以继续进行通信,在此基础上可能会有更多细节和安全考虑。

数据通信全过程

证书申请
  1. 准备申请资料:申请人需要准备相关的身份证明、组织信息或其他必要的资料。
  2. 选择证书颁发机构:根据需求选择可靠的证书颁发机构(CA)。
  3. 提交申请:向选定的 CA 提交数字证书申请,包括填写申请表格和提供所需的资料。
  4. 身份验证:CA 可能会进行身份验证,以确认申请人的身份和合法性。
  5. 审核申请:CA 会审核申请资料,确保其真实性和完整性。
  6. 颁发证书:如果申请审核通过,CA 将颁发数字证书给申请人。
  7. 安装证书:申请人将获得的数字证书安装到相关的系统或设备上。
  8. 配置和使用:根据证书的类型和用途,进行相应的配置和设置,以启用安全功能。
证书验证

第六阶段(完整的PKI体系)

除了对称加密,非对称加密,数字信封(指纹),数字签名,数字证书,CA机构以外,还需要证书废除列表CRL,CRL发布点等一系列附加部分。

PKI体系组成(按角色划分)

  1. 终端实体:

    终端实体是PKI产品或服务的最终使用者,可以是个人、组织、设备(如路由器、交换机)或计算机中运行的进程。

  2. 认证机构CA(Certificate Authority):

    CA是PKI的信任基础,是一个用于签发并管理数字证书的可信实体。其作用包括:发放证书、规定证书的有效期和通过发布CRL确保必要时可以废除证书。

  3. 注册机构RA(Registration Authority):

    RA是CA的延伸,可作为CA的一部分,也可以独立。RA功能包括个人身份审核、CRL管理、密钥对产生和密钥对备份等。PKI国际标准推荐由一个独立的RA来完成注册管理的任务,这样可以增强应用系统的安全性。

  4. 证书/CRL存储库:

    证书/CRL存储库负责证书和CRL的存储、管理、查询等。

PKI其他工作细节

此部分《PKI其他工作细节》转载自https://blog.51cto.com/1478762/1854580

证书注册

证书注册即证书申请,就是一个实体向CA自我介绍并获取数字证书的过程。实体向CA提供身份信息,以及相应的公钥,这些信息将成为颁发给该实体证书的主要组成部分。

实体向CA提出证书申请,有离线和在线两种方式。离线申请方式下,CA允许申请者通过带外方式(如电话、磁盘、电子邮件等)向CA提供申请信息。在线证书申请有手工发起和自动发起两种方式。以下是常用的证书注册方式:

  1. PKCS#10方式(离线注册方式)

    当无法通过SCEP协议向CA在线申请证书时,可以使用PKCS#10格式打印出本地的证书申请信息。用户以PKCS#10格式保存证书申请信息到文件中,并通过带外方式发送给CA进行证书申请。

  2. SCEP方式(在线注册/下载方式)

    通过简单证书注册协议SCEP(Simple Certification Enrollment Protocol),利用HTTP协议与CA或RA通信,发送证书注册请求或证书下载请求消息,下载CA/RA证书、本地证书,或者申请本地证书。SCEP方式是最常用的证书自动注册方式。

  3. 自签名证书

    PKI设备为自己颁发一个自签名证书,即证书签发者和证书主题相同。

证书更新

设备在证书即将过期前,先申请一个证书作为“影子证书”,在当前证书过期后,影子证书成为当前证书,完成证书更新功能。

申请“影子证书”的过程,实质上是一个新的证书注册的过程。

证书更新功能需要CA服务器的支持,即CA服务器必须支持证书更新功能。

证书下载

证书下载是指终端实体通过SCEP协议,向CA服务器查询并下载已颁发的证书,或者通过CDP指定机制和地址,下载已颁发的证书。该证书可以是自己的证书,也可以是CA证书,或其他终端实体的证书。

证书撤销

由于用户身份、用户信息或者用户公钥的改变、用户业务中止等原因,用户需要将自己的数字证书撤消,即撤消公钥与用户身份信息的绑定关系。在PKI中,CA撤销证书使用的方法为证书废除列表CRL,终端实体撤销自己的证书是通过带外方式申请的。

为了撤销自己的证书,终端实体必须采用带外方式通知CA服务器管理员。

管理员要求终端实体提供自己的Challenge Password(Challenge Password在证书注册时已作为PKCS10证书请求的属性发给了CA)。

如果终端实体提供的Challenge Password与CA服务器保存的一致,CA发布CRL来撤销证书。

CRL下载

CA/RA不会主动把CRL发布给终端实体,而是由终端实体主动发起CRL查询。有两种下载CRL的方法:CDP方式、SCEP方式。

CA如果支持CDP,在为终端实体颁发证书时,把CRL发布点的URL地址编码成CDP属性封装在证书中,终端实体根据CDP来下载CRL。

如果证书中未携带CDP信息,并且设备本地也没有配置CDP的URL地址,则设备通过SCEP协议向CA服务器请求CRL。终端实体通过SCEP协议获取证书时,以证书签发者名字和证书序列号作为查询关键字。

证书状态检查方式

当终端实体验证对端证书时,经常需要检查对端证书是否有效,例如对端证书是否过期、是否被加入证书黑名单中,即检查证书的状态。通常终端实体检查证书状态的方式有三种:CRL方式、OCSP方式、None方式。

  1. CRL方式

    如果CA支持CDP,那么当CA签发证书时,在证书中会包含CDP信息,描述了获取该证书CRL的途径和方式。终端实体利用CDP中指定的机制和地址来定位和下载CRL。

    如果PKI域下配置了CDP的URL地址,该地址将覆盖证书中携带的CDP信息,终端实体使用配置的URL来获取CRL。

  2. 在线证书状态协议OCSP(Online Certificate Status Protocol)方式

    如果CA不支持CDP,即证书中没有指定CDP,并且PKI域下也没有配置CRL的URL地址,终端实体可以使用OCSP协议检查证书状态。

  3. None方式

    如果终端实体没有可用的CRL和OCSP服务器,或者不需要检查对端证书状态,可以采用None方式,即不检查证书是否被撤销。

证书合法性验证

终端实体获取对端证书后,当需要对对端进行证书认证时,例如需要与对端建立安全隧道或安全连接,通常需要验证对端证书和证书签发者的合法性。如果证书签发者的证书无效或过期,则由该CA签发的所有证书都不再有效。但在CA证书过期前,设备会自动更新CA/RA证书,异常情况下才会出现CA证书过期现象。

为完成证书验证,除了需要对端证书外,本地设备需要下面的信息:信任的CA证书、CRL、本端数字证书及其私钥、证书认证相关配置信息。

证书验证的主要过程如下:

  1. 使用CA证书的公钥验证认证机构的签名是否正确。

  2. 根据证书的有效期,验证证书是否过期。

  3. 检查证书的状态,即通过CRL、OCSP、None等方式检查证书是否被撤销。

证书链验证

为验证一个数字证书的合法性,首先需要获得签发这个证书的CA的公钥(即获得CA证书),以便检查该证书上CA的签名。一个CA可以让另一个更高层次的CA来证明其数字证书的合法性,这样顺着证书链,验证数字证书就变成了一个叠代过程,最终这个链必须在某个“信任点”(一般是持有自签名证书的根CA或者是实体信任的中间CA)处结束。

所谓的证书链,是指从终端实体证书到根证书的一系列可信任证书构成的证书序列。任何终端实体,如果它们共享相同的根CA或子CA,并且已获取CA证书,都可以验证对端证书。一般情况下,当验证对端证书链时,验证过程在碰到第一个可信任的证书或CA机构时结束。

证书链的验证过程是一个从目标证书(待验证的实体证书)到信任点证书逐层验证的过程。