1 本章概要
第五章学习了公钥密码;第九章学习了数字签名。其中公钥都扮演了重要的角色。然后,如果不能判断自己手上的公钥是否合法,就有可能遭到中间人攻击。证书,就是用来对公钥合法性提供证明的技术。
我们先介绍什么是证书,以及证书的应用场景,然后介绍 X.509 证书规范,以及利用证书来进行公钥传输的公钥基础设施(PKI)和认证机构。
2 证书
2.1 什么是证书
公钥证书(Public-Key Certificate,PKC)其实和驾照很相似,里面记有姓名、组织、邮箱、地址等个人信息,以及属于此人的公钥,并由认证机构(Certification Authority、Certifying Authority,CA)施加数字签名。只要看到公钥证书,我们就可以知道认证机构认定该公钥的确属于此人。公钥证书也简称为证书(certificate)。
认证机构就是能够认定“公钥确实属于此人”并能够生成数字签名的个人或者组织。既有国际性组织和政府所设立的组织,也有通过认证服务来盈利的一般企业,此外个人也可以成立认证机构。世界上最有名的认证机构当属 VeriSign 公司。
2.2 证书的应用场景
- Bob 生成密钥对。这里秘钥既可以 Bob 自己生成,也可以由认证机构代为生成。
- Bob 在认证机构 Trent 注册自己的公钥。 Bob,需要请认证机构 Trent 对他的公钥加上数字签名(即生成证书)。
- 认证机构 Trent 用自己的私钥对 Bob 的公钥施加数字签名并生成证书。
- Alice 得到带有认证机构 Trent 的数字签名的 Bob 的公钥(证书)。
- Alice 使用认证机构 Trent 的公钥验证数字签名,确认 Bob 的公钥的合法性。
- Alice 用 Bob 的公钥加密消息并发送给 Bob。
- Bob 用自己的私钥解密密文得到 Alice 的消息。
3 证书标准规范 X.509
- 签名前的证书——签名对象的信息
- 数字签名算法——对证书签名时所使用的算法
- 数字签名——对证书施加的数字签名
4 公钥基础设施(PKI)
4.1 什么是公钥基础设施
公钥基础设施(Public-Key Infrastructure)是为了能够更有效地运用公钥而制定的一些列规范和规格的总称,简称 PKI。它只是一个总称。
4.2 PKI 的组成要素
- 用户——使用 PKI 的人
- 认证机构——颁发证书的人
- 仓库——保存证书的数据
4.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. 小测验
- 证书是认证机构将用户的公钥加密后的产物
- 要确认证书中所包含的公钥是否合法,需要得到认证机构的公钥
- 世界上颁发的所有证书,沿着认证机构的层级关系都能够找到唯一的根 CA
- 用户发现自己的私钥泄露之后,需要立刻联系注册相应公钥的认证机构
- 用户需要定期从认证机构获取 CRL