算法初接触 | 安全算法[数字证书]

106 阅读5分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 12月更文挑战」的第1天

数字证书

“公开密钥加密”和“数字签名”无法保证公开密钥确实来自信息的发送者。因此,就算公开密钥被第三者恶意替换,接收方也不会注意到。不过,如果使用数字证书,就能保证公开密钥的正确性

图解

01

1.jpg
A持有公开密钥PA和私有密钥SA现在想要将公开密钥PA发送给B

02

2.jpg
A首先需要向认证中心(Certification Authority,CA)申请发行证书,证明公开密钥PA确实由自己生成

03

3.jpg
认证中心里保管着他们自己准备的公开密钥Pc和私有密钥Sc

04

4.jpg
A将公开密钥PA和包含邮箱信息的个人资料发送给认证中心

05

5.jpg
认证中心对收到的资料进行确认,判断其是否为A本人的资料。确认完毕后,认证中心使用自己的私有密钥Sc,根据A的资料生成数字签名。

06

6.jpg
认证中心将生成的数字签名和资料放进同 一个文件中。

提示:认证中心是管理数字证书的组织机构。原则上谁都可以成为认证中心,所以认证中心的数量也比较多,但建议在经过政府审查的大型企业机构进行申请,这些机构更令人放心。

07

7.jpg
然后,把这个文件发送给A

08

8.jpg
这个文件就是A的数字证书

09

9.jpg
A将作为公开密钥的数字证书发送给了B

10

10.jpg
B收到数字证书后,确认证书里的邮件地址确实是A的地址。接着,B获取了认证中心的公开密钥

11

11.jpg
B对证书内的签名进行验证,判断它是否为认证中心给出的签名。证书中的签名只能用认证中心的公开密钥P。进行验证。如果验证结果没有异常,就能说明这份证书的确由认证中心发行

12

12.jpg
确认了证书是由认证中心发行的,且邮件地址就是A的之后,B从证书中取出A的公开密钥PA。这样,公开密钥便从A传到了B

13

13.jpg
我们来看看公开密钥的交付过程有没有什么问题

14

14.jpg
假设X冒充A,准备向B发送公开密钥Px

15

15.jpg
但是,B没有必要信任以非证书形式收到的公开密钥

16

16.jpg
假设X为了假冒A,准备在认证中心登记自己的公开密钥。然而X无法使用A的邮箱地址,因此无法获得A的证书

解说
通过数字证书,信息的接收者可以确认公开密钥的制作者。
在步骤10中,B得到了认证中心的公开密钥,但此处仍有一个疑问。
那就是,B得到的公开密钥P。真的来自认证中心吗?
由于公开密钥自身不能表示其制作者,所以有可能是冒充认证中心的X所生成的。也就是说,这里同样存在公开密钥问题(见下图)。
17.jpg
实际上,认证中心的公开密钥P。是以数字证书的形式交付的,会有更高级别的认证中心对这个认证中心署名(见下图)。
18.jpg
就像下页图中的树结构一样,由上面的认证中心为下面的认证中心发行证书。那么,我们来看看这个树结构是怎么形成的吧。假设存在一个被社会广泛认可的认证中心A。此时出现了一个刚成立的公司B,虽然B想要开展认证中心的业务,但它无法得到社会的认可。
于是B向A申请发行数字证书。当然A会对B能否开展认证中心业务进行适当的检测。只要A发行了证书,公司B就可以向社会表示自己获得了公司A的信任。于是,通过大型组织对小组织的信赖担保,树结构就建立了起来。
最顶端的认证中心被称为“根认证中心”(root CA),其自身的正当性由自己证明。对根认证中心自身进行证明的证书为“根证书”。如果根认证中心不被信任,整个组织就无法运转。因此根认证中心多为大型企业,或者与政府关联且已经取得了社会信赖的组织。
19.jpg

补充说明
到目前为止,我们了解的都是个人之间交付公开密钥的例子,其实在网站之间的通信中同样也要用到数字证书。只要能收到来自网站的含有公开密钥的证书,就能确认该网站未被第三者冒充。
此处的证书叫作“服务器证书”,同样由认证中心发行。个人的证书会与他的邮箱信息相对应,而服务器证书与域名信息相对应。因此,我们还可以确认网站域名和存储网站本身内容的服务器是由同一个组织来管理的。
数字证书就是像这样通过认证中心来担保公开密钥的制作者。这一系列技术规范被统称为“公钥基础设施”(Public Key Infrastructure, PK1)。