数字证书 —— 为公钥加上数字签名

介绍:

数字证书也称之为公钥证书(Public Key Certificate, PKC)是一种将类似于现实世界中的证书的功能在计算机世界中实现的技术。现实世界中的证书用以证明某人在某个领域的资格,数字证书用 以证明公钥的所有权。接下来我们可以简单对比一下两者的区别。

现实世界中的证书
要开车得先考驾照,驾照上面记有本人的照片、姓名、出生日期等个人信息,以及有效期、准驾车辆的类型等信息,并由公安局在上面盖章。我们只要看到驾照,就可以知道公安局认定此人具有驾驶车辆的资格。

计算机世界中的数字证书
公钥证书其实和驾照很相似,里面可以记有姓名,组织,地址等个人\组织信息,以及属于此人\组织的公钥,并由认证机构(Certificate Authority、Certififying Authority, CA)施加 数字签名。只要看到公钥证书,我们就可以知道认证机构认定该公钥的确属于此人\组织。

可能很多人都没听说过认证机构,认证机构就是能够认定“公钥确实属于此人”并能够生成数字签名的个人或者组织。认证机构中有国际性组织和政府所设立的组织,也有通过提供认证服务来盈利的一般企业。此外 个人也可以成立认证机构。有名的认证机构包括VeriSign等。


为什么需要数字证书
我们可以再回顾一下非对称密码中的内容,消息的接收者鲍勃需要先把自己的公钥提供给消息的发送者帕蒂,帕蒂用鲍勃的公钥将消息加密后发送出去。但这里存在一个问题,帕蒂所收到的公钥真的是鲍勃的公钥吗?
如果在通信的链路中,有另一个人将自己的公钥伪造成鲍勃的公钥将其发给了帕蒂,帕蒂误以为这是鲍勃的公钥,并用它来对消息进行加密后发送出去。
由于密钥对是成对出现的,这时候通信链路中的密文消息就只有伪造者才能对其解密,而鲍勃却无法正确地解密帕蒂发给自己的消息。这种情况就称之为中间人攻击

公钥基础设施(PKI)

为了解决中间人攻击的问题,就出现了公钥基础设施(Public-Key Infrastructure)来防止公钥被伪造。

公钥基础设施是为了能够更有效地运用公钥而制定的一系列会犯和规格的总称。公钥基础设施一般根据其英文缩写而简写称为PKI

PKI的组成要素主要有3个:

(1) 用户——使用PKI的人。
(2) 认证机构——颁发证书的人。
(3) 仓库——保存证书的数据库。

不过由于PKI中用户和认证机构不仅限于“人”(也有可能是计算机),因此可以给他们起一个特殊的名字,叫作实体(entity)。实体就是进行证书和密钥相关处理的行为主体。

认证机构的工作

生成密钥对
生成密钥对有两种方式:一种是由PKI用户自行生成,一种是由认证机构来生成。

在认证机构生成用户密钥对的情况下,认证机构需要将私钥发送给用户,具体的方法在RFC7292(PKCS #12: Personal Information Exchange Syntnx V1.1)中进行了规定。

注册证书
在用户自行生成密钥对的情况下,用户会请求认证机构来生成证书。申请证书时所使用的规范是由RFC2986(PKCS #10: Certification Request Syntax Specification Version V1.7) 等定义。

认证机构根据其认证业务准则(Certification Practice Statement, CPS)对用户的身份进行认证,并生成证书。在生成证书时,需要使用认证机构的私钥来进行数字签名。生成的证书格式时由X.509 定义的。

作废证书
当用户的私钥丢失、被盗时,认证机构需要对证书进行作废(revoke)。此外,即便私钥安然无恙,有时候也需要作废证书,例如员工从公司离职导致其失去私钥的使用权限,或者时名称变更导致和 证书中记载的内容不一致等情况。

纸质证书只要撕毁就可以作废了,但这里的证书是数字信息,即便从仓库中删除也无法作废,因为用户会保存证书的副本,但认证机构又不能入侵用户的电脑将副本删除。

要作废证书,认证机构需要制作一张证书作废清单(Certificate Revocation List),简称为CRL

CRL是认证机构宣布作废的证书一览表,具体来说,是一张已作废的证书序列号的清单,并由认证机构加上数字签名。证书序列号是认证机构在颁发证书时所赋予的变化,在证书中都会记载。

PKI用户需要从认证机构获取最新的CRL,并查询自己要用于验证签名(或者是用于加密)的公钥证书是否已经作废。这个步骤非常重要。

证书的层级结构

用来验证数字签名的认证机构的公钥,怎样才能判断它是否合法呢?对于认证机构的公钥,可以由其他的认证机构施加数字签名,从而对认证机构的公钥进行验证,即生成一张认证机构的公钥证书

一个认证机构来验证另一个认证机构的公钥,这样的关系可以迭代好几层。我们可以用某公司的内部PKI来类比。 假设杰瑞是闵行区办事处的一名员工,闵行区办事处员工的公钥证书都是由办事处认证机构颁发的(因为这样更容易认证本人身份)。对于办事处认证机构的公钥,则是由上海分公司认证机构颁发证书,而对于 上海分公司认证机构的公钥,则由北京总公司认证机构颁发证书,以此类推...。

不过这个链条不能无限延申,总要有一个终点,如果这个终点就是北京总公司认证机构(即不存在更高一层的认证机构)的话,该认证机构一般就称为根CA(Root CA)。而对于北京总公司认证机构,则 由北京总公司认证机构自己来颁发证书,这种对自己的公钥进行数字签名的行为称为自签名(self-sihnature)

+