公开密钥加密”和“数字签名”无法保证公开密钥确实来自信息的发送者。因此,就算公开密钥被第三者恶意替换,接收方也不会注意到。不过,如果使用本节讲解的数字证书,就能保证公开密钥的正确性。
加密处理流程
A持有公开密钥PA和私有密钥SA,现在想要将公开密钥PA发送给B。
A首先需要向认证中心(Certification Authority, CA)申请发行证书,证明公开密钥PA确实由自己生成。
认证中心里保管着他们自己准备的公开密钥PC和私有密钥SC。
A将公开密钥PA和包含邮箱信息的个人资料发送给认证中心。
认证中心对收到的资料进行确认,判断其是否为A本人的资料。确认完毕后,认证中心使用自己的私有密钥SC,根据A的资料生成数字签名。
认证中心将生成的数字签名和资料放进同一个文件中。
然后,把这个文件发送给A。
这个文件就是A的数字证书。
A将作为公开密钥的数字证书发送给了B。
B收到数字证书后,确认证书里的邮件地址确实是A的地址。接着,B获取了认证中心的公开密钥。
B对证书内的签名进行验证,判断它是否为认证中心给出的签名。证书中的签名只能用认证中心的公开密钥PC进行验证。如果验证结果没有异常,就能说明这份证书的确由认证中心发行。
确认了证书是由认证中心发行的,且邮件地址就是A的之后,B从证书中取出A的公开密钥PA。这样,公开密钥便从A传到了B。
解说
通过数字证书,信息的接收者可以确认公开密钥的制作者。
B得到了认证中心的公开密钥,但此处仍有一个疑问。
那就是,B得到的公开密钥PC真的来自认证中心吗?
由于公开密钥自身不能表示其制作者,所以有可能是冒充认证中心的X所生成的。也就是说,这里同样存在公开密钥问题(请参考下图)。
实际上,认证中心的公开密钥PC是以数字证书的形式交付的,会有更高级别的认证中心对这个认证中心署名(请参考下图)。
就像下页图中的树结构一样,由上面的认证中心为下面的认证中心发行证书。
那么,我们来看看这个树结构是怎么形成的吧。假设存在一个被社会广泛认可的认证中心A。此时出现了一个刚成立的公司B,虽然B想要开展认证中心的业务,但它无法得到社会的认可。
于是B向A申请发行数字证书。当然A会对B能否开展认证中心业务进行适当的检测。只要A发行了证书,公司B就可以向社会表示自己获得了公司A的信任。于是,通过大型组织对小组织的信赖担保,树结构就建立了起来。
最顶端的认证中心被称为“根认证中心”(root CA),其自身的正当性由自己证明。对根认证中心自身进行证明的证书为“根证书”。如果根认证中心不被信任,整个组织就无法运转。因此根认证中心多为大型企业,或者与政府关联且已经取得了社会信赖的组织。
补充说明
其实在网站之间的通信中同样也要用到数字证书。只要能收到来自网站的含有公开密钥的证书,就能确认该网站未被第三者冒充。
此处的证书叫作“服务器证书”,同样由认证中心发行。个人的证书会与他的邮箱信息相对应,而服务器证书与域名信息相对应。因此,我们还可以确认网站域名和存储网站本身内容的服务器是由同一个组织来管理的。
数字证书就是像这样通过认证中心来担保公开密钥的制作者。这一系列技术规范被统称为“公钥基础设施”(Public Key Infrastructure, PKI)。
参考: 我的第一本算法书 5-10 数字证书