Web 技术总体上是去中心化的,但是为了使用域名,就需要依赖于一个中心化的 DNS 机制。后来,Web 上为了实现安全的加密通信,又引入了一个可信第三方,那就是 PKI 。这节咱们来看看 PKI 有什么作用,具体实现原理又是怎么样的。
先来看看什么是 PKI ,以及它是用来完成什么任务的。
PKI ,英文全称 Public Key Infrastructure ,翻译过来叫“公钥基础设施”。从名字就可以看出,PKI 是用来跟公钥密码学配合,完成互联网上的安全通信。PKI 的最核心的功能,就是提供数字证书。
通过提供数字证书,PKI 解决的核心问题是,在加密通信过程中让通信者确认对方身份。数字证书中会把一个人的公钥和一个人的身份绑定起来。例如,证书上会注明一个人叫 Bob ,公钥是 xxx 。这样,只要通信双方信任 PKI ,那么看到证书,就可以知道这个公钥的确是 Bob 这个人的,也就可以确认对方身份了。PKI 最常见的一种形式就是 CA ,但是也不局限于 CA 一种形式,稍后我们会展开聊聊。
总之,互联网上要实现安全的信息传递,是离不开 PKI 的。没有 PKI ,上电商网站的时候,我们都没有办法安全的把信用卡信息传递到服务器。而通常的 PKI 是一种中心化的基础设施,所以是 Web2.0 的除了 DNS 之外的一个中心化瓶颈。
PKI 的具体形式有多种,但是目的就是一个:构建信任。所谓信任,就是让通信的一方相信对方是他声称的那个人。
陌生人之间的信任通常都是通过中间人,或者说是可信第三方来达成的。例如,肉身世界,我和我朋友之间因为彼此认识,所以是通过一种直接的信任来交流的。而如果我要是想跟一个陌生人做生意,常见的方式就有个我俩共同认识的中间人去引荐。互联网上,两个要通信的人是不能见面的,其实很难直接去判断对方到底是不是他自己声称的那个人,解决方式是双方找一个共同信任的组织,来完成通信的,这个组织就是这里的“可信第三方”,而 PKI 就是加密通信过程中的可信第三方。例如,Alice 要跟 Bob 通信,Bob 把通信内容发过来的同时,会给 Alice 发一个证书过来,证书是 PKI 发出的,Alice 又信任 PKI ,这就相当于 Bob 跟 Alice 说:你看,这家 PKI 说我就是 Bob 这个人。
最常见的 PKI 就是 CA 。目前绝大多数的场合下信任都是通过 CA 来完成的,也可以说 CA 是最常见的 PKI 形式。CA 是 Certificate Authority ,中文经常翻译为“发证机构”,职责就是发行数字证书。CA 是一个中心化的组织,是一个私人公司。世界上最大的 CA 就是 Symantec ,赛门铁克公司。世界上大约三分之一的数字证书都是它发行的,因为签发证书是收费的,赛门铁克是一家标准的盈利性的私人公司。这样,一个有意思的问题来了,我们为啥要信任 CA 呢?其实并没有很有理想说服力的答案,就跟为啥我们要相信某家银行一样,其实就是从众心理,觉得大家都在用,估计是可信的吧。另外,有个第三方在那里参与,起码比直接相信对方要保险一些。
但是 CA 自己,也的确是有一些技术手段去增加自己的可信度的。CA 一般都是采用一个层级结构。顶端是 Root CA ,它会发布一个由自己签署的数字证书。也就是,我说我是 Peter ,你问有什么证据吗?我展示给你一个证书,但是这个证书其实是我自己制作和签署的。所以,对 Root CA ,用户要有无条件的信任。Root CA 接着去签署中级发证机构的证书,而由中级证书指明身份绑定关系。举个例子,如果去浏览器中查看 mail.google.com 的证书,可以看到顶级发证机构是 GTS Root R1,中级证书颁发机构是 GTS CA ,也就是 Google Trust Services 这个组织。Root CA 有一个很重要的特点,那就是当代主流浏览器一般都会自带各大 Root CA 的公钥,所以收到可以去验证顶级证书的签名,而中级机构的证书是被顶级证书的信用保证的,所以形成了一个信任链。
总之,PKI 的信任来源目前主要还是一种对中心化组织的信任。
当然,典型的 PKI ,就是通过 CA 来颁发证书,但是除了 CA ,PKI 还是有一些其他的实现形式的。
比较知名的一个是 Web Of Trust 思路。Web Of Trust 是 CA 的一个替代,是一种去中心化的信任机制。用来进行邮件加密的 PGP 系统会采用这套机制。这个思路用一个类比就比较好理解了,如果我和一个陌生人做生意,那么可以找一个中间人来帮我们引荐,这是一个中心化的思路了,但是,另外一个思路是,如果有很多人都同时跟我们双方认识或者间接认识,那么这样就可以通过一个信任网络,或者说多人见证的方式来完成信任的构建了。对应 Web Of Trust 的做法是,不同于 CA 签署证书的方式,Web Of Trust 会让很多人去签署证书,通过这样的网络化信任,就可以替代 CA 了。
去中心化的 PKI 还可以用区块链来达成。因为区块链上的数据是公开且不可篡改的,所以非常适合来存放公钥。 DID 就可以认为是一种 PKI 的形式,这些内容我们会在专门的小节中展开。
总之,PKI 也可以用去中心化的思路来完成。
总结一下。 PKI 是用来跟公钥密码学配合,完成互联网上的安全通信的相关基础设置,主要的目的是构建信任。具体做法就是通过发行证书,并由 PKI 来签署证书,为其可信度背书。CA 是最常见的 PKI 的形式,但是目前人们也在努力构建去中心的 PKI ,例如 Web Of Trust 思路的 PKI 以及基于区块链的 PKI 。