Z
Published on
· Last modified on
· Public

用比特币技术解决 HTTPS 的信任问题

1. PKI 的信任问题

PKI 是一个复杂的系统。本文针对的是 PKI 中最关键的部分 CA 的信任问题。

  1. CA 并不可信。CA 作为可信第三方在整个 PKI 中占据了非常重要的角色。在整个网络中,所有参与都都依赖于 CA 是否可信。然而在现实中的 CA 可能会遇到系统被黑内部暗箱操作 等问题。这是 PKI 中最薄弱的环节。
  2. CA 权利太大。任何一家被信任的 CA 无论是一家市值将近上百亿美元的机构,还是一个只有三五人的小公司,都可以签出像 Google, Apple 和 Microsoft 这种市值千亿公司的证书,并且没有人知道。
  3. 证书有分级,但是权利没有。比如一个根证书签出的中间证书,那么这个中间证书也是完全可信的,符合第2点中的问题。
  4. 证书信用危机。在 PKI 证书的树形结构中,任何一个根证书中间证书的 key 泄漏,整个信任链都要抛弃。
  5. 证书链不透明根证书是否可信完全取决于硬件厂商,操作系统厂商和浏览器厂商,中间证书是否可信取决于根证书

这些问题都严重影响着 HTTPS 的发展。

2. 比特币核心技术 区块链

区块链 是一个巨大的,公开的,不可更改的数据库。公开和不可更改的特点正是解决 PKI 可信第三方的完美方案。

具体方案也非常简单,CA 成为“矿工”,用算力来保证自己的权威性,网站和浏览器是最终用户。CA 靠算力挖矿和“转帐”的手续费盈利。

每个证书都绑定在一个钱包地址中,这个证书是否可信和可信程度,取决于绑定的钱包中是否有余额,以及余额多少。

当一个域名需要签一个可信的证书时,他需要通过挖矿或者购买的方式得到足够的币。之后生成一个用于绑定证书的钱包地址,并向这个地址发起一次“转帐”,将需要签名的证书放到地址的元信息中,会有多个不同 CA 的挖矿节点来验证域名的所有权及转帐是否合法。这样就完成了一次证书签名。

操作系统和浏览器中有一个钱包客户端,当用户对一个 HTTPS 网站发起请求时,浏览器从钱包区块链的数据中查询这个网站证书绑定的地址是否有余额,以及余额多少来决定该证书是不是可以信任的证书。

如果一个网站需要更新证书,只需要再进行一次“转帐”即可。

如果证书私钥被泄漏或误签,只需要再进行一次“转帐”。域名对应的旧证书和绑定的地址立即作废。如果发起转帐的新地址和旧证书绑定的地址不同,旧地址的余额也会作废。

随着时间的增长,用来存储数据的区块链会越来越大,但证书会有过期时间,约定一个最大的过期时间,比如十年,那么过期的证书和地址会作废,相关数据可以从区块链中清除。

3. 缺点

这种机制限制一个 CN(Common Name) 只能使用一个地址用来防止误签。暂时还没想好如何支持 SAN 。

4. 补充

本文只讨论技术,不讨论比特币价格等其它问题。

Sign in or Sign up Leave Comment