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

1 本章概要

第五章学习了公钥密码;第九章学习了数字签名。其中公钥都扮演了重要的角色。然后,如果不能判断自己手上的公钥是否合法,就有可能遭到中间人攻击。证书,就是用来对公钥合法性提供证明的技术。

我们先介绍什么是证书,以及证书的应用场景,然后介绍 X.509 证书规范,以及利用证书来进行公钥传输的公钥基础设施(PKI)和认证机构。

2 证书

2.1 什么是证书

公钥证书(Public-Key Certificate,PKC)其实和驾照很相似,里面记有姓名、组织、邮箱、地址等个人信息,以及属于此人的公钥,并由认证机构(Certification Authority、Certifying Authority,CA)施加数字签名。只要看到公钥证书,我们就可以知道认证机构认定该公钥的确属于此人。公钥证书也简称为证书(certificate)。
认证机构就是能够认定“公钥确实属于此人”并能够生成数字签名的个人或者组织。既有国际性组织和政府所设立的组织,也有通过认证服务来盈利的一般企业,此外个人也可以成立认证机构。世界上最有名的认证机构当属 VeriSign 公司。

2.2 证书的应用场景

  1. Bob 生成密钥对。这里秘钥既可以 Bob 自己生成,也可以由认证机构代为生成。
  2. Bob 在认证机构 Trent 注册自己的公钥。 Bob,需要请认证机构 Trent 对他的公钥加上数字签名(即生成证书)。
  3. 认证机构 Trent 用自己的私钥对 Bob 的公钥施加数字签名并生成证书。
  4. Alice 得到带有认证机构 Trent 的数字签名的 Bob 的公钥(证书)。
  5. Alice 使用认证机构 Trent 的公钥验证数字签名,确认 Bob 的公钥的合法性。
  6. Alice 用 Bob 的公钥加密消息并发送给 Bob。
  7. Bob 用自己的私钥解密密文得到 Alice 的消息。

3 证书标准规范 X.509

  1. 签名前的证书——签名对象的信息
  2. 数字签名算法——对证书签名时所使用的算法
  3. 数字签名——对证书施加的数字签名

4 公钥基础设施(PKI)

4.1 什么是公钥基础设施

公钥基础设施(Public-Key Infrastructure)是为了能够更有效地运用公钥而制定的一些列规范和规格的总称,简称 PKI。它只是一个总称。

4.2 PKI 的组成要素

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

4.3 认证机构的工作

  1. 生成密钥对
  2. 注册证书
  3. 作废证书与 CRL(证书作废清单 Certificate Revocation List)

4.4 证书的层级结构

证书颁发:根CA -> 分公司认证机构 -> 办事处认证机构 -> 用户。
验证证书:根CA -> 分公司认证机构 -> 办事处认证机构 -> 用户。如果连根CA都无法验证说明证书是存在问题的。

5. 对证书的攻击

5.1 在公钥注册之前进行攻击

5.2 注册相似人名进行攻击

5.3 窃取认证机构的私钥进行攻击

5.4 攻击者伪装成认证机构进行攻击

5.5 钻 CRL 的空子进行攻击

Mallory 在晚上入侵 Bob 的电脑,向 Alice 发了邮件。第二天早上, Bob 发现自己电脑被入侵,而且私钥被盗,于是 Bob 赶紧联系认证机构 Trent ,通知自己的公钥被盗,但是已经晚了。同时 Bob 也可以是坏人,利用这个时间差。

6. 关于证书的 Q&A

6.1 为什么需要证书

疑问:我不理解证书的必要性。通过认证机构的证书来获取公钥,和直接获取公钥到底有什么不一样呢?
回答:从认证机构获取公钥,可以降低遭到中间人攻击的风险。因为带有证书的公钥是经过认证机构进行数字签名的,事实上无法被篡改。

6.2 通过自己的方法进行认证是不是更安全

疑问:使用公开的技术就等于为攻击者提供了用于攻击的信息,相比之下,还是使用公司自己开发的保密的认证方法更安全吧?
回答:靠隐蔽式来保证安全是错误的!

6.3 为什么要相信认证机构

???

7. 本章小结

从使用证书的场景开始,学习了证书标准规范 X.509、颁发证书的认证机构,以及公钥基础设施(PKI)的相关知识。还介绍了对 PKI 的攻击方法和对策。
无论是数字签名、证书。还是认证机构的层级结构,都不可能在完全不可信的状态下创造出信任关系。这是一种社会的实体问题。

8. 小测验

  1. 证书是认证机构将用户的公钥加密后的产物
  2. 要确认证书中所包含的公钥是否合法,需要得到认证机构的公钥
  3. 世界上颁发的所有证书,沿着认证机构的层级关系都能够找到唯一的根 CA
  4. 用户发现自己的私钥泄露之后,需要立刻联系注册相应公钥的认证机构
  5. 用户需要定期从认证机构获取 CRL